为什么MT5终端中的指标(线、箭头、柱状图)会闪烁? - 页 2

 

试着在OnCalculate的最开始打印prev_calculated。

并与一些标准指标进行比较--是否闪动。

 
Andrey Khatimlianskii: 试着在OnCalculate的最开始打印prev_calculated。并将其与一些标准指标进行比较--是否在闪烁。
OnCalculate()函数 中增加了两个静态变量,用于比较当前值和先前值。

static int last_rates_total=0; // previous value "input timeseries size at previous
static int last_prev_calculated=0; // previous value "bar processed at previous call.

和验证码,并输出到期刊

//+------------------------------------------------------------------+
//| Custom indicator iteration function
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
...

{
   int N=rates_total-prev_calculated; if (N>MAX_PERIOD) N-=MAX_PERIOD;

   static int last_rates_total=0;     // размер входных таймсерий 
   static int last_prev_calculated=0; // обработано баров на предыдущем вызове 
   if (rates_total!=last_rates_total || prev_calculated!=last_prev_calculated) {
      Print("N=", N,  ", rates_total=", rates_total, ", prev_calculated=", prev_calculated);
      last_rates_total=rates_total; last_prev_calculated=prev_calculated;
   }

   for (int i=N; i>0 && !IsStopped(); i--) {
...
   }
   aUP[0]=EMPTY_VALUE; aDN[0]=EMPTY_VALUE;
   return(rates_total);
}

在一分钟内启动AOM指标,得到了这个报告

FH      0       12:38:02.271    AOM (Si-6.17,M1)        N=41934, rates_total=41969, prev_calculated=0
FN      0       12:38:02.275    AOM (Si-6.17,M1)        N=0, rates_total=41969, prev_calculated=41969
DE      0       12:38:51.845    AOM (Si-6.17,M1)        N=1, rates_total=41970, prev_calculated=41969
GH      0       12:38:51.845    AOM (Si-6.17,M1)        N=0, rates_total=41970, prev_calculated=41970
PO      0       12:39:51.207    AOM (Si-6.17,M1)        N=1, rates_total=41971, prev_calculated=41970
EE      0       12:39:51.215    AOM (Si-6.17,M1)        N=0, rates_total=41971, prev_calculated=41971
MH      0       12:40:52.423    AOM (Si-6.17,M1)        N=1, rates_total=41972, prev_calculated=41971
IO      0       12:40:52.700    AOM (Si-6.17,M1)        N=0, rates_total=41972, prev_calculated=41972
CR      0       12:41:51.214    AOM (Si-6.17,M1)        N=1, rates_total=41973, prev_calculated=41972
OH      0       12:41:51.214    AOM (Si-6.17,M1)        N=0, rates_total=41973, prev_calculated=41973
RO      0       12:42:51.207    AOM (Si-6.17,M1)        N=1, rates_total=41974, prev_calculated=41973
HR      0       12:42:51.207    AOM (Si-6.17,M1)        N=0, rates_total=41974, prev_calculated=41974
NI      0       12:43:51.439    AOM (Si-6.17,M1)        N=1, rates_total=41975, prev_calculated=41974
RO      0       12:43:51.446    AOM (Si-6.17,M1)        N=0, rates_total=41975, prev_calculated=41975
RR      0       12:44:51.373    AOM (Si-6.17,M1)        N=1, rates_total=41976, prev_calculated=41975
DI      0       12:44:51.373    AOM (Si-6.17,M1)        N=0, rates_total=41976, prev_calculated=41976
ML      0       12:45:51.449    AOM (Si-6.17,M1)        N=1, rates_total=41977, prev_calculated=41976
GR      0       12:45:51.902    AOM (Si-6.17,M1)        N=0, rates_total=41977, prev_calculated=41977
II      0       12:46:51.541    AOM (Si-6.17,M1)        N=1, rates_total=41978, prev_calculated=41977
GL      0       12:46:51.541    AOM (Si-6.17,M1)        N=0, rates_total=41978, prev_calculated=41978
PS      0       12:47:51.286    AOM (Si-6.17,M1)        N=1, rates_total=41979, prev_calculated=41978
PI      0       12:47:51.303    AOM (Si-6.17,M1)        N=0, rates_total=41979, prev_calculated=41979
QL      0       12:48:51.395    AOM (Si-6.17,M1)        N=1, rates_total=41980, prev_calculated=41979
IS      0       12:48:51.408    AOM (Si-6.17,M1)        N=0, rates_total=41980, prev_calculated=41980
DF      0       12:49:51.790    AOM (Si-6.17,M1)        N=1, rates_total=41981, prev_calculated=41980
PL      0       12:49:51.790    AOM (Si-6.17,M1)        N=0, rates_total=41981, prev_calculated=41981

没有什么意外,只对新进来的酒吧进行正常处理。



 
Eugene Myzrov:
OnCalculate()函数 中增加了两个静态变量,用于比较当前值和先前值。

没有什么意外,有一个正常的处理过程,只有新的棒子进来了。

标准交付中的指标是否在闪烁?
 
Andrey Khatimlianskii: 标准交货的指标是否在闪烁?

不,我在图表上放了几个标准指标 "移动平均线"、"令人敬畏的振荡器"。观察到的。没有,没有发现"数据窗口"中的数值闪烁或消失的情况。

 
Eugene Myzrov:

不,我在图表上放了几个标准指标 "移动平均线"、"令人敬畏的振荡器"。观察到的。不,我没有注意到"数据窗口"中的数值有任何闪动或消失。

我是指那些在源头(mq5)的指标。

如果它们不闪烁,那么问题显然在你的代码中。简化它,直到它不再闪烁。反之亦然--将标准代码细化到你的状态,直到它闪烁起来。

 
这是一个MT5的功能,我认为。
 
Stanislav Korotky: 这是一个MT5的功能,我认为。

所以你必须接受它,认为它是理所当然的,不再寻找原因?


 
Andrey Khatimlianskii: 我是指那些在源代码(mq5)中的指标。如果它们不闪烁,那么问题显然在你的代码中。简化它,直到它停止闪烁。反之亦然--将标准代码细化到你的状态,直到它闪烁起来。
但我已经把代码简化到了闪烁的地步。好吧,我试着走相反的路。


顺便说一句,我还没有为OnCalculate() 函数找到一个通用的 "包装器",甚至在标准指标中也没有找到,以便一劳永逸地使用它。
也许,你知道有些指标有这样的 "包装",可以把它作为一个参考。

 
Eugene Myzrov:

所以你必须接受它,认为它是理所当然的,并停止寻找原因?

写信给服务台。
 
Eugene Myzrov:
但我已经把代码简化到了极致。好吧,我试着用其他方式。

这可能是关于任何小事。


尤金-米兹罗夫

顺便说一句,我还没有为OnCalculate()函数找到一个通用的 "包装器",即使在标准指标中也是如此,以便一劳永逸地使用它。
也许,你可以建议一个有这样一个 "包装器 "的指标,将其作为参考?

我已经看到了几个变种。你可以搜索和选择。
我自己就用这个。

        //---
        if ( rates_total < MinBars ) return(0);

        //--- last counted bar will be recounted
        int limit=rates_total-prev_calculated-1;
        if(prev_calculated>0) limit++;

        //---
        for( int i=limit; i>=0; i--)
        {
           IndBuffer[i] = Add your code here
        }

        //---
        return(rates_total);