EA测试时如何在测试器中查看指标?含iCustom函数调用指标无法显示的问询
在MetaTrader策略测试器中查看指标的完整方案
针对你提出的两个问题,我来一步步给你拆解解决:
一、如何在测试器中查看常规指标
策略测试器的可视化模式是查看指标的核心入口,操作步骤很直观:
- 打开策略测试器(快捷键F6),配置好EA、测试品种、时间周期和测试范围后,点击顶部的**"可视化"**按钮开启图表模式
- 进入可视化窗口后,你可以通过两种方式添加指标:
- 点击顶部工具栏的**"指标"**图标,在弹出的列表里选择内置指标或已导入的自定义指标,设置好参数后确认即可
- 右键点击测试图表区域,选择**"指标列表"**,同样可以添加和管理指标
添加完成后,指标就会实时显示在测试图表上,和实盘图表的显示逻辑完全一致。
二、查看EA中通过iCustom调用的自定义指标
默认情况下,EA用iCustom调用的指标只是在后台计算数值,不会自动在测试器图表上绘制,但完全可以实现可视化,有两种常用方法:
方法1:手动加载对应自定义指标
这是最简单的方式,只需要确保两个关键点:
- 你在
iCustom里调用的自定义指标文件(.mq4/.mq5)已经正确导入到MT4/MT5的MQL4/Indicators(或MQL5/Indicators)文件夹中 - 开启可视化测试后,手动加载这个指标到测试图表上,并且参数设置和EA里
iCustom的参数完全一致
这样测试图表上显示的指标走势,就和EA内部调用计算的结果完全同步了,能直观看到EA是基于哪些指标信号进行交易的。
方法2:修改EA代码,让EA主动绘制指标数据
如果不想每次手动加载,也可以在EA里加入绘制逻辑,让测试模式下自动把iCustom计算出的数值画在图表上。举个MQL4的简单示例(MQL5逻辑类似):
void OnTick() { // 假设我们调用名为"MyCustomIndicator"的指标,取第0号缓冲区的当前值 double customVal = iCustom(_Symbol, _Period, "MyCustomIndicator", 14, true, 0, 0); // 仅在测试模式下绘制 if(IsTesting()) { // 创建一个临时水平线来标记当前指标值 string objName = "CustomIndicator_Line_" + IntegerToString(Time[0]); if(ObjectCreate(0, objName, OBJ_HLINE, 0, Time[0], customVal)) { ObjectSetInteger(0, objName, OBJPROP_COLOR, clrRoyalBlue); ObjectSetInteger(0, objName, OBJPROP_WIDTH, 2); // 设置对象有效期,避免图表上堆积太多线条 ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false); } } }
这种方法需要你清楚自定义指标的缓冲区结构(比如要取第几个缓冲区的数据),同时要注意对象的命名和清理,避免重复创建导致报错。
额外注意事项
- 不管用哪种方法,参数一致性是关键:如果测试图表上的指标参数和EA里
iCustom的参数不一样,显示的结果就会和EA实际计算的不符,会误导你的测试分析 - 可视化测试时建议把测试速度调慢,方便你同步观察指标信号和EA的交易动作
内容的提问来源于stack exchange,提问作者Aftershock
相关产品推荐
相关产品推荐

