1
This commit is contained in:
parent
46d31fde59
commit
cb5f513904
89
analyze_losses.py
Normal file
89
analyze_losses.py
Normal 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% 的老订单,以避免进一步扩大损失。")
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user