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

 
sss20192:

インジケーターは、データウィンドウ のデータが異なります。H1チャートにEAを貼り付けると、M5 M15とH1のタイムフレームのデータがコピーされます。


int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );
バッファ(0がある)もコピーする配列も同じで、1要素から始めて1要素コピーします。おそらく配列の向きも重要でしょう。

 
zfs:
バッファ(0がある)もコピーする配列も同じで、1要素から始めて1要素コピーします。

そうですね、最初のインジケーターバッファは、3つの異なるタムフレームで。そして今のところ、ロギングデータには同じ配列を使っています。

ArraySetAsSeriesを trueとfalseに設定してみました。それでも時々、-4.53e-32のような奇妙なデータがログに表示されることがあります。

 

皆さん、これをどう実装するか教えてください。

配列があり、そこに値が書き込まれ、似たような値が含まれていれば、バンザイをする。

 
sss20192 ログに-4.53e-32のような奇妙なデータが表示されることがあります。
良い点としては、ハンドルの作成が 成功したかどうか、CopyBuffer()関数が 成功したかどうかの両方のチェックを挿入することです。そうでなければ、このゴミ値がCopyBuffer()関数の 実行に成功した結果なのか、関数が正しく動作しなかったのかさえ、まだわかりません。
 
Top2n: 配列があり、そこに値が書き込まれ、似たような値が含まれているとクラッシュが発生します。
配列の 要素は、要求された値と一致するかどうか検索する必要があります。一致するものがない場合,配列に値が書き込まれる。
 
Yedelkin:
配列の要素が 要求された値と一致するかどうか、検索してみる必要があります。一致するものがない場合、その値を配列に書き込む。
また、1つの配列の中の2つのインデックスを比較する方法は?
 
Top2n:
また、1つの配列の中の2つのインデックスを比較する方法は?

記事をよく読んでみてください。>>MQL5プログラミングの基礎 - 配列

アレイを扱うすべてのケースに対応する詳細な情報が掲載されています。間違いなくこれで十分なはずです。))

 
tol64:

記事をよく読んでみてください。>>MQL5プログラミングの基礎 - 配列

アレイを扱うすべてのケースに対応する詳細な情報が掲載されています。間違いなくこれで十分なはずです。))

皆さん、本当にありがとうございました!)さよならなんて言わないよ)))
 
Yedelkin:
フレンドリーなことに、ハンドル作成が 成功したかどうか、CopyBuffer()関数が 成功したかどうかのチェックをコードに挿入する必要があります。そうでなければ、このゴミ値がCopyBuffer()関数の 実行に成功した結果なのか、関数が正しく動作しなかったのかさえもわかりません。

確認しました。ハンドルは正常に作成され、インデックスは10,11,12です。しかし、CopyBuffer関数は エラーERR_INDICATOR_DATA_NOT_FOUNDを発生します。選択した通貨ペアはマーケットウォッチウィンドウに表示されており、これらの通貨ペアのチャートも開いているのに、なぜこのエラーが発生するのでしょうか?

さらに、CopyBufferの実行結果を示す変数を作成します。

int aaa = CopyBuffer...とすると、関数で定義されているように、1つの値がコピーされたように、値1が表示されます。


MAバッファをコピーすると、同じエラーが表示されますが、値は正しく配列に書き込まれます。

正しいバッファコピーの例を示してください。

 
sss20192: 確認しました。ハンドルは通常通り作成され、インデックス10、11、12を持つ。しかし、CopyBuffer関数は エラーERR_INDICATOR_DATA_NOT_FOUNDを発生させます。選択した通貨ペアはマーケットウォッチウィンドウに表示されており、これらの通貨ペアのチャートも開いているのに、なぜこのようなエラーが発生するのでしょうか?

さらに、CopyBufferの実行結果を示す変数を作成します。

int aaa = CopyBuffer...とすると、関数で定義されているように、1つの値がコピーされたように、値1が表示されます。

MAバッファをコピーすると、同じエラーが表示されますが、値は正しく配列に書き込まれます。

バッファを正しくコピーする例を教えてください。

はい、バッファコピーの例は、関数CopyBuffer() の説明で正しいです。セリフにご注目ください

//--- check if all data calculated
    if(BarsCalculated(ma_handle)<rates_total) 

//--- try to copy
    if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);
 
理由: