mirror of
https://github.com/silencesdg/mt5_python_ea_suite.git
synced 2026-07-27 18:57:44 +00:00
e1691c3c41
- 新增适应度门槛: 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: 排除生成文件
318 lines
11 KiB
Python
318 lines
11 KiB
Python
# 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
|
||
}
|