From bbae52c15f501088d251c6827440813f476f187e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Sat, 17 Jan 2026 11:52:40 +0800 Subject: [PATCH] a --- frontend/src/components/StatsDashboard.jsx | 6 ++-- frontend/src/components/TradeList.jsx | 4 +-- trading_system/position_manager.py | 32 +++++++++++++--------- 3 files changed, 24 insertions(+), 18 deletions(-) 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 = () => {
数量: {parseFloat(trade.quantity || 0).toFixed(4)}
-
保证金: {margin.toFixed(2)} USDT
+
保证金: {margin >= 0.01 ? margin.toFixed(2) : margin.toFixed(4)} USDT
入场价: {entryPrice.toFixed(4)}
{trade.mark_price && ( @@ -384,13 +384,13 @@ const StatsDashboard = () => { 止损: -{stopLossPercent.toFixed(2)}% (of margin) (价: {stopLossPrice.toFixed(4)}) - (金额: -{stopLossAmount.toFixed(2)} USDT) + (金额: -{stopLossAmount >= 0.01 ? stopLossAmount.toFixed(2) : stopLossAmount.toFixed(4)} USDT)
止盈: +{takeProfitPercent.toFixed(2)}% (of margin) (价: {takeProfitPrice.toFixed(4)}) - (金额: +{takeProfitAmount.toFixed(2)} USDT) + (金额: +{takeProfitAmount >= 0.01 ? takeProfitAmount.toFixed(2) : takeProfitAmount.toFixed(4)} USDT)
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: