This commit is contained in:
薇薇安 2026-02-13 18:32:06 +08:00
parent 46d31fde59
commit cb5f513904
2 changed files with 134 additions and 34 deletions

89
analyze_losses.py Normal file
View File

@ -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% 的老订单,以避免进一步扩大损失。")

View File

@ -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,