MT5ターミナルでインジケーター(ライン、矢印、ヒストグラム)が点滅するのはなぜですか? - ページ 2

 

OnCalculateの一番最初にprev_calculatedを出力してみてください。

そして、点滅しているかどうかという、何らかの標準的な指標で比較する。

 
Andrey Khatimlianskii: OnCalculateの一番最初にprev_calculatedを出力してみてください。そして、何らかの標準的な指標と比較し、点滅しているかどうかを確認します。
OnCalculate()関数に 2つのスタティック変数を追加し、現在の値と以前の値を比較できるようにした。

static int last_rates_total=0; // 前回値「前回時の入力時系列サイズ
static int last_prev_calculated=0; // 前の呼び出しで処理されたバー値

と検証コードをジャーナルに出力

//+------------------------------------------------------------------+
//| 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()関数に 2つのスタティック変数を追加し、現在の値と以前の値を比較できるようにした。

何も予想外のことはなく、新しいバーだけが入ってくるという通常の処理が行われているのです。

標準納品時の指標が点滅していないか?
 
Andrey Khatimlianskii: 標準添付のインジケーターは点滅していますか?

いいえ、標準的な指標である「移動平均」「Awesome Oscillator」をチャートに表示させています。観察された。データウィンドウ」の値がちらついたり、消えたりすることはありませんでした。

 
Eugene Myzrov:

いいえ、標準的な指標である「移動平均」「Awesome Oscillator」をチャートに表示させています。観察された。いいえ、「データウィンドウ」の数値がちらついたり消えたりすることはありませんでした。

ソース(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);