実は、TFを変更すると線を引く インジケータが、まだ履歴を読み込んでいない状態で、データを計算し、チャートにバーを追加して、またデータを計算すると、それぞれ、前のものも抜けてしまうという問題があります。
つまり、インジケーターのロジックに間違いがあるのです。履歴を読み込む際、インジケーターの理想的なオプション:履歴に変化がない最後のバーの時点で状態を計算し、履歴の更新部分でデータを再計算します。
実際には、あるバーでのインジケータの環境を戻すには、ヒストリーの最初から計算を行うことになるため、このオプションは常に可能というわけではありません。したがって、インジケータの複雑なアルゴリズムでは、1本でもバーを読み込むと履歴の完全な再計算が行われます(新しいバーのオープンと混同しないでください)。
OnCalculate()のインジケータがチェックする必要があります。
ありがとうございます。
ただ、アラートでストーリーが塊で読み込まれていることがわかったので、戸惑いました。
はい、その通りです。
つまり、インジケーターのロジックに間違いがあるのです。履歴を読み込む際、インジケーターの理想的なオプション:履歴に変化がない最後のバーの時点で状態を計算し、履歴の更新部分でデータを再計算します。
実際には、あるバーでのインジケータの環境を戻すと、ヒストリーの最初から計算を行うことになるため、このオプションは常に可能というわけではありません。したがって、インジケータの高度なアルゴリズムでは、1本でもバーを読み込むと履歴の完全な再計算が実行されます(新しいバーのオープンと混同しないでください)。
では、唯一実行可能な解決策は、唯一?
for(int i=rates_total-prev_calculated;i>=0;i--)
では、唯一有効な解決策は?
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つだけです。
インジケーターの書き方を学ぶ時間
トリックが欲しい?アラートは何を返してきたと思う?
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); }
トリックが欲しいのか?アラートは何を返してきたと思う?
インジケーターでアラートを使わない。履歴のダウンロードがあった場合、完全な再計算を行うことを規定する。コントロールしやすいんです。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索