首页 / 交易学院 / 小布知识库 / MetaTrader 5 策略测试原理:三种回测模式详解
MetaTrader 5 策略测试原理:三种回测模式详解
🧪

MetaTrader 5 策略测试原理:三种回测模式详解

回测与测试 难度 · 入门 2013 10 分钟阅读
策略测试回测模式MqlRates

一、为什么需要策略测试

自动化交易的初衷是机器人 7×24 不知疲倦地工作。但上线前必须确认两件事:EA 确实按规则执行了交易操作;它在历史上被证明可以盈利。Strategy Tester 就是回答这两个问题的工具。

二、三种价格生成模式

EA 在每次价格变动(NewTick)事件下运行。策略测试器用三种模式生成价格序列来驱动回测,细节程度递减。

三、MqlRates 与历史

回测与指标都围绕 MqlRates 结构展开——它封装了每根柱的时间、开高低收与成交量。用 CopyRates 把历史拉进数组。

struct MqlRates
{
   datetime time;     // 柱开盘时间
   double   open;
   double   high;
   double   low;
   double   close;
   long     tick_volume;
};

MqlRates rates[];
CopyRates(_Symbol, PERIOD_M15, 0, 100, rates);

四、OnTester 与优化

在 EA 中重写 OnTester 返回自定义适应度,供优化器(含遗传/前向优化)排序候选参数。常用 STAT_PROFIT 或风险调整指标。

double OnTester(void)
{
   // 自定义适应度,用于遗传/前向优化
   return TesterStatistics(STAT_PROFIT);
}

五、模式差异与陷阱

⚠ 别被快模式骗了
Open prices only 会高估突破类策略(忽略分钟内回撤);Every tick 才反映滑点与点差真实影响。参数优化用快模式提速,最终验收务必用 Every tick。

六、tick 模拟模型怎么选

MT5 测试器有三种建模精度:每 tick(用真实 tick 或插值逐 tick 模拟,最准最慢)、控制点(每根 K 线几个关键价)、仅开盘价(最快最糙)。精度越高结果越可信,但耗时爆炸。

实务:初步筛选用控制点快速跑,最终验证用每 tick。只开盘价模型会漏掉日内波动导致的止损触发,过度乐观,不适合验证止损逻辑。

七、过拟合与样本外

回测再漂亮也可能是过拟合。纪律是:优化用一段、验证用另一段(样本外),再 Walk-Forward 滚动验证参数可迁移。样本内漂亮、样本外崩,就是典型过拟合,这组参数不能上实盘。

// 伪代码:样本外验证
params = Optimize(HistoryA);          // 在 A 段优化
scoreB = Test(params, HistoryB);     // 在没参与的 B 段验证
if(scoreB < threshold) Reject(params);
✦ 用两段历史
一段优化、另一段验证,是最低成本的过拟合检测。只盯样本内,等于自欺。

八、代理与云优化

本地多核不够时可用代理(同机多终端)或 MQL5 云网络(众包算力)加速搜索。云网络只是更快搜索参数空间,不改变策略质量——烂策略再快优化也是烂。

用云前先本地跑通逻辑、定好评分函数,再上云做大规模搜索,既省钱又避免被云网络的「速度」迷惑而忽略策略本身。

九、可信回测的检查清单

一份可信回测至少过这几关:用每 tick 或控制点建模(非仅开盘)、含点差与手续费、样本外验证通过、无未来函数、手数按资金管理而非写死、止损真实挂上。任何一关漏了,曲线都是假的。

还有常被忽略的:成交模型要选「市价成交带滑点」而非理想成交,否则高估胜率;数据要有足够多的趋势与震荡样本,单看一段会高估策略。

把这些写成上线前检查项逐条勾选,比事后发现曲线诡异再查省十倍时间,也是专业与业余的分界。

十、回测即科学实验

把每次回测当科学实验:提出假设(如「均线金叉在趋势市盈利」)、用历史数据检验、记录是否推翻。这种心态能让你客观看待结果,而不是只挑好看的曲线证明自己对了。

实验文化还意味着「允许策略被否定」:一段回测推翻假设,是省了真金白银,而非失败。越能坦然否定自己策略的人,越能在市场活久,因为市场专杀不肯认错的人。

跑完测试别只盯着最终盈利数字,打开净值曲线看回撤段发生在哪、是不是单笔极端黑天鹅拉垮整体。代理模式与真实 tick 的结论若有冲突,一律以真实 tick 为准,因为它才反映真实滑点与点差。把测试报告连同参数存档,下次调参才有可比基线。

十一、小结

✦ 渐进验证
先用 Open prices only 快速筛参数,再用 1 Min OHLC 收窄,最后用 Every tick + 真实点差复测,才逐步接近实盘表现。

常见问题

正常。Open prices only 忽略日内波动,突破策略常被美化;Every tick 最贴近实盘。
返回自定义适应度值,供优化器排序;常用 STAT_PROFIT 或夏普类指标。
不等。还需考虑过拟合、未来函数、点差滑点与样本外检验。