|
一、完整代码拆解:全自动取钱机 MQL4 原版 EA 核心逻辑
基础限制
- 仅模拟盘运行:开头 if(!IsDemo()){return;} 实盘直接不执行任何交易;
- 固定周期 M15:参数 Chart=15,开仓信号读取 M15 LWMA3 均线;
- 定时开仓:仅两个固定时点允许首单开仓
- 时段 A:Hour=8,Minute=15
- 时段 B:Hour=18,Minute=4
- 无止损 SL=0,纯马丁网格加仓,带总亏损强制平仓、声音 + 邮件预警、全面板资金信息展示。
完整功能模块拆分
模块 1 输入参数层(外部可调)
- 风控:最大亏损全部平仓、亏损报警数值
- 定时交易:2 组小时 + 分钟定时窗口
- 交易配置:魔术号、首单手数 InitLots、网格加仓间距 Step、止盈 TP、滑点 Slippage
- 开关:ContinueTrading 一轮止盈后是否继续交易
模块 2 生命周期函数
- init():创建 3 个基础文字标签
- deinit():标签坐标配置(代码逻辑写反,无实际清理作用,存在 BUG)
- start():核心循环,每 tick 执行全部逻辑
模块 3 持仓遍历统计模块(第一步执行)
遍历所有订单,筛选同品种 + 同 Magic 订单,统计:
- 多空总手数 TotalLots_B / TotalLots_S
- 多单首开价、最高开仓价 LastPrice_B
- 空单首开价、最低开仓价 LastPrice_S
- 浮动总点数 Float_Pips(用于整体止盈)
模块 4 统一止盈平仓模块
总浮动点数 ≥ TP 参数 → CloseAll=true,遍历批量平掉全部多空订单,清空标记等待下一轮交易。
模块 5 定时首单开仓逻辑(LWMA 均线过滤)
- 收盘价≥均线、无多单、到达定时窗口 → 开首多单 InitLots
- 收盘价≤均线、无空单、到达定时窗口 → 开首空单 InitLots
仅在 8:15 / 18:04 两个时间点触发首单,其余时间不新建首仓。
模块 6 马丁网格加仓模块(核心)
- 多头加仓:价格上涨超过多单最高开仓价 + TStep,加同等 InitLots 多单
- 多头反向锁仓:价格下跌至首多单下方 5 倍网格,直接开空单,手数等于全部多单手数并 return 阻断后续逻辑
- 空头加仓:价格下跌超过空单最低开仓价 - TStep,加同等 InitLots 空单
- 空头反向锁仓:价格上涨至首空单上方 5 倍网格,直接开多单,手数等于全部空单手数并 return 阻断后续逻辑
模块 7 全局账户亏损风控(最高优先级)
- 统计全部订单总浮亏 profit,低于「最大亏损全部平仓」参数一键全平所有订单;
- 账户总浮亏低于「亏损报警数值」:播放 alert.wav 警报 + 发送预警邮件。
模块 8 图表 UI 绘制模块(占用大量代码)
循环创建大量 OBJ_LABEL 文字,实时展示:
EA 名称、QQ、日线涨跌、账户杠杆、余额、净值、保证金、可用保证金、总盈亏、服务器时间、品种点差、日线波幅、总订单数、多单手数、空单手数。
BUG:每次 tick 重复执行 ObjectCreate,图表会堆积大量重复标签,造成卡顿。
模块 9 交易循环开关
ContinueTrading=false 一轮止盈平仓后不再新开仓;true 则持续循环交易。
二、原版 EA 致命缺陷
- 仅模拟盘可用,实盘直接禁用;
- deinit 函数逻辑错误,无法销毁图表标签,长期运行卡顿;
- 每 tick 重复创建标签,内存持续占用;
- 所有订单无止损,单边反向行情无限浮亏,仅靠总亏损强制平仓兜底,跳空易穿仓爆仓;
- 固定 2 个时间窗口,其余时段无法开首单,行情错过无补救;
- 反向锁仓一次性对等手数对冲,锁仓后双向持仓叠加手续费、隔夜利息损耗;
- 无波动率、趋势过滤,震荡行情无限马丁加仓,回撤巨大;
- 无 ATR/VIX 自适应,网格间距固定,不匹配市场波动。
|