//+------------------------------------------------------------------+int indexMax[];
int indexMin[];
int sizeArray = ArraySize(opens);
int size = 0;
int n = 30;
for(int i = n; i < sizeArray; i + n)
{
ArrayResize(indexMax, size + 1);
indexMax[size] = ArrayMaximum(opens, i - n, i);
indexMin[size] = ArrayMinimum(opens, i - n, i);
size++;
}
//+------------------------------------------------------------------+
intArrayMaximum(
constvoid& array[], // массив для поиска int start=0, // с какого индекса начинаем поиск int count=WHOLE_ARRAY// количество проверяемых
);
このコード
double open[];
int copy = CopyOpen(_Symbol, PERIOD_CURRENT, 0, 100, open);
int arrMaximum = ArrayMaximum(open, 85, 20);
こんにちは。Mql5でExpert Advisorを作成する際、問題が発生しました。その年のローソク足の始値の配列があります。この配列の各ローソク足で、高値と安値をチェックするために、n本のローソク足の配列を作成する必要があります。ジグザグ・インディケーターのようなものだ。
このコードを書いてみたのですが、「配列が範囲外」というエラーが出たり、配列全体の最大値と最小値の値が、必要な30キャンドルの期間内でなかったりします。
おそらく、ArrayMaximum()関数と ArrayMinimum()関数で チェックするために別の配列を作成する必要があるのでしょうが、入れ子ループと配列のサイズで混乱しています。
ヒントをください。
if(i+30<=ArraySize(opens))
以下は 配列の外側の出力である。
このエラーは不注意によるものです。修正しても問題は解決しません。
ー ローソク足のー30本のー始値のー終値のー高値・安値のー終値。
配列の最大値
ArrayMaximum
戻り値 インデックス を返します。
未確認ですが、ローソク足のオープン(始値)の最小値と最大値のインデックスを 取得する方法のようです。
価格も一度に取得できるが、インデックスは取得できない。
ステップのあるmqlループの例はどこにも見つからなかった。これは問題を単純化します。
ChatGPTだけがこのように書くようにアドバイスしてくれました:
さらに実験してみます。コードは動作します。ありがとうございました。
ArrayResizeを しないと "array out of range "エラーが発生します。
このエラーは不注意によるものです。修正しても問題は解決しません。
30本のローソク足の始値の配列を作成し、その中の高値と安値を検索するにはどうすればよいでしょうか?
何が問題なのでしょうか?配列temp[]を宣言し、そこに30個の要素をコピーし、最小値/最大値のインデックスを探します。そして最後に30より小さければ、残りいくつかをコピーする。そしてこの場合、私はwhile()ループを使いたい。
何が問題なのか?配列temp[]を宣言して、そこに30個の要素をコピーし、最小値/最大値のインデックスを探します。そして最後に30より小さければ、残りいくつかをコピーする。そしてこの場合、while()ループを使う方がいいですね。
はい、できます。考えがまとまらないので、アドバイスをお願いします。
ああ、そうすればいい。考えがまとまらないから、アドバイスを求めているんだ。
静的配列では、サイズは一定に設定され、変更することはできません。動的配列では、変更することはできますが、配列のサイズは設定されています!つまり、配列のサイズは既知で、0から最後までの要素のインデックスが設定されています。<=は、0からの要素のインデックスと最後の要素のインデックスが、配列のサイズの1単位分小さいというだけで、範囲外です。
すべてはあなたの手の中です)))
静的配列では、サイズは一定に設定され、変更することはできません。動的配列では、サイズは変更できますが、 配列のサイズは設定されています! つまり、配列のサイズは既知であり、要素のインデックスは0から末尾までです。要素のインデックスが0からで、最後の要素のインデックスが配列のサイズの1単位分小さいというだけで、<=は範囲外です。
すべてはあなたの手の中にあります)))
どういう意味ですか? ある配列から別の配列temp[]に要素数をコピーするには、コピーする前に配列サイズを設定する必要があると思いますか?
ああ、そうすればいい。考えがまとまらないから、アドバイスを求めているんだ。
一時配列も必要ない。
このコード
は、20個の要素を検索するように設定されているにもかかわらず、最大15個の残りの要素を検索する。
だから、while()ループを使って配列の残数を気にしない方がいい。