🧪
MetaTrader 5 策略测试原理:三种回测模式详解
策略测试回测模式MqlRates
为什么需要策略测试
自动化交易的初衷是机器人 7×24 不知疲倦地工作。但上线前必须确认两件事:EA 确实按规则执行了交易操作;它在历史上被证明可以盈利。Strategy Tester 就是回答这两个问题的工具。
三种价格生成模式
EA 在每次价格变动(NewTick)事件下运行。策略测试器用三种模式生成价格序列来驱动回测,细节程度递减。
- Every tick(每一价格变动):最详细,模拟真实逐笔跳动,含点差与滑点影响。
- 1 Minute OHLC(一分钟 OHLC):每分钟只用一根柱的 OHLC 四个价,忽略分钟内细节。
- Open prices only(仅开盘价):最粗,只在每根柱开盘时计算,最快但最易美化突破类策略。
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。
小结
✦ 渐进验证
先用 Open prices only 快速筛参数,再用 1 Min OHLC 收窄,最后用 Every tick + 真实点差复测,才逐步接近实盘表现。
常见问题
正常。Open prices only 忽略日内波动,突破策略常被美化;Every tick 最贴近实盘。
返回自定义适应度值,供优化器排序;常用 STAT_PROFIT 或夏普类指标。
不等。还需考虑过拟合、未来函数、点差滑点与样本外检验。