MQL5中ChartHeightInPixelsSet函数失效问题求助
MT5中ChartHeightInPixelsSet函数失效的排查与解决
核心问题定位
你代码里的关键错误是传入了错误的sub_window参数:CHART_HEIGHT_IN_PIXELS是控制整个图表窗口的高度属性,仅适用于主窗口(sub_window=0),副窗口没有这个可设置属性。你调用ChartHeightInPixelsSet(500, 0, 1)时指定了副窗口(sub_window=1),这直接导致设置失败。
排查步骤与解决方案
查看错误码定位问题
你的代码已经包含错误打印逻辑,打开MT5的「专家日志」(Experts Journal),查看ChartHeightInPixelsSet输出的错误码:- 错误码
4202:参数无效(对应副窗口不支持该属性) - 错误码
4051:EA无修改图表权限
- 错误码
修正函数调用与实现
调整调用时的sub_window参数为0,同时在函数内增加参数校验,避免无效调用:void OnStart() { // 先激活目标图表(确保操作对象处于可修改状态) ChartSetInteger(0, CHART_ACTIVATE, true); // 调用时仅传入高度值,使用默认的主窗口参数 if(!ChartHeightInPixelsSet(500)) { Print("图表高度设置失败"); } } bool ChartHeightInPixelsSet(const int value, const long chart_ID=0, const int sub_window=0) { ResetLastError(); // 校验:仅主窗口支持设置整体高度 if(sub_window != 0) { Print(__FUNCTION__ + ", 错误:副窗口无法设置整体图表高度"); return false; } // 调用原生函数设置高度 if(!ChartSetInteger(chart_ID, CHART_HEIGHT_IN_PIXELS, sub_window, value)) { Print(__FUNCTION__ + ", Error Code = ", GetLastError()); return false; } return true; }确保EA具备修改权限
- 在MT5终端中,右键EA→「属性」→「常见」,勾选「允许修改图表设置」
- 进入「工具」→「选项」→「EA交易」,确认「允许自动交易」和「允许修改图表」已启用
避免策略测试器环境限制
若在策略测试器中运行,测试器的图表环境独立于主终端,需在测试器设置中开启「允许修改图表」选项。
如何确认MT5函数的可用性
- MetaEditor内置文档:选中函数名按
F1,查看文档中的「适用范围」(如是否允许EA调用、是否有版本限制) - 最小化测试用例:跳过封装函数,直接在
OnStart中调用原生ChartSetInteger测试,排除封装逻辑问题 - 版本兼容性检查:查看MT5更新日志,确认目标函数在当前版本(2025)中无已知bug
- 权限校验:通过
GetLastError()返回的错误码,判断是否因权限或参数问题导致函数失效,而非函数本身不可用
内容的提问来源于stack exchange,提问作者jjo mmax
相关产品推荐
相关产品推荐

