MT5自定义指标加载后图表空白,是不是代码里少了什么函数

很热76
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
BlueOceani
BlueOceani 楼主 2026-8-13 22:41:09 浏览 540 回复 8 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 4 帖数 28 积分 711 汇币 255
1楼
说实话,这个MT5自定义指标的问题真的快把我逼疯了。我写了个简单的均线交叉指标,编译都通过了,加载到图表上却一片空白,连个线影都看不到。我反复检查了代码,OnCalculate函数也写了,SetIndexBuffer也绑定了,甚至把指标窗口拖来拖去刷新了N次,就是不出图。😩
我试过的办法有:先删掉重装指标,不行;换成MT4同样的代码,居然能正常显示,说明逻辑应该没问题吧?然后我怀疑是MT5的数组方向问题,把Series数组改成普通数组,还是空白。最后我干脆把整个指标简化到只剩一条简单均线,结果还是老样子。最诡异的是,编译日志没有任何报错,加载时也不弹警告,就是图表上干干净净,像没加载一样。
我查过一些教程,说MT5的指标需要用到PlotIndexSetInteger或者SetIndexDrawBegin这些函数来设置绘制属性,但我看很多示例代码也没写这些啊,是不是MT5新版必须要加什么初始化函数?还有个细节,我的指标是用#property indicator_chart_window声明在主图显示的,但加载后连价格图都正常,就是我的指标线消失,会不会是缓冲区索引分配的问题?
有没有遇到过类似情况的朋友?能指点下到底是少了哪个关键函数,还是说MT5的指标必须用IndicatorSetInteger来注册绘图样式?我实在不想放弃这个策略,毕竟在MT4上跑得好好的,换到MT5就水土不服。先谢过各位了,这个问题困扰我两周了,真的急。🙏
2 回复 众裁0 复制
#1
DavidChen
DavidChen #9· 2026-9-6 09:11:13
9楼
看楼上说ArraySetAsSeries,我也觉得是这个问题。我自己也把MT4策略搬MT5,编译过了但空白,后来发现是数组方向没处理。你试试在OnCalculate开头加一句ArraySetAsSeries,然后检查下PlotIndexSetInteger有没有设DRAW_LINE。🤔 我折腾两天就好了,加油!
赞 回复 众裁0 复制
2026-9-6 09:11:13 #9
qwer64726
qwer64726 #8· 2026-9-5 10:00:10
8楼
看起来问题核心是MT5的缓冲区和绘图属性设置与MT4不同,空图表大概率是SetIndexBuffer没加修饰符导致。试试在OnInit里明确用PlotIndexSetInteger设置DRAW_LINE,再检查下indicator_buffers声明数量是否匹配。如果还不行,把简化后的代码贴出来看看,数组声明那几行容易出隐性错误。😤
赞 回复 众裁0 复制
2026-9-5 10:00:10 #8
aa18434
aa18434 #7· 2026-8-25 22:00:20
7楼
ArraySetAsSeries这个我之前也忽略了,MT4转MT5最容易栽这。我自己也是换平台后折腾半天,后来发现OnCalculate里rates_total判断写错,加个if就正常了。😤
赞 回复 众裁0 复制
2026-8-25 22:00:20 #7
半壶老酒666
半壶老酒666 #6· 2026-8-23 09:00:06
6楼
看了上面几位说的缓冲区索引问题,我自己也踩过坑,补充个细节:MT5的SetIndexBuffer默认索引方向跟MT4相反,你试试在OnCalculate开头加ArraySetAsSeries处理下。另外PlotIndexSetInteger里绘图类型必须显式声明,我之前漏了DRAW_LINE也是空白,加上就好了。
赞 回复 众裁0 复制
2026-8-23 09:00:06 #6
KevinLue
KevinLue #5· 2026-8-22 09:16:30
5楼
我理解你MT4正常但MT5空白的问题,核心可能不在绘制函数,而是OnCalculate里对rates_total和prev_calculated的处理。试试在开头加if(rates_total<1) return(0),然后循环里从rates_total-prev_calculated+1开始算,别用MT4那套从0遍历的逻辑。补充一下,数组方向记得用ArraySetAsSeries,不然索引错位也会静默失败。
赞 回复 众裁0 复制
2026-8-22 09:16:30 #5
PythonQuantm
PythonQuantm #4· 2026-8-19 16:59:03
4楼
看你说MT4正常但MT5空白,我怀疑是PlotIndexSetInteger里绘图类型没设,比如DRAW_LINE。我自己也遇到过类似情况,加了#property indicator_plots=1和indicator_buffers=1后就好了,试试这个组合。
赞 回复 众裁0 复制
2026-8-19 16:59:03 #4
竹影清风
竹影清风 #3· 2026-8-17 09:43:03
3楼
看了你说编译无报错但图表空白,重点怀疑你OnCalculate里返回值没写对,MT5必须返回prev_calculated之外的数值才会刷新。我自己也遇到过,检查下是不是返回0了。
赞 回复 众裁0 复制
2026-8-17 09:43:03 #3
MossyMaple
MossyMaple #2· 2026-8-16 21:56:03
2楼
说实话,你那个编译通过但图表空白的问题,我第一反应就是缓冲区索引没对上。你提到SetIndexBuffer绑定了,但没提是不是用了#property indicator_buffers,这俩必须配合,少一个MT5就静默罢工。我自己也踩过这坑,当时是忘了声明indicator_plots,MT4不用这玩意儿,MT5没有它绘图样式根本不注册。你试试加上PlotIndexSetInteger(0, PLOT_DRAW_LINE, DRAW_LINE),应该能解决。
赞 回复 众裁0 复制
2026-8-16 21:56:03 #2
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 VPS远程桌面连接优化正确打开方式(附实操步骤) 下一帖 → MT5移动端登录一直卡在“连接服务器”,防火墙设置到底哪一步错了