intOnCalculate(...)
{
// индекс последнего посчитанного на прошлом вызове бара// с которого начинаем расчётint nStartBar = rates_total - MathMax(prev_calculated, 1);
for(int i = nStartBar; i >= 0; i--)
{
// рассчитываем индикатор на всех непосчитанных барах
}
}
思いついたことがあります。後で書きますね。
その発想は死んでいる。
HistoryUpdated()のような、すべての履歴が更新されたかどうかをチェックするシステムを作るよう、開発者に依頼します。
開発者は助けて くれないから。
すでに述べたように、rates_totalとprev_calculatedの差が1より大きい場合、historyUpdatedとなります。
は1ではなく0より大きい。
И?それで問題は解決するのでしょうか?
それとも、新しいバーの たびに全編を再計算しても問題ないのでしょうか?
は1ではなく0より大きい。
И?それで問題は解決するのでしょうか?
それとも、新しいバーの たびに全編を再計算しても問題ないのでしょうか?
正しくお伝えしています。1より大きい。新しいバーが表示されたとき、その差は1である。
そして、それで完全に問題が解決するのです。
通常のインジケータは、完全に再計算するのに非常に時間がかかります。1秒以内です。
正しくお伝えしています。1以上 新しいバーが表示されると、その差は1です。
そして、それで完全に問題が解決するのです。
通常のインジケータは、完全な再計算にほとんど時間がかかりません。1秒以内です。
バッファがゼロになった場合のみ動作します。
バッファをゼロにリセットした場合のみ動作します。
申し訳ありませんが、お伺いします。
- ここで、rates_total と prev_calculated を各ティックで 作成された別々の変数に割り当てる必要があるのはなぜですか?
- 条件演算子if()の式とループfor()で、これらの変数の差を再計算するには?
- rate_totalとprev_calculatedの差を表す変数、例えばlimitを導入すればいいのでは?
タスクによって実装が異なる場合があります。ニュアンスが違うかもしれません。さまざまな条件によって、他の人がどのように実装しているかを見てはどうでしょうか。含む、そして理解するためにプライミングの助けを借りて、決定、タスクに応じて、自分自身のための許容可能な選択肢を形成する?追伸:さらに追記します。
条件演算子if(){}のブロックでのゼロ化(counted=0)についてのお考えは、私には理解できるような気がします。
念のため、ドキュメントの「...」のセクションから抜粋しておきます。言語の基礎 / 関数 / イベント処理関数。
... OnCalculate()の最後の呼び出し以降に価格データが変更された場合(より深い履歴がポンピングされたか、履歴のギャップが埋められた)、入力パラメータprev_calculatedの値はターミナル自体によってゼロに設定されます。
バッファをゼロにリセットした場合のみ動作します。
何もリセットする必要はありません。
prev_caclulatedを0に戻すと、インジケータは完全に再計算されます。そして、これは正しいことです。あなたは、歴史の中で一体何が変わったのか、知らないのです。もしかしたら、どこかの穴に装填されたのかもしれないし、スタッドがどこかで清掃されたのかもしれない。完全に再計算することが義務付けられています。それ以外の場合は、最後の1本だけが再計算されます(新しいバーが 表示された場合は、最後の2本が計算されます)。
申し訳ありませんが、お伺いします。
- rates_totalとprev_calculatedの値を各ティックで別々の変数に割り当てる必要があるのはなぜですか?
- 条件文if()やfor()ループの中で、これらの変数の差分を再計算しているのでしょうか?
- rates_totalとprev_calculatedの差を変数で入力すればいいのでは、例えばlimitとか?
タスクによって実装が異なる可能性があります。ニュアンスが違うかもしれません。さまざまな条件によって、他の人がどのように実装しているかを見てはどうでしょうか。含む、そして理解するためにプライミングの助けを借りて、決定、タスクに応じて、自分自身のための許容バリアントを形成する?ありがとうございます。良い点です。
違うんです。空白期間があっても全履歴を再計算できるようにするためです。
追伸:さらに追記します。
条件演算子if(){}のブロックでのゼロ化(counted=0)についてのお考えは、私には理解できるような気がします。
念のため、ドキュメントの「...」のセクションから抜粋しておきます。言語の基礎 / 関数 / イベント処理関数。
... OnCalculate()の最後の呼び出し以降に価格データが変更された場合(より深い履歴がポンピングされたか、履歴のギャップが埋められた)、入力パラメータprev_calculatedの値はターミナル自体によってゼロに設定されます。
リセットする必要はありません。
prev_caclulatedをゼロにすると、インジケータは完全に再計算されます。そして、これは正しいことです。あなたは、歴史の中で一体何が変わったのか、知らないのです。もしかしたら、どこかの穴に装填されたのかもしれないし、スタッドがどこかで清掃されたのかもしれない。完全に再計算することが義務付けられています。それ以外の場合は、最後の1本だけが再計算されます(新しいバーが 表示された場合は、最後の2本が計算されます)。