TFを変更するのは問題 - ページ 3

 
Vasyl Nosal:

思いついたことがあります。後で書きますね。

その発想は死んでいる。

HistoryUpdated()のような、すべての履歴が更新されたかどうかをチェックするシステムを作るよう、開発者に依頼します。

最適なバリアント。すべての時間軸の履歴を最新に保つこと。最近、CodeBaseに 同様のインジケータが登場しました。
 
Slawa:

開発者は助けて くれないから。

すでに述べたように、rates_totalとprev_calculatedの差が1より大きい場合、historyUpdatedとなります。

は1ではなく0より大きい。

И?それで問題は解決するのでしょうか?

それとも、新しいバーの たびに全編を再計算しても問題ないのでしょうか?

 
Vasyl Nosal:

は1ではなく0より大きい。

И?それで問題は解決するのでしょうか?

それとも、新しいバーの たびに全編を再計算しても問題ないのでしょうか?

正しくお伝えしています。1より大きい。新しいバーが表示されたとき、その差は1である。

そして、それで完全に問題が解決するのです。

通常のインジケータは、完全に再計算するのに非常に時間がかかります。1秒以内です。

 
Victor Nikolaev:

正しくお伝えしています。1以上 新しいバーが表示されると、その差は1です。

そして、それで完全に問題が解決するのです。

通常のインジケータは、完全な再計算にほとんど時間がかかりません。1秒以内です。

バッファがゼロになった場合のみ動作します。

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{
 
Vasyl Nosal:

バッファをゼロにリセットした場合のみ動作します。

//history update
  int all=rates_total;
  int counted=prev_calculated;
  if(all-counted>1)
  { 
  ArrayInitialize(up_arr,EMPTY_VALUE);
  ArrayInitialize(down_arr,EMPTY_VALUE);
  counted=0;
  }
   
   //main
 for(int i=all-counted;i>=0;i--)
{

申し訳ありませんが、お伺いします。

  • ここで、rates_total と prev_calculated を各ティックで 作成された別々の変数に割り当てる必要があるのはなぜですか?
  • 条件演算子if()の式とループfor()で、これらの変数の差を再計算するには?
  • rate_totalとprev_calculatedの差を表す変数、例えばlimitを導入すればいいのでは?
タスクによって実装が異なる場合があります。ニュアンスが違うかもしれません。さまざまな条件によって、他の人がどのように実装しているかを見てはどうでしょうか。含む、そして理解するためにプライミングの助けを借りて、決定、タスクに応じて、自分自身のための許容可能な選択肢を形成する?
 
Vasyl Nosal:

追伸:さらに追記します。

条件演算子if(){}のブロックでのゼロ化(counted=0)についてのお考えは、私には理解できるような気がします。

念のため、ドキュメントの「...」のセクションから抜粋しておきます。言語の基礎 / 関数 / イベント処理関数

... OnCalculate()の最後の呼び出し以降に価格データが変更された場合(より深い履歴がポンピングされたか、履歴のギャップが埋められた)、入力パラメータprev_calculatedの値はターミナル自体によってゼロに設定されます。

 
Vasyl Nosal:

バッファをゼロにリセットした場合のみ動作します。

何もリセットする必要はありません。

int OnCalculate(...)
{
   // индекс последнего посчитанного на прошлом вызове бара
   // с которого начинаем расчёт
   int nStartBar = rates_total - MathMax(prev_calculated, 1);

   for(int i = nStartBar; i >= 0; i--)
   {
       // рассчитываем индикатор на всех непосчитанных барах
   }
}

prev_caclulatedを0に戻すと、インジケータは完全に再計算されます。そして、これは正しいことです。あなたは、歴史の中で一体何が変わったのか、知らないのです。もしかしたら、どこかの穴に装填されたのかもしれないし、スタッドがどこかで清掃されたのかもしれない。完全に再計算することが義務付けられています。それ以外の場合は、最後の1本だけが再計算されます(新しいバーが 表示された場合は、最後の2本が計算されます)。

 
Dina Paches:

申し訳ありませんが、お伺いします。

  • rates_totalとprev_calculatedの値を各ティックで別々の変数に割り当てる必要があるのはなぜですか?
  • 条件文if()やfor()ループの中で、これらの変数の差分を再計算しているのでしょうか?
  • rates_totalとprev_calculatedの差を変数で入力すればいいのでは、例えばlimitとか?
タスクによって実装が異なる可能性があります。ニュアンスが違うかもしれません。さまざまな条件によって、他の人がどのように実装しているかを見てはどうでしょうか。含む、そして理解するためにプライミングの助けを借りて、決定、タスクに応じて、自分自身のための許容バリアントを形成する?

ありがとうございます。良い点です。

違うんです。空白期間があっても全履歴を再計算できるようにするためです。

 
Dina Paches:

追伸:さらに追記します。

条件演算子if(){}のブロックでのゼロ化(counted=0)についてのお考えは、私には理解できるような気がします。

念のため、ドキュメントの「...」のセクションから抜粋しておきます。言語の基礎 / 関数 / イベント処理関数

... OnCalculate()の最後の呼び出し以降に価格データが変更された場合(より深い履歴がポンピングされたか、履歴のギャップが埋められた)、入力パラメータprev_calculatedの値はターミナル自体によってゼロに設定されます。

それはないでしょう。0→0でない→また0になる(履歴を何度か読み込むと)。
 
Sergei Vladimirov:

リセットする必要はありません。

prev_caclulatedをゼロにすると、インジケータは完全に再計算されます。そして、これは正しいことです。あなたは、歴史の中で一体何が変わったのか、知らないのです。もしかしたら、どこかの穴に装填されたのかもしれないし、スタッドがどこかで清掃されたのかもしれない。完全に再計算することが義務付けられています。それ以外の場合は、最後の1本だけが再計算されます(新しいバーが 表示された場合は、最後の2本が計算されます)。

いいえ、ゼロにすることなく、スクリーンショットのようになります。