TFを変更するのは問題

 
実は問題は、履歴がまだ読み込まれていないTFを変更したときに線を引く インジケータが、その後チャートにバーが追加され、再度それぞれデータを計算すると、前のものも抜けてしまう+スキップしてしまうことなのです。
 
Vasyl Nosal:
実は、TFを変更すると線を引く インジケータが、まだ履歴を読み込んでいない状態で、データを計算し、チャートにバーを追加して、またデータを計算すると、それぞれ、前のものも抜けてしまうという問題があります。

つまり、インジケーターのロジックに間違いがあるのです。履歴を読み込む際、インジケーターの理想的なオプション:履歴に変化がない最後のバーの時点で状態を計算し、履歴の更新部分でデータを再計算します。

実際には、あるバーでのインジケータの環境を戻すには、ヒストリーの最初から計算を行うことになるため、このオプションは常に可能というわけではありません。したがって、インジケータの複雑なアルゴリズムでは、1本でもバーを読み込むと履歴の完全な再計算が行われます(新しいバーのオープンと混同しないでください)。

 
Vasyl Nosal:
実は、TFの変化で線を引く インジケータは、まだ履歴が読み込まれていない状態で、データを計算し、その後、チャートにバーが追加され、またそれぞれデータを計算すると、前のものも残ってしまう+スキップされる、という問題があります。

インジケータのOnCalculate()でチェックする必要があります。

if(prev_calculated==0)  // значит история изменилась или это первый проход
 
Karputov Vladimir:

OnCalculate()のインジケータがチェックする必要があります。

ありがとうございます。

ただ、アラートでストーリーが塊で読み込まれていることがわかったので、戸惑いました。

はい、その通りです。

 
Ihor Herasko:

つまり、インジケーターのロジックに間違いがあるのです。履歴を読み込む際、インジケーターの理想的なオプション:履歴に変化がない最後のバーの時点で状態を計算し、履歴の更新部分でデータを再計算します。

実際には、あるバーでのインジケータの環境を戻すと、ヒストリーの最初から計算を行うことになるため、このオプションは常に可能というわけではありません。したがって、インジケータの高度なアルゴリズムでは、1本でもバーを読み込むと履歴の完全な再計算が実行されます(新しいバーのオープンと混同しないでください)。

では、唯一実行可能な解決策は、唯一?

for(int i=rates_total-prev_calculated;i>=0;i--)

 
Vasyl Nosal:

では、唯一有効な解決策は?

for(int i=rates_total-prev_calculated;i>=0;i--)

また、現在のバーだけでなく、その後(例えば4)の再計算が必要な場合は?

for(int i=rates_total-prev_calculated+4;i>=0;i--) 

{ 

if(i>Bars) i=Bars; 
 

うん、うまくいったね。

バーがチャンクで読み込まれた場合、チャンクで再計算されます。

正しいチャンクは、さらに左のハハにロードされる最後の1つだけです。

 
Vasyl Nosal:

うん、うまくいったね。

バーがチャンクで読み込まれた場合、チャンクで再計算されます。

正しいチャンクは、さらに左のハハにロードされる最後の1つだけです。

インジケーターの書き方を学ぶ時間。
 
Victor Nikolaev:
そろそろインジケーターの書き方を覚えよう

教えてください。

そして、開発者はインジケーターの 最初の計算で 調整すべきだと言います。

 
Victor Nikolaev:
インジケーターの書き方を学ぶ時間

トリックが欲しい?アラートは何を返してきたと思う?

int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],
                const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
  if(prev_calculated!=0) Alert(prev_calculated," M:",Period());
return(rates_total);
  }

 
Vasyl Nosal:

トリックが欲しいのか?アラートは何を返してきたと思う?

インジケーターでアラートを使わない。履歴のダウンロードがあった場合、完全な再計算を行うことを規定する。コントロールしやすいんです。

理由: