MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 444

 
mila.com:

アドバイザーは、可能性自体を確認するために作られた、それは正しく開きますが、インジケータでは、それは全く "矢印v.3 "指標の近くの2つのバッファの値を参照してくださいしない

ループ内の配列の 外側にインジケータがあるわけです。ネストされたループの中で、どのような制限、どのようなil値になっているかを見てください。limit == rates_total-2 のとき、index il はどこを参照しているのでしょうか?

 
mila.com:

どのように見ていますか?

コードを見る

 
Artyom Trishkin:

限界値が何なのか、ネストしたサイクルのil値が何なのかを確認します。

第一の矢印と第二の矢印のバーナンバーを交互に表示します。

  for(int i=limit; i>=0; i--) 
     {
     for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            Print(il);
           // break;
           }
        }
//
      if(num_buy==60)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
    }
 
Artyom Trishkin:

コードのチェック

3日前から見てるんだけど、どうしたんだろう)

助けてください
 
mila.com:

第一の矢印と第二の矢印のバーナンバーを交互に表示します。

ところで、これはどんな変なサイクルなんですか?

なぜ、物語の最初から最後まで、最初のループの反復ごとに入れ子ループで300小節も遡り続けるのでしょうか。

履歴データ以外の値を出さないiCustom()で保存されているのでしょう。

まあ、自分で見てください。1000本のバーだけの履歴があるとします:この場合rates_totalは1000本です。リミット、1000-2=998。そのため、最初のヒストリーバーがループから除外されます。気にしないでください。

まず、バー上に998番のインデックスを付けます(rates_total-2 = 1000-2 = 998)。

で、どうするんだ?そして、998+1=999に等しい値iから始まるループを埋め込みます - これは歴史の最初のバーです - 左側にはこれ以上何もありません - それは空です。そして、999から999+300までのループを行うのです。そこにデータはありません。これはアレイの外に出ているのです。

したがって、この状況でのリミットは、一番最初に埋め込まれたループが小節999に到達するようなものでなければなりません。これは rates_total-2-300 です。そして、i+1から入れ子ループを開始するので、i=1000-2-300=698となり、配列のオーバーランは発生しないことになります。ネストループでは、li=i+1=698+1=699、li=i+300=698+300=998までとなります。ここでも一番最初の小節は計算から除外される。しかし、アレイのオーバーランはない。

どうやら、自分が何をしているのか、よく分かっていないようです。

これは、一般的に非常に奇妙なループによって示されています。

そこではネストしたループは必要ありません。カスタムインジケータの バッファに一定の値を求めるのであれば、ゼロから一定の値までのサイクルを作ってください。ただし、rates_totalを超えないこと。

 
Artyom Trishkin:

ところで、これはどんな変なサイクルなんですか?

なぜ、物語の最初から最後まで、最初のループの反復ごとに入れ子ループで300小節も遡り続けるのでしょうか。

履歴データ以外の値を出さないiCustom()で保存されているのでしょう。

まあ、自分で見てください。1000本のバーだけの履歴があるとします:この場合rates_totalは1000本です。リミット、1000-2=998。そのため、最初のヒストリーバーがループから除外されます。ありのままでいい。

まず、バー上に998番のインデックスを付けます(rates_total-2 = 1000-2 = 998)。

で、どうするんだ?そして、998+1=999に等しい値iから始まるループを埋め込みます - これは歴史の最初のバーです - 左側にはこれ以上何もありません - それは空です。そして、999から999+300までのループを行うのです。そこにデータはありません。これはアレイの外に出ているのです。

したがって、この状況でのリミットは、一番最初に埋め込まれたループが小節999に到達するようなものでなければなりません。これは rates_total-2-300 です。そして、i+1から入れ子ループを開始するので、i=1000-2-300=698となり、配列のオーバーランは発生しないことになります。ネストループでは、li=i+1=698+1=699、li=i+300=698+300=998までとなります。ここでも一番最初の小節は計算から除外される。しかし、アレイのオーバーランはない。

どうやら、自分が何をしているのか、よく分かっていないようです。

これは、一般的に非常に奇妙なループによって示されています。


ありがとうございます、とても分かりやすいですね。

 
Artyom Trishkin:

これは、一般的に非常に奇妙なループによって示されています。

そこではネストしたループは必要ありません。カスタムインジケータバッファの 値を一定数求めるのであれば、0から一定値までのループを行う。ただし、rates_totalを超えないこと。

なぜゼロからなのか?

3本目または「N」本のバーに、呼び出されたインジケータの矢印がある場合にポイントを置く必要があります。歴史全体について

正しい周期とは?

 
mila.com:

なぜゼロからなのか?

呼び出すインジケーターの3本目または「N」バーに矢印があるかどうかをドットで表示する必要があります。歴史全体について。

正しい周期とは?

これはどこで行うべきでしょうか?インジケーターで?EAで?

 
Artyom Trishkin:

これはどこで行うべきでしょうか?インジケーターで?EAで?

インジケーターで

 
mila.com:

インジケーターに

そのため、iCustom()を最初のループインデックスで右読みします。

もう一つの質問は、現在のバーから左のデータが必要だということです。だから、0から見つかったものまで読みますが、rates_total-1を超えないようにしてくださいということなんです。

また、limit>1 の場合は read only となる。

そうでなければ、新しいデータは存在せず、必要なバーのインデックスは変更されません。