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

MT4显示日线/周线开盘价直线的代码无显示问题求助

MT4指标无显示问题的修复方案

你的代码存在几个关键问题导致图表无内容显示,以下是问题分析和修复方案:

核心问题拆解

  • 入口函数错误:MT4指标的初始化逻辑要放在OnInit()中,OnStart()是脚本(Script)的执行入口,指标加载时不会触发这个函数。
  • 对象存在性未校验:如果同名水平线对象已存在,ObjectCreate()会执行失败,导致线条无法生成。
  • 缺乏错误排查机制:没有验证函数调用的返回值,无法定位创建失败的具体原因。

修复后的完整代码

#property indicator_chart_window

int OnInit()
{
    // 先删除已存在的同名对象,避免创建冲突
    if(ObjectFind(0, "weekly_open") != -1) ObjectDelete(0, "weekly_open");
    if(ObjectFind(0, "daily_open") != -1) ObjectDelete(0, "daily_open");

    // 获取周线、日线的当前周期开盘价
    double weekly_open = iOpen(NULL, PERIOD_W1, 0);
    double daily_open = iOpen(NULL, PERIOD_D1, 0);

    // 创建周线开盘价水平线
    if(!ObjectCreate(0, "weekly_open", OBJ_HLINE, 0, 0, weekly_open))
    {
        Print("周线开盘线创建失败,错误码:", GetLastError());
        return(INIT_FAILED);
    }
    ObjectSetInteger(0, "weekly_open", OBJPROP_COLOR, Blue);
    ObjectSetInteger(0, "weekly_open", OBJPROP_WIDTH, 2); // 可选:加粗线条便于观察

    // 创建日线开盘价水平线
    if(!ObjectCreate(0, "daily_open", OBJ_HLINE, 0, 0, daily_open))
    {
        Print("日线开盘线创建失败,错误码:", GetLastError());
        return(INIT_FAILED);
    }
    ObjectSetInteger(0, "daily_open", OBJPROP_COLOR, Red);
    ObjectSetInteger(0, "daily_open", OBJPROP_WIDTH, 2); // 可选:加粗线条便于观察

    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
    // 指标卸载时自动清理对象,避免图表残留无效元素
    ObjectDelete(0, "weekly_open");
    ObjectDelete(0, "daily_open");
}

补充说明

  • 用ObjectSetInteger()替代旧版ObjectSet(),MT4新版本推荐使用类型安全的函数。
  • 新增OnDeinit()函数,在指标卸载时自动删除创建的对象,保持图表整洁。
  • 添加错误打印逻辑,方便排查创建失败的具体原因(如权限限制、对象名重复等)。

内容的提问来源于stack exchange,提问作者Can Cankaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:37:25