自定义指标跨周期不随K线更新,求教!

 

在实现4小时图中显示日线图的布林功能中,该跨周期指标不随K线变化而更新,求解,哪里出了错。

以下为跨周期指标代码:

      
    datetime duotime[];
      ArrayCopySeries(duotime,MODE_TIME,NULL,PERIOD_D1);  
      int y =0;    
      for(int i=0; i<rates_total - prev_calculated && !IsStopped(); i++)
      {    
         if(Time[i] < duotime[y])
         {
            y++;
         } 
         UpperBuffer[i]=iBands(NULL,PERIOD_D1,20,2,0,PRICE_CLOSE,MODE_UPPER,y);
         MiderBuffer[i]=iBands(NULL,PERIOD_D1,20,2,0,PRICE_CLOSE,MODE_MAIN,y);
         LowerBuffer[i]=iBands(NULL,PERIOD_D1,20,2,0,PRICE_CLOSE,MODE_LOWER,y);
         if(MiderBuffer[i]!=0)       
            WidthBuffer[i]=(UpperBuffer[i]-LowerBuffer[i])*100/MiderBuffer[i];
         else
            WidthBuffer[i]=0;
      } 

 

你这个不仅夸周期无法更新,就是当前周期的0号K线,你的写法也无法更新

这里rates_total - prev_calculated = 0 时,0号K线没有得到更新
for(int i=0; i<rates_total - prev_calculated && !IsStopped(); i++)

 

跨周期的指标,比较麻烦。思路如下:

短周期h4(当前图表周期),长周期d1。

1)定时更新

正常情况,可以使用定时器,或者比较当前时间与上次更新时间的差值,是否超过了设定的阀值。

需要更新时,发出计算信号,或者调用计算函数。

2)计算指标的值

读取指定周期(长周期d1)的价格数据。

这里可能会出现数据不在本地,需要从服务器下载的情况。由于数据下载需要时间,因此遇到这种情况时,我的处理是直接返回程序错误(异常情况)。下一个行情数据到来时,mt5会启动指标、ea等,这时让程序重新读取价格数据。若网络延时比较大,需要多读几次,方能成功。

通过价格数据,计算指标、ea等。

计算结果,若需要绘图,则调用绘图函数。

若无需绘图,则正常返回。

 
空了写个样本发到代码库,MT4的很简单,MT5的跨周期则比较麻烦,会存在不少问题,特别是周末要特殊处理。
 

供你参考,MT4跨周期布林线指标

https://www.mql5.com/zh/code/29692

跨周期布林线指标
跨周期布林线指标
  • www.mql5.com
AutoMatchTF  = true;  自动匹配大周期的时间框架,如果是true,则不用设置下面的TimeFrame TimeFrame    = PERIOD_CURRENT;  如果上面是false,则需要手动设置大周期的TimeFrame Periods          = 12;  布林线周期 Deviations     = 2.0; 偏差...
 
Ziheng Zhuang:

供你参考,MT4跨周期布林线指标

https://www.mql5.com/zh/code/29692 

感谢!