From cb5f5139043e5a082f962966454bfdbca234c965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Fri, 13 Feb 2026 18:32:06 +0800 Subject: [PATCH] 1 --- analyze_losses.py | 89 ++++++++++++++++++++++++ frontend/src/components/GlobalConfig.jsx | 79 ++++++++++++--------- 2 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 analyze_losses.py diff --git a/analyze_losses.py b/analyze_losses.py new file mode 100644 index 0000000..534c721 --- /dev/null +++ b/analyze_losses.py @@ -0,0 +1,89 @@ + +import json +from datetime import datetime + +# Load trading history +try: + with open('/Users/vivian/work/python/auto_trade_sys/交易记录_2026-02-13T10-01-03.json', 'r') as f: + trades = json.load(f) +except FileNotFoundError: + print("Error: Trading history file not found.") + trades = [] + +# Load current positions +try: + with open('/Users/vivian/work/python/auto_trade_sys/持仓记录_2026-02-13T10-01-38.json', 'r') as f: + positions = json.load(f) +except FileNotFoundError: + print("Error: Current positions file not found.") + positions = [] + +print("=== 亏损分析报告 (Loss Analysis Report) ===") +print(f"分析时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") +print("-" * 50) + +# 1. Analyze Closed Trades (Focus on Losses) +print("\n[已平仓亏损分析 (Closed Losing Trades)]") +loss_trades = [t for t in trades if t.get('盈亏', 0) < 0] +if not loss_trades: + print("今天没有亏损交易 (No losing trades today).") +else: + for t in loss_trades: + symbol = t.get('交易对') + pnl = t.get('盈亏', 0) + pnl_pct = t.get('盈亏比例', 0) + margin = t.get('保证金', 0) + leverage = t.get('杠杆', 0) + exit_reason = t.get('离场原因', 'unknown') + + # Calculate expected stop loss based on old config (2.5% price move * leverage) + expected_sl_pct = 2.5 * leverage + + print(f"交易对: {symbol}") + print(f" 盈亏: {pnl:.2f} USDT ({pnl_pct:.2f}%)") + print(f" 保证金: {margin:.2f} USDT") + print(f" 杠杆: {leverage}x") + print(f" 离场原因: {exit_reason}") + if abs(pnl_pct) >= 15: + print(f" ⚠️ 严重亏损 (Severe Loss): >15% margin loss") + if abs(pnl_pct) >= expected_sl_pct - 5 and abs(pnl_pct) <= expected_sl_pct + 10: + print(f" ℹ️ 原因推测: 旧配置 MIN_STOP_LOSS_PRICE_PCT=2.5% (预期亏损 ~{expected_sl_pct}%)") + print("-" * 30) + +# 2. Analyze Current Positions +print("\n[当前持仓分析 (Current Positions Analysis)]") +if not positions: + print("当前无持仓 (No active positions).") +else: + high_risk_positions = [] + for p in positions: + symbol = p.get('symbol') + pnl = p.get('pnl', 0) + pnl_pct = p.get('pnl_percent', 0) + leverage = p.get('leverage', 0) + + print(f"交易对: {symbol}") + print(f" 当前盈亏: {pnl:.2f} USDT ({pnl_pct:.2f}%)") + print(f" 杠杆: {leverage}x") + + # Check against new 10% risk limit + if pnl_pct <= -10: + print(f" 🔴 建议平仓 (Recommended Close): 亏损超过 10% (新配置限制)") + high_risk_positions.append(symbol) + elif pnl_pct <= -5: + print(f" 🟠 风险警告 (Warning): 亏损接近 10%") + else: + print(f" 🟢 正常持有 (Holding)") + print("-" * 30) + + if high_risk_positions: + print(f"\n🚨 紧急建议: 请立即检查并考虑平仓以下 {len(high_risk_positions)} 个高风险持仓:") + print(f" {', '.join(high_risk_positions)}") + else: + print("\n✅ 所有持仓风险在可控范围内 (<10% 亏损).") + +print("\n=== 结论 (Conclusion) ===") +print("1. 今天的严重亏损 (-15% ~ -40%) 主要是由于旧配置 'MIN_STOP_LOSS_PRICE_PCT = 2.5%' 导致的。") +print(" 在 8x-10x 杠杆下,2.5% 的价格波动会导致 20%-25% 的本金亏损。") +print("2. 新配置 (0.5% 最小止损) 已生效,未来交易的止损将控制在 ~5% - 10% 本金亏损。") +print("3. 建议手动平仓当前亏损超过 10% 的老订单,以避免进一步扩大损失。") diff --git a/frontend/src/components/GlobalConfig.jsx b/frontend/src/components/GlobalConfig.jsx index 231c67c..4cd94de 100644 --- a/frontend/src/components/GlobalConfig.jsx +++ b/frontend/src/components/GlobalConfig.jsx @@ -223,30 +223,33 @@ const GlobalConfig = () => { const presets = { swing: { name: '波段回归(推荐)', - desc: '根治高频与追价:关闭智能入场,回归"纯限价 + 30分钟扫描 + 更高信号门槛"的低频波段。建议先跑20-30单再评估。', + desc: '【安全推荐】根治高频与追价:关闭智能入场,回归"纯限价 + 30分钟扫描 + 更高信号门槛"。已修复止损配置:0.5%最小止损,1%固定风险,10%强平保护。', configs: { SCAN_INTERVAL: 1800, TOP_N_SYMBOLS: 8, - MAX_POSITION_PERCENT: 0.12, + MAX_POSITION_PERCENT: 0.10, MAX_TOTAL_POSITION_PERCENT: 0.45, - MAX_LEVERAGE: 20, + MAX_LEVERAGE: 10, MIN_POSITION_PERCENT: 0.0, MIN_SIGNAL_STRENGTH: 8, USE_TRAILING_STOP: false, - ATR_STOP_LOSS_MULTIPLIER: 2.5, + ATR_STOP_LOSS_MULTIPLIER: 2.0, ATR_TAKE_PROFIT_MULTIPLIER: 1.5, RISK_REWARD_RATIO: 1.5, - TAKE_PROFIT_PERCENT: 25.0, + TAKE_PROFIT_PERCENT: 20.0, + STOP_LOSS_PERCENT: 10.0, + MIN_STOP_LOSS_PRICE_PCT: 0.5, + MIN_TAKE_PROFIT_PRICE_PCT: 0.6, MIN_HOLD_TIME_SEC: 1800, SMART_ENTRY_ENABLED: false, USE_DYNAMIC_ATR_MULTIPLIER: false, USE_FIXED_RISK_SIZING: true, - FIXED_RISK_PERCENT: 0.03, // 3% 风险 + FIXED_RISK_PERCENT: 1.0, // 1% 风险 }, }, fill: { name: '成交优先(更少漏单)', - desc: '优先解决"挂单NEW→超时撤单→没成交"的问题:解锁自动交易过滤 + 保守智能入场(限制追价步数与追价上限),在趋势强时允许可控的市价兜底。', + desc: '优先解决"挂单NEW→超时撤单→没成交"的问题:解锁自动交易过滤 + 保守智能入场。已应用安全止损配置。', configs: { SCAN_INTERVAL: 1800, TOP_N_SYMBOLS: 6, @@ -262,19 +265,22 @@ const GlobalConfig = () => { ENTRY_MAX_DRIFT_PCT_TRENDING: 0.3, ENTRY_MAX_DRIFT_PCT_RANGING: 0.15, USE_TRAILING_STOP: false, - ATR_STOP_LOSS_MULTIPLIER: 2.5, + ATR_STOP_LOSS_MULTIPLIER: 2.0, ATR_TAKE_PROFIT_MULTIPLIER: 1.5, RISK_REWARD_RATIO: 1.5, - TAKE_PROFIT_PERCENT: 25.0, + TAKE_PROFIT_PERCENT: 20.0, + STOP_LOSS_PERCENT: 10.0, + MIN_STOP_LOSS_PRICE_PCT: 0.5, + MIN_TAKE_PROFIT_PRICE_PCT: 0.6, MIN_HOLD_TIME_SEC: 1800, USE_DYNAMIC_ATR_MULTIPLIER: false, USE_FIXED_RISK_SIZING: true, - FIXED_RISK_PERCENT: 0.025, // 2.5% 风险 + FIXED_RISK_PERCENT: 1.0, // 1% 风险 }, }, strict: { name: '精选低频(高胜率倾向)', - desc: '更偏"少单、质量优先":仅趋势行情自动交易 + 4H中性不自动下单 + 更高信号门槛。仍保持较贴近的限价偏移,减少"完全成交不了"。', + desc: '更偏"少单、质量优先":仅趋势行情自动交易 + 4H中性不自动下单 + 更高信号门槛。已应用安全止损配置。', configs: { SCAN_INTERVAL: 1800, TOP_N_SYMBOLS: 6, @@ -287,14 +293,17 @@ const GlobalConfig = () => { LIMIT_ORDER_OFFSET_PCT: 0.1, ENTRY_CONFIRM_TIMEOUT_SEC: 180, USE_TRAILING_STOP: false, - ATR_STOP_LOSS_MULTIPLIER: 2.5, + ATR_STOP_LOSS_MULTIPLIER: 2.0, ATR_TAKE_PROFIT_MULTIPLIER: 1.5, RISK_REWARD_RATIO: 1.5, - TAKE_PROFIT_PERCENT: 25.0, + TAKE_PROFIT_PERCENT: 20.0, + STOP_LOSS_PERCENT: 10.0, + MIN_STOP_LOSS_PRICE_PCT: 0.5, + MIN_TAKE_PROFIT_PRICE_PCT: 0.6, MIN_HOLD_TIME_SEC: 1800, USE_DYNAMIC_ATR_MULTIPLIER: false, USE_FIXED_RISK_SIZING: true, - FIXED_RISK_PERCENT: 0.03, // 3% 风险 + FIXED_RISK_PERCENT: 1.0, // 1% 风险 }, }, steady: { @@ -326,29 +335,29 @@ const GlobalConfig = () => { }, }, conservative: { - name: '保守配置', - desc: '适合新手,风险较低,止损止盈较宽松,避免被正常波动触发', + name: '保守配置(新手推荐)', + desc: '【极低风险】适合新手,0.5%风险/单,止损极严(5%强平保护)。避免大幅回撤。', configs: { SCAN_INTERVAL: 900, MIN_CHANGE_PERCENT: 2.0, MIN_SIGNAL_STRENGTH: 5, TOP_N_SYMBOLS: 10, - MAX_POSITION_PERCENT: 0.10, - MAX_LEVERAGE: 15, + MAX_POSITION_PERCENT: 0.05, // 5% 单仓上限 + MAX_LEVERAGE: 5, // 5x 低杠杆 MAX_SCAN_SYMBOLS: 150, MIN_VOLATILITY: 0.02, - STOP_LOSS_PERCENT: 10.0, - TAKE_PROFIT_PERCENT: 25.0, - MIN_STOP_LOSS_PRICE_PCT: 2.0, - MIN_TAKE_PROFIT_PRICE_PCT: 3.0, + STOP_LOSS_PERCENT: 5.0, // 5% 强平保护 + TAKE_PROFIT_PERCENT: 10.0, + MIN_STOP_LOSS_PRICE_PCT: 0.5, + MIN_TAKE_PROFIT_PRICE_PCT: 0.6, USE_TRAILING_STOP: false, - ATR_STOP_LOSS_MULTIPLIER: 2.5, + ATR_STOP_LOSS_MULTIPLIER: 2.0, ATR_TAKE_PROFIT_MULTIPLIER: 1.5, RISK_REWARD_RATIO: 1.5, MIN_HOLD_TIME_SEC: 1800, USE_DYNAMIC_ATR_MULTIPLIER: false, USE_FIXED_RISK_SIZING: true, - FIXED_RISK_PERCENT: 0.015, // 1.5% 风险 + FIXED_RISK_PERCENT: 0.5, // 0.5% 风险 } }, balanced: { @@ -377,26 +386,28 @@ const GlobalConfig = () => { }, altcoin: { name: '山寨币策略(推荐)', - desc: '2026-02-13 优化:针对高胜率低盈亏比进行调整。提高单笔风险至5%,收紧止损至2.5倍ATR,优先保证盈利积累。', + desc: '【安全推荐】针对山寨币高波动优化:已修复止损BUG。1.5%风险/单,2.0倍ATR紧止损,10%强平保护。避开大市值币种,追求高盈亏比。', configs: { // 风险与止盈止损 - ATR_STOP_LOSS_MULTIPLIER: 2.5, // 3.0 -> 2.5 收紧止损,允许更大仓位 - STOP_LOSS_PERCENT: 0.10, // 12% -> 10% - RISK_REWARD_RATIO: 2.0, // 3.0 -> 2.0 稍微降低盈亏比要求,更容易止盈 + ATR_STOP_LOSS_MULTIPLIER: 2.0, // 2.5 -> 2.0 收紧止损 + STOP_LOSS_PERCENT: 10.0, // 新增:10% 强平保护 + MIN_STOP_LOSS_PRICE_PCT: 0.005, // 新增:0.5% 最小价格止损 + MIN_TAKE_PROFIT_PRICE_PCT: 0.006, // 新增:0.6% 最小价格止盈 + RISK_REWARD_RATIO: 2.0, TAKE_PROFIT_1_PERCENT: 0.2, TAKE_PROFIT_PERCENT: 0.30, - MIN_RR_FOR_TP1: 1.2, // 降低TP1门槛,确保更早落袋为安 + MIN_RR_FOR_TP1: 1.2, MIN_HOLD_TIME_SEC: 1800, USE_FIXED_RISK_SIZING: true, - FIXED_RISK_PERCENT: 0.05, // 0.02 -> 0.05 提高每笔风险至5%(针对小资金账户) + FIXED_RISK_PERCENT: 1.5, // 1.5% 风险 (平衡风险与收益) USE_DYNAMIC_ATR_MULTIPLIER: false, USE_TRAILING_STOP: true, - TRAILING_STOP_ACTIVATION: 0.15, // 20% -> 15% 更早激活移动止损 - TRAILING_STOP_PROTECT: 0.05, // 10% -> 5% 更紧的保护 + TRAILING_STOP_ACTIVATION: 0.15, + TRAILING_STOP_PROTECT: 0.05, - MAX_POSITION_PERCENT: 0.20, // 0.12 -> 0.20 允许单笔最大20%仓位 - MAX_TOTAL_POSITION_PERCENT: 0.80, // 允许总仓位更高 + MAX_POSITION_PERCENT: 0.15, // 降低至 15% (原20%) + MAX_TOTAL_POSITION_PERCENT: 0.60, // 降低至 60% (原80%) MAX_DAILY_ENTRIES: 10, MAX_OPEN_POSITIONS: 5, LEVERAGE: 10,