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

MT4 EA离线图表收盘价更新异常:定时脚本仅首次读取到Close值

问题原因
  • MT4的离线图表默认不会自动刷新Close[]、Open[]这类系统内置价格序列数组,仅在线实时图表会根据服务器推送的数据自动更新序列缓存
  • 现有代码每次OnTimer触发时直接读取的Close[0]是离线图表首次加载时的缓存值,没有主动刷新操作的话会一直返回旧数据,所以不会更新
修复方案

核心是在每次读取价格序列前,主动调用RefreshRates()方法强制刷新当前图表的最新序列数据

修正后完整可运行代码如下:

int OnInit()
{
   // 初始化时创建1秒定时器,创建失败直接返回错误
   if(!EventSetTimer(1))
   {
      Comment("定时器创建失败,请重新挂载脚本");
      return INIT_FAILED;
   }
   return INIT_SUCCEEDED;
}

void OnTimer()
{
   // 离线图表必须加这行,强制刷新当前图表的价格序列数据
   RefreshRates();
   
   int m=TimeSeconds(TimeLocal());
   double CloseValue = Close[0];
   string CloseValueString = DoubleToString(CloseValue,5);

   Comment(
   "当前收盘价 :",CloseValueString,"\n",
   "当前秒数 :",m
   );
}

void OnDeinit(const int reason)
{
   // 脚本卸载时销毁定时器,避免资源占用
   EventKillTimer();
}
注意事项
  • 如果你是通过第三方逻辑更新离线图表的K线数据,需要先确保K线更新逻辑正常运行,RefreshRates()仅会读取当前图表已经加载的最新K线数据
  • 修正后重新将脚本挂载到离线图表,即可实现每秒刷新收盘价的效果

内容的提问来源于stack exchange,提问作者YUSUF KIPROP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:03