You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQL5中ChartHeightInPixelsSet函数失效问题求助

MT5中ChartHeightInPixelsSet函数失效的排查与解决

核心问题定位

你代码里的关键错误是传入了错误的sub_window参数:CHART_HEIGHT_IN_PIXELS是控制整个图表窗口的高度属性,仅适用于主窗口(sub_window=0),副窗口没有这个可设置属性。你调用ChartHeightInPixelsSet(500, 0, 1)时指定了副窗口(sub_window=1),这直接导致设置失败。

排查步骤与解决方案

  1. 查看错误码定位问题
    你的代码已经包含错误打印逻辑,打开MT5的「专家日志」(Experts Journal),查看ChartHeightInPixelsSet输出的错误码:

    • 错误码4202:参数无效(对应副窗口不支持该属性)
    • 错误码4051:EA无修改图表权限
  2. 修正函数调用与实现
    调整调用时的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;
    }
    
  3. 确保EA具备修改权限

    • 在MT5终端中,右键EA→「属性」→「常见」,勾选「允许修改图表设置」
    • 进入「工具」→「选项」→「EA交易」,确认「允许自动交易」和「允许修改图表」已启用
  4. 避免策略测试器环境限制
    若在策略测试器中运行,测试器的图表环境独立于主终端,需在测试器设置中开启「允许修改图表」选项。

如何确认MT5函数的可用性

  • MetaEditor内置文档:选中函数名按F1,查看文档中的「适用范围」(如是否允许EA调用、是否有版本限制)
  • 最小化测试用例:跳过封装函数,直接在OnStart中调用原生ChartSetInteger测试,排除封装逻辑问题
  • 版本兼容性检查:查看MT5更新日志,确认目标函数在当前版本(2025)中无已知bug
  • 权限校验:通过GetLastError()返回的错误码,判断是否因权限或参数问题导致函数失效,而非函数本身不可用

内容的提问来源于stack exchange,提问作者jjo mmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:57:20