diff --git a/frontend/src/components/StatsDashboard.jsx b/frontend/src/components/StatsDashboard.jsx
index a9bb05a..7f23d60 100644
--- a/frontend/src/components/StatsDashboard.jsx
+++ b/frontend/src/components/StatsDashboard.jsx
@@ -357,7 +357,7 @@ const StatsDashboard = () => {
diff --git a/frontend/src/components/TradeList.jsx b/frontend/src/components/TradeList.jsx
index 3fc1738..8104d01 100644
--- a/frontend/src/components/TradeList.jsx
+++ b/frontend/src/components/TradeList.jsx
@@ -309,7 +309,7 @@ const TradeList = () => {
{trade.symbol} |
{trade.side} |
{parseFloat(trade.quantity).toFixed(4)} |
-
{margin.toFixed(2)} USDT |
+
{margin >= 0.01 ? margin.toFixed(2) : margin.toFixed(4)} USDT |
{parseFloat(trade.entry_price).toFixed(4)} |
{trade.exit_price ? parseFloat(trade.exit_price).toFixed(4) : '-'} |
= 0 ? 'positive' : 'negative'}>
@@ -377,7 +377,7 @@ const TradeList = () => {
保证金
- {margin.toFixed(2)} USDT
+ {margin >= 0.01 ? margin.toFixed(2) : margin.toFixed(4)} USDT
入场价
diff --git a/trading_system/position_manager.py b/trading_system/position_manager.py
index 46265e6..5a9212d 100644
--- a/trading_system/position_manager.py
+++ b/trading_system/position_manager.py
@@ -6,6 +6,7 @@ import logging
import json
import aiohttp
from typing import Dict, List, Optional
+from datetime import datetime
try:
from .binance_client import BinanceClient
from .risk_manager import RiskManager
@@ -20,6 +21,7 @@ logger = logging.getLogger(__name__)
# 尝试导入数据库模型(如果可用)
DB_AVAILABLE = False
Trade = None
+get_beijing_time = None
try:
import sys
from pathlib import Path
@@ -27,7 +29,7 @@ try:
backend_path = project_root / 'backend'
if backend_path.exists():
sys.path.insert(0, str(backend_path))
- from database.models import Trade
+ from database.models import Trade, get_beijing_time
DB_AVAILABLE = True
logger.info("✓ 数据库模型导入成功,交易记录将保存到数据库")
else:
@@ -42,6 +44,14 @@ except Exception as e:
logger.warning(" 交易记录将不会保存到数据库")
DB_AVAILABLE = False
+# 如果没有导入get_beijing_time,创建一个本地版本
+if get_beijing_time is None:
+ from datetime import datetime, timezone, timedelta
+ BEIJING_TZ = timezone(timedelta(hours=8))
+ def get_beijing_time():
+ """获取当前北京时间(UTC+8)"""
+ return datetime.now(BEIJING_TZ).replace(tzinfo=None)
+
class PositionManager:
"""仓位管理类"""
@@ -334,7 +344,7 @@ class PositionManager:
'initialStopLoss': stop_loss_price, # 初始止损(用于移动止损)
'leverage': leverage,
'entryReason': entry_reason,
- 'entryTime': datetime.now(), # 记录入场时间(用于计算持仓持续时间)
+ 'entryTime': get_beijing_time(), # 记录入场时间(使用北京时间,用于计算持仓持续时间)
'strategyType': 'trend_following', # 策略类型(简化后只有趋势跟踪)
'atr': atr,
'maxProfit': 0.0, # 记录最大盈利(用于移动止损)
@@ -446,12 +456,11 @@ class PositionManager:
duration_minutes = None
if entry_time:
try:
- from datetime import datetime
if isinstance(entry_time, str):
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -590,12 +599,11 @@ class PositionManager:
duration_minutes = None
if entry_time:
try:
- from datetime import datetime
if isinstance(entry_time, str):
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -848,12 +856,11 @@ class PositionManager:
duration_minutes = None
if entry_time:
try:
- from datetime import datetime
if isinstance(entry_time, str):
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -964,12 +971,11 @@ class PositionManager:
duration_minutes = None
if entry_time:
try:
- from datetime import datetime
if isinstance(entry_time, str):
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -1026,7 +1032,7 @@ class PositionManager:
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -1313,7 +1319,7 @@ class PositionManager:
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
@@ -1909,7 +1915,7 @@ class PositionManager:
entry_dt = datetime.strptime(entry_time, '%Y-%m-%d %H:%M:%S')
else:
entry_dt = entry_time
- exit_dt = datetime.now()
+ exit_dt = get_beijing_time() # 使用北京时间计算持续时间
duration = exit_dt - entry_dt
duration_minutes = int(duration.total_seconds() / 60)
except Exception as e:
|