🎯
创建 EA 交易优化的自定义标准:OnTester 与 TCustomCriterion
优化标准OnTester遗传算法回测MQL5
策略测试程序的优化标准
优化标准是某种因数,其值决定参数集质量——值越高,测试结果越好。内置标准有余额、权益、夏普等;但开发人员可创建自己的标准,给测试优化近乎无限的可能。
自定义标准只能用于遗传模式
重要注意:自定义优化标准只在遗传算法模式下生效。穷举所有参数组合时并不调用它——因为穷举本就遍历全部,无需排序指标。
OnTester:返回你的目标值
在 EA 的 OnTester() 里计算自定义指标并返回 double。测试引擎用它给该参数集打分。TCustomCriterion 是基类,GetCriterionLevel 返回分层级别,GetCriterion 返回具体数值。
double OnTester()
{
TCustomCriterion *c = new TSimpleDivCriterion();
return c.GetCriterion(); // 如 收益/回撤
}
class TSimpleCriterion : public TCustomCriterion
{
double GetCriterion() { return TesterStatistics(STAT_PROFIT); }
};
class TSimpleDivCriterion : public TCustomCriterion
{
double GetCriterion() { return profit / MathMax(drawdown,1); }
};
从简单到复合标准
TSimpleCriterion 直接返回某统计量;TSimpleDivCriterion 做比率(收益/回撤);TSimpleMinCriterion 取最小值约束。可组合多个子标准做加权,逼出“高收益且低回撤”的参数。
- 单目标:收益/回撤(Calmar 风格)。
- 多目标:夏普×0.6 + 胜率×0.4 加权。
- 约束型:回撤超阈值直接返回极小值淘汰。
⚠ 防过拟合要看分布
自定义标准再花哨,优化出的参数仍可能过拟合。务必用样本外/前视测试验证,别只信历史最优。
小结
OnTester + TCustomCriterion 让你把“什么是好策略”写进优化器:收益/回撤、夏普、calmar 随你定义。它是把主观风控偏好变成自动筛选的关键一环。
常见问题
不能。它只在遗传算法模式下生效——穷举本就遍历全部参数,无需排序指标。
返回 double 类型的自定义目标值(如收益/回撤),测试引擎用它给该参数集打分排序。
会,任何优化都可能过拟合。必须用样本外/前视测试验证,别只信历史最优参数。