intCopyBuffer(
int indicator_handle, // handle индикатораint buffer_num, // номер буфера индикатораint start_pos, // откуда начнем int count, // сколько копируемdouble buffer[] // массив, куда будут скопированы данные
);
//--- check if all data calculatedif(BarsCalculated(ma_handle)<rates_total)
//--- try to copyif(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);
インジケーターは、データウィンドウ のデータが異なります。H1チャートにEAを貼り付けると、M5 M15とH1のタイムフレームのデータがコピーされます。
バッファ(0がある)もコピーする配列も同じで、1要素から始めて1要素コピーします。
そうですね、最初のインジケーターバッファは、3つの異なるタムフレームで。そして今のところ、ロギングデータには同じ配列を使っています。
ArraySetAsSeriesを trueとfalseに設定してみました。それでも時々、-4.53e-32のような奇妙なデータがログに表示されることがあります。
皆さん、これをどう実装するか教えてください。
配列があり、そこに値が書き込まれ、似たような値が含まれていれば、バンザイをする。
配列の要素が 要求された値と一致するかどうか、検索してみる必要があります。一致するものがない場合、その値を配列に書き込む。
また、1つの配列の中の2つのインデックスを比較する方法は?
記事をよく読んでみてください。>>MQL5プログラミングの基礎 - 配列 編
アレイを扱うすべてのケースに対応する詳細な情報が掲載されています。間違いなくこれで十分なはずです。))
記事をよく読んでみてください。>>MQL5プログラミングの基礎 - 配列 編
アレイを扱うすべてのケースに対応する詳細な情報が掲載されています。間違いなくこれで十分なはずです。))
フレンドリーなことに、ハンドル作成が 成功したかどうか、CopyBuffer()関数が 成功したかどうかのチェックをコードに挿入する必要があります。そうでなければ、このゴミ値がCopyBuffer()関数の 実行に成功した結果なのか、関数が正しく動作しなかったのかさえもわかりません。
確認しました。ハンドルは正常に作成され、インデックスは10,11,12です。しかし、CopyBuffer関数は エラーERR_INDICATOR_DATA_NOT_FOUNDを発生します。選択した通貨ペアはマーケットウォッチウィンドウに表示されており、これらの通貨ペアのチャートも開いているのに、なぜこのエラーが発生するのでしょうか?
さらに、CopyBufferの実行結果を示す変数を作成します。
int aaa = CopyBuffer...とすると、関数で定義されているように、1つの値がコピーされたように、値1が表示されます。
MAバッファをコピーすると、同じエラーが表示されますが、値は正しく配列に書き込まれます。
正しいバッファコピーの例を示してください。
さらに、CopyBufferの実行結果を示す変数を作成します。
int aaa = CopyBuffer...とすると、関数で定義されているように、1つの値がコピーされたように、値1が表示されます。
MAバッファをコピーすると、同じエラーが表示されますが、値は正しく配列に書き込まれます。
バッファを正しくコピーする例を教えてください。
はい、バッファコピーの例は、関数CopyBuffer() の説明で正しいです。セリフにご注目ください