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
相关产品推荐
相关产品推荐

