Files
silencesdg e1691c3c41 feat: 适应度门槛95+swing_point策略+多项改进
- 新增适应度门槛: min_backtest_fitness=95, 适应度<95暂停开仓
- 新增 SwingPointRetest 策略替代 Turtle
- 新增 monday_reset.py 周重置脚本
- exit_rules: 拖尾止损相对回撤模式
- market_state: 趋势检测优化
- position: 一票制并发锁+合约规格缓存
- optimize: Optuna 替代 DEAP 遗传算法
- realtime_trader: 适应度门槛+同向递增
- weights: 动态权重管理
- cron_optimize: PYTHONPATH 修复
- .gitignore: 排除生成文件
2026-05-21 20:26:55 +08:00

318 lines
11 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MT5 代理服务配置
import importlib as _importlib, sys as _sys
def reload():
"""★ 热重载配置 — 运行时调用,无需重启 EA"""
_importlib.reload(_sys.modules[__name__])
SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5555
# 远端客户端配置(迁移到其他电脑时填写 MT5 机器的 IP)
REMOTE_SERVER_HOST = "192.168.1.5"
REMOTE_SERVER_PORT = 5555
# 数据提供者模式: "remote" (远程HTTP API) / "local" (本机MT5)
DATA_PROVIDER_MODE = "remote"
# 交易配置
SYMBOL = "XAUUSDz"
INITIAL_CAPITAL = 2054 # 初始资金(5月12日 实盘余额 $2054.23
# 时间配置
TIMEFRAME = 1# M1 (1分钟图) - MT5常量值
# 回测时间范围 (格式: "YYYY-MM-DD")
BACKTEST_START_DATE = "2025-05-01"
BACKTEST_END_DATE = "2025-08-01"
# 优化器时间范围 (格式: "YYYY-MM-DD")
OPTIMIZER_START_DATE = "2025-04-01"
OPTIMIZER_END_DATE = "2025-05-01"
# 安全设置:如果日期获取失败,自动回退到数据量模式
USE_DATE_RANGE = False # 设置为False可强制使用数据量模式
# 兼容性配置 (如果日期配置不可用,则使用数据量)
BACKTEST_COUNT = 30000 # 回测数据量
OPTIMIZER_COUNT = 6000 # 优化器数据量(约4天M1,更快响应行情)
RISK_CONFIG_CONST = {
'enable_time_based_exit': False # 关闭超时平仓,让止盈/止损/跟踪止损接管
}
# 资金分配配置
CAPITAL_ALLOCATION = {
"long_pct": 0.7, # 多头持仓分配资金比例
"short_pct": 0.3, # 空头持仓分配资金比例
}
# 模拟交易特定配置 (用于dry_run模式)
SIMULATION_CONFIG = {
"leverage": 100, # 模拟杠杆
"contract_size": 1, # XAUUSD的合约大小
"volume_step": 0.01, # 交易手数步长
"volume_min": 0.01, # 最小交易手数
"volume_max": 100.0, # 最大交易手数
"spread": 16, # 点差(点数)
}
# 回测配置
BACKTEST_CONFIG = {
"trade_direction": "both", # 交易方向: "long"(只做多), "short"(只做空), "both"(多空都支持)
"spread": 16, # 点差(点数)
}
# 实时交易配置
REALTIME_CONFIG = {
"update_interval": 5, # 更新间隔(秒)
"daily_reset_time": "00:00", # 每日重置时间
"max_long_positions": 10, # 同方向最多10单
"max_short_positions": 10, # 同方向最多10单
"min_trade_interval": 0, # 最小交易间隔(分钟),0表示无限制
"enable_auto_trading": True, # 是否启用自动交易
"dry_run": False, # 是否为模拟运行(不实际下单)
"logging_level": "DEBUG", # 日志级别
"trade_direction": "both", # 交易方向: "long"(只做多), "short"(只做空), "both"(多空都支持)
}
# 对冲配置(信号对冲 + 回撤锁仓)
HEDGE_CONFIG = {
# ── 信号对冲 ──
"signal_hedge_enabled": True, # 启用信号对冲
"signal_hedge_threshold": 2.0, # 加权信号绝对值超此值触发对冲
"signal_hedge_ratio": 0.5, # 对冲手数比例 (0.5=半仓对冲)
"signal_unhedge_threshold": 1.0, # 信号回到此值以下解锁
# ── 回撤锁仓 ──
"drawdown_hedge_enabled": True, # 启用回撤锁仓
"drawdown_hedge_pct": -0.003, # 浮亏超-0.3%触发锁仓
"drawdown_hedge_ratio": 1.0, # 锁仓比例 (1.0=全额锁仓)
# ── 对冲单止盈 ──
"hedge_take_profit_pct": 0.005, # 对冲单自身盈利0.5%止盈
# ── 锁仓管理 ──
"lock_net_profit_pct": 0.0, # 锁仓组合净盈利>0→双平离场
# ── 风控限制 ──
"max_hedges_per_day": 5, # 每日最多对冲5次
}
# 数据获取配置
DATA_CONFIG = {
"m1_bars_count": 5000, # 1分钟K线数据获取数量
}
# 遗传算法优化器配置
GENETIC_OPTIMIZER_CONFIG = {
# 算法参数
"population_size": 20, # 种群大小(精简化,6000bar快速收敛)
"generations": 6, # 进化代数
"crossover_probability": 0.7, # 交叉概率
"mutation_probability": 0.3, # 变异概率
# 选择算法参数
"tournament_size": 3, # 锦标赛选择大小
# 变异算法参数
"mutation_mu": 0, # 变异均值
"mutation_sigma": 0.1, # 变异标准差
"mutation_indpb": 0.1, # 变异概率(每个基因)
# 并行处理
"enable_multiprocessing": True, # 启用多进程
"processes": None, # 进程数,None表示自动检测
# 输出控制
"verbose": True, # 详细输出
"save_generation_info": True, # 保存代数信息
}
'''
此处上面的是固定的参数,可手动调整
--------------------------------------------------------
此处下面所有参数,都将进入优化器进行优化
'''
# 信号阈值配置(优化器结果 2026-05-10,5万根M1数据)
SIGNAL_THRESHOLDS = {
"buy_threshold": 2.087211936631902,
"sell_threshold": -0.6594468309213586
}
# 风险管理参数(手动设定,优化器不宜优化 — 保证金% 基础值,杠杆自适应缩放)
RISK_CONFIG = {
# ★ 以下百分比均为保证金%(100x基准),实盘按 (MT5杠杆/100) 缩放
# 2000x下:-0.70 → -14×杠杆 → -1400%保证金 = -$32 ≈ 32点
"risk_leverage": 100, # 100x基准计算保证金%(不改实际杠杆)
"stop_loss_pct": -0.10, # -10% 保证金 ←手动设定,不进优化器
"profit_retracement_pct": 0.03, # ★ 3% 回撤容忍(相对!3%×峰值利润) ←手动设定
"retracement_mode": "relative", # ★ 回撤模式从绝对值改为相对(利润的3%)
"min_profit_for_trailing": 0.10, # +10% 后激活拖尾 ←手动设定
"take_profit_pct": 0.15, # +15% 止盈 ←手动设定
"max_daily_loss": -0.3,
"max_holding_minutes": 0, # 0=不启用时间平仓
"min_profit_for_time_exit": 0.05,
"cooldown_bars": 30,
# ★ 同向加仓门槛递增:第N单需要的信号 = 基础阈值 × α^(N-1)
"entry_escalation_alpha": 1.2, # 递增系数(1.2=每单信号强20%)
# ★ 波动率自适应拖尾:激活点数 = 基础点数 × (当前ATR / 长周期ATR)
"vol_adaptive_trailing": True, # 启动波动率自适应拖尾
"trailing_atr_period": 14, # ATR短周期
"trailing_atr_baseline": 100, # ATR长周期(基准)
# ★ 硬止损倍率:MT5 服务器端 SL/TP = 软止损 × 倍率(兜底,仅 EA 挂掉时触发)
"hard_sl_multiplier": 1.5, # 硬 SL = 软 SL × 1.5
"hard_tp_multiplier": 1.3, # 硬 TP = 软 TP × 1.3
# ★ 回测适应度门槛:低于此值不开新单(适应度≈回测总盈亏$)
"min_backtest_fitness": 95, # 适应度<95 → 不开仓(低于95说明市场难做)
}
# ★ 最近优化适应度(daily_optimize.py 写入,EA 热加载读取)
LAST_OPTIMIZATION_FITNESS = 58.63
# 市场状态分析参数
MARKET_STATE_CONFIG = {
"trend_period": 60,
"retracement_tolerance": 0.3857733104065197,
"volume_period": 42,
"volume_ma_period": 30
}
# 策略参数配置(优化器结果 2026-05-10,5万根M1数据)
STRATEGY_CONFIG = {
"ma_cross": {
"short_window": 7,
"long_window": 18
},
"rsi": {
"period": 19,
"overbought": 75,
"oversold": 31
},
"bollinger": {
"period": 20,
"std_dev": 2.2757986281351896
},
"macd": {
"fast_ema": 19,
"slow_ema": 23,
"signal_period": 13
},
"mean_reversion": {
"period": 29,
"std_dev": 2.149
},
"momentum_breakout": {
"period": 15,
"momentum_period": 19
},
"kdj": {
"period": 21
},
"swing_point": {
"left_bars": 4,
"right_bars": 3,
"tolerance_pct": 0.0006056955205083707,
"num_swings": 2
},
"daily_breakout": {
"bars_count": 1392
},
"wave_theory": {
"ema_short": 8,
"ema_medium": 11,
"ema_long": 39,
"wave_period": 19,
"range_period": 15,
"adx_period": 24,
"momentum_period": 10,
"range_threshold": 0.0023249568571626195,
"adx_threshold": 28
}
}
# 市场趋势判断权重配置
TREND_INDICATOR_WEIGHTS = {
"price_breakout": 0.2506453627492913,
"volume_confirmation": 0.2851951176719032,
"momentum oscillator": 0.3677,
"moving_average": 0.353451489159348
}
# 趋势判断阈值
TREND_THRESHOLDS = {
"strong_trend": 0.4040165929726079,
"weak_trend": 0.2963326526031991,
"volume_spike": 1.5234871986051206,
"oversold": 31,
"overbought": 75
}
# 动态权重配置(优化器结果 2026-05-10,5万根M1数据)
DEFAULT_WEIGHTS = {
"ma_cross": 0.4771175228437661,
"rsi": 0.478479356771334,
"bollinger": 1.3391582231825303,
"mean_reversion": 1.9958459833789346,
"momentum_breakout": 0.7567594572894596,
"macd": 1.170771336653618,
"kdj": 0.013296663814979182,
"swing_point": 0.5194535227966377,
"daily_breakout": 0.6506588091889913,
"wave_theory": 1.6765424080384428
}
# 市场状态策略权重配置
MARKET_STATE_WEIGHTS = {
"uptrend": {
"ma_cross": 0.4771175228437661,
"momentum_breakout": 0.7567594572894596,
"swing_point": 0.5194535227966377,
"macd": 1.170771336653618,
"daily_breakout": 0.6506588091889913,
"rsi": 0.478479356771334,
"bollinger": 1.3391582231825303,
"kdj": 0.013296663814979182,
"mean_reversion": 1.9958459833789346,
"wave_theory": 1.6765424080384428
},
"downtrend": {
"ma_cross": 0.4771175228437661,
"momentum_breakout": 0.7567594572894596,
"swing_point": 0.5194535227966377,
"macd": 1.170771336653618,
"daily_breakout": 0.6506588091889913,
"rsi": 0.478479356771334,
"bollinger": 1.3391582231825303,
"kdj": 0.013296663814979182,
"mean_reversion": 1.9958459833789346,
"wave_theory": 1.6765424080384428
},
"ranging": {
"rsi": 0.478479356771334,
"bollinger": 1.3391582231825303,
"mean_reversion": 1.9958459833789346,
"kdj": 0.013296663814979182,
"wave_theory": 1.6765424080384428,
"ma_cross": 0.4771175228437661,
"macd": 1.170771336653618,
"swing_point": 0.5194535227966377,
"momentum_breakout": 0.7567594572894596,
"daily_breakout": 0.6506588091889913
},
"none": DEFAULT_WEIGHTS
}
# 市场趋势置信度阈值配置
CONFIDENCE_THRESHOLDS = {
"high_confidence": 0.5050416445534804,
"medium_confidence": 0.6102467437388168
}