初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1468

 

rate_total と prev_calculated の意味がよくわかりません。

最初のパラメータ rates_total には、インジケータが計算に使用できるバーの数が 含まれており、チャート上で使用できるバーの数に対応して います。

例えば、 MA5(5バーの平均)は、100バーを表示するように設定 します。 すると、インジケータは104本目のバーから100本目のバーまで計算し、100本目のバーから線を引き始めます。すると、rates_total=5、100、104のどれになりますか?

 
Novichokkk バーの数が 含まれており、チャート上で使用可能なバーの数に対応して います。

例えば、 MA5(5本の平均)は、100本のバーを表示するように設定 します。 この場合、インジケータは104本目から100本目までを計算し、100本目から線を引き始めます。すると、rates_total=5、または100、104?

rates_totalは 、計算可能なチャートのバー数です。言い換えれば、これはBars() である。

prev_calculatedは 、前回のOnCalculate()コールでインジケータが計算したバーの数です。これは、経済的な計算を整理するために必要です。

prev_calculated が rates_total と等しい場合、まだ何も計算されていないことを意味し、インジケータ・バッファを初期化し、全履歴の完全な計算を実行する必要があります。

一般的には、以下のような構造を使用することができる:

//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }
 
Artyom Trishkin #:

rates_totalは、計算可能なチャート・バーの数である。言い換えれば、これはBars() である。

prev_calculatedは 、前回のOnCalculate()コールでインジケータが計算したバーの数です。経済的な計算を整理する必要があります。

prev_calculated が rates_total と等しい場合、まだ何も計算されていないことを意味し、インジケータ・バッファを初期化し、全履歴の完全な計算を実行する必要があります。

一般的には、以下のような構造を使用することができる:

rates_total -Bars() の代わりに、なぜこう書かないのでしょ うか?

int limit=Bars()-prev_calculated;

もちろん、お粗末で申し訳ありません。MKL5に関するドキュメントや何冊かの本を調べている。すべてのニュアンスが説明されているわけではありません。本にも書いていない。別に書籍に書かれている言葉は明確です。コンストラクションがどのように組み立てられるのか、どこから何を何のために......。のめり込んでいく。チェックとダブルチェックの連続だ。簡単なmashkiのコードを開いてみたら、行数が多い。そして、配列をアンロードして(あるいはアクセスして)、配列のこんなインデックスからこんなインデックスまで、1つの値について計算し、その計算を配列のどこからどこまでをインデックスで示すスライドウィンドウを通過させるだけでいいように思えた。画面に行を表示するにはYes。いいえ。
 
Novichokkk #:

なぜrates_totalの 代わりに Bars() と書かない のか?

もちろん、お粗末で申し訳ありません。ドキュメントやMKL5に関する何冊かの本を調べている。すべてのニュアンスが説明されているわけではありません。本にも。別途、書籍に書かれている言葉は明確です。コンストラクションがどのように組み立てられるのか、どこから何を何のために......。ハマっている。チェックとダブルチェックの連続だ。簡単なmashkiのコードを開いてみたら、行数が多い。そして、配列をアンロードして(あるいはアクセスして)、配列のこんなインデックスからこんなインデックスまで、1つの値について計算し、その計算を配列のどこからどこまでをインデックスで示すスライドウィンドウを通過させるだけでいいように思えた。はい、画面に表示します。そしてノー。

このような構造も使える。でもなぜ?ハンドラのパラメータにすでに定義済みの変数がある場合...。

Bars()は、本当に必要なときに使うべきです - 別のシンボル/タイムスタンプによって利用可能なバーの数を取得するときです。

 
Artyom Trishkin #:

このデザインも使える。でも、なぜ?ハンドラーのパラメーターにすでに定義済みの変数があるのに・・・。

ー別のー別のー 別のー別のー

Artyom、誰でも疲れてミスをすることはある。ー批評とータはータはーBars()はー常にー常にー常にー0をー

一般的に、このキャラクターに説明するのは非常に難しい。USEの犠牲者...

 
Alexey Viktorov #:

アルチョム、誰でも疲れてミスをすることがある。批判と思わないでほしいが、rates_total - Bars()は常にゼロに なる...。

一般的に、このキャラクターに説明するのは非常に難しい。USEの犠牲者...

そうですね。まさかそんな計算をする人がいるとは思いませんでした。目の端に計算中のバーズが見えたので、rates_totalの代わりかと思いました。

そういうこともあるんですね、ありがとうございます。

 
Artyom Trishkin #:
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }

その人を助けたかったのはわかるが、どうやら間違って相手を混乱させただけのようだ。

この場合の経済的誤算は少し違っているようだ。

for(int i=limit;i<rates_total;i++)
 
Aleksandr Slavskii #:

その人を助けたかったのはわかるが、どうやら間違って混乱させてしまったようだ。

この場合の経済的誤算は少し違っているようだ。

私が間違ったことを書いたと思いますか?正当化してください。

私の例とあなたの例では、限界はどこで、ループはどこから来るのでしょうか?

 
Novichokkk #:

なぜrates_totalの 代わりに Bars() と書かない のか?

要するに、rates_totalとBars() は同じもので、Bars() は関数なので、その呼び出しはrates_total 変数の値を 読み取るよりも実行時間の点でコストが かかります。

 
Artyom Trishkin #:

私が間違ったことを書いたと思いますか?正当化してください。

私の例とあなたの例では、ループはどこから来るのですか?

おっと))))

私はそれを正しく見ていなかった

if(limit>1)

私はあなたが書いたものを全く見ていませんでした。

申し訳ない。

理由: