从市场里选择智能交易系统的正确途径·进阶篇
「EA 的三种事件驱动骨架」
实盘里 EA 的逻辑范式基本只有三类:盯即时报价、盯柱线、由计时器触发。前两类都挂在 OnTick 上,第三类靠 OnTimer,算法交易者日常用到的事件驱动也就这几条主路。 基于即时报价的系统对网速极敏感,尤其市价单成交场景下,50 毫秒的延迟就可能改变入场价。这类策略往往只能靠租靠近经纪商服务器的 VPS 来压延迟,外汇和贵金属本身杠杆高、滑点风险大,这种隐性成本得先算进账。 柱线型 EA 在 MQL5 里没有“新柱线事件”,得自己用 Time[] 数组过滤。上面代码里 bNewBar() 拿 Time[1] 和上次记录的 PrevTimeAlpha 比大小,第一次跑只记时间不触发,之后每根新柱返回 true,在 OnTick 里包一层就能当柱线事件用。 计时器型在 OnInit 里 EventSetTimer(60) 设 60 毫秒周期,逻辑写进 OnTimer。不过策略测试器对这类 EA 支持参差,作者本人对计时器方案偏怀疑。 从多年自研和帮人排查的经验看,柱线跟踪的系统最稳,即时报价能挖到厚利但难得多。先把这三种范式在代码层拆清,后面才能谈怎么测。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Expert tick function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">void OnTick() { class=class="str">"cmt">//some logic } class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Expert new bar function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">class="kw">datetime PrevTimeAlpha=class="num">0; class="type">bool bNewBar() { if ( Time[class="num">1] > PrevTimeAlpha ) { if ( PrevTimeAlpha > class="num">0 ) { PrevTimeAlpha=Time[class="num">1]; class="kw">return true; } else { PrevTimeAlpha=Time[class="num">1]; class="kw">return false; } } else class="kw">return false; } class="type">void OnTick() { if ( bNewBar() ) { class=class="str">"cmt">/*some logic*/ } } class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Timer function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">void OnTimer() { class=class="str">"cmt">//some logic } class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Expert initialization function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">int OnInit() { EventSetTimer(class="num">60); class="kw">return(INIT_SUCCEEDED); }
回测前先把历史数据和点差机制摸透
MT5 策略测试器跑 EA 有两种即时报价来源:按公式在柱内模拟生成,或从经纪商服务器拉真实 tick。MT5 原生支持真实 tick 回测,MT4 得额外挂软件,能上 MT5 就别折腾 MT4。 真实 tick 和柱线很吃磁盘,经纪商服务器只留有限数据。MT5 主面板点 “symbols(品种)” → 选品种和时间段 → “Request(请求)”,就能看到服务器实际能给多少 tick。若返回数量少于你填的区间,窗口会红框提示你真实 tick 从哪天起才有;缺的区间平台会造模拟 tick,基于它的回测结果会失真。 柱线方面,MT5 里大多数品种通常能拿到 2000 根甚至更早就有的数据,单次请求上限常见为 100000 根(受 Max bars in history 限制,图表显示量另受 Max bars in chart 限制)。不够用就调大存储设置、重启终端再请求。MT4 是从 “工具 → 历史服务器” 进类似窗口,但只能按限制全量下载所有时间帧,不能只拽一段。 回测起点我建议先用历史中最近一整年跑一遍粗筛:EA 这段时间都拉胯就直接换标的,能看再铺开全历史。条件允许一律用真实 tick;EA 若带资金管理机制,测试时最好先关掉,否则你丢掉了原始预期回报这个核心评估量。 点差坑得记牢:MT5 测试器对点差有下限保护,设得比历史平均 tick 点差还低也没用,会强制按最小限制跑,这是防买家自欺;设高于下限才生效。MT4 反而能写死从 1 起任意点差,全程固定不随行情变,虽好填但不真实。MT5 里选“当前点差”会用每根柱存的值,用每次 tick 测时连逐笔点差都还原,最接近实盘。外汇贵金属杠杆高、点差跳变能瞬间吞掉浮盈,回测务必把点差扩大、佣金、滑点都算进去。
◍ 自造两个回撤比指标筛策略
回测跑出正收益后,别只盯着平台给的夏普和回撤看。可以手算两个比值,把余额、净值回撤和总盈利揉成一个数:Alpha = 总盈利 / 最大净值回撤,Betta = 总盈利 / 最大余额回撤。MT4 和 MT5 的策略测试器报告里都直接给出最大净值回撤与最大余额回撤,总盈利用结束余额减初始余额即可,计算成本极低。 这两个值越高,说明单位回撤吃到的利润越厚,策略在统计样本上更可能站得住。经验上 Alpha 和 Betta 落在 5~10 区间,意味着风险相对可控且预判能力不差;低于 5 的样本大多经不起实盘磨损。 配合几个硬门槛一起卡:预期收益 MathWaitingPoints 至少 3 倍于平均点差 MiddleSpread;盈利因子 ProfitFactor ≥ 1.1~1.2;每年成交 TradesPerYear ≥ 20~30。外汇和贵金属杠杆高、滑点跳空频繁,这些阈值只是过滤噪音,不等于策略实盘必盈,仍可能遇异常失效。 交易图本身也别忽略——权益曲线越直越省心。这些变量都能按品种调参,我实测下来它们和市面盈利策略重合度偏高,但偶尔有刺头例外,不常发生。
「高收益EA的欺诈信号与资金管理的坑」
看到年化收益高得离谱的EA,先别激动,这类系统涉嫌欺诈的概率偏高。仅凭说明里的年度利润数字,就能在筛选阶段砍掉绝大多数不靠谱策略。 相对安全的年化区间大致在10%–200%,但200%已属高风险,100%–150%每年更贴近可接受的实绩。市场上偶尔传有年化1000%的系统,作者真有这种算法,几乎不可能公开分享。 网格、马丁格尔、金字塔或摊平这类复杂资金管理的EA,很容易对历史做过度拟合。爆仓前它们可能连续盈利很久,伪装成圣杯。 辨别伪圣杯不用猜,直接拉其实盘账户监控看曲线和回撤,异常平滑或回撤突兀的都要警惕。外汇与贵金属杠杆高,这类策略一旦反转即是本金级风险。
从监控尖峰揪出爆仓前兆
在 MT5 信号区打开实盘监控页,多数信号会暴露隐藏的净值曲线与自定义度量。会看的人能省掉大量试错时间,这里只说两类最典型的危险与安全特征。 先看危险信号:表面利润线走得顺滑,但下方出现向下绿色尖峰就值得警惕。这种尖峰对应某项关键 alpha 自定义度量极低,不用细究数值,单一个尖峰就可能在一天内吞掉本金。它通常意味着资金管理失控或亏损单扛得太久,结局多是净值剧烈回撤。外汇与贵金属杠杆高,这类信号碰不得。 反例是一条‘不好看但干净’的曲线:余额不平直,却没有人为制造盈利幻觉的资金操作痕迹。其 alpha 与 beta 同步向上,绿蓝线黏合稳步爬升。年利润率不高,但用不超过 50% 回撤换来了 100–150% 的年利润——这是我花 20 分钟在信号市场里翻到的真实产品。 用这种逆向筛法,能快速避开大多数包装过的假信号。好系统可能授权费不便宜,但实盘监控不会骗人,开 MT5 信号标签按净值尖峰排一遍就知道。