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

 
Vitaly Muzichenko #:

配列にコピーする

配列の最大高を求めるには?

さらにCopyHighをコピーして、この配列から最大値を取得します。スルー......イット......でも、他の方法は、ループでやり直すしかない。

 
Alexey Viktorov #:

さらにCopyHighをコピーして、この配列から最大値を取得します。スルー...イット...はわかるのですが、もう一つの選択肢はループのみです。

したのですが、追加でコピーしています。ループを使うのもNGです。

コピーハイに お任せします。

 
Vitaly Muzichenko #:

したのですが、余分なコピーです。スルー・ザ・ループも選択肢にない。

それじゃ、コピーハイを通して おきますね。

ずっと考えていたんです。そして、MqlRates 配列から最小/最大を探す必要がある場合、必要なデータを別のダブル配列にコピーした方が良いという結論に達しました。

 
Vitaly Muzichenko #:

配列にコピーする

配列の最大値を取得する方法を教えてください。

CopySymb[i].high
 
Vitaly Muzichenko #:

配列にコピーする

アレイの最大高を取得するには?

コードに直接書き込むことができます。

MqlRates CopySymb[];
double maxHigh;
int iMaxHi, len;  

if((len = CopyRates(mSymbol,PERIOD_CURRENT,0,6,CopySymb))<0) return;

iMaxHi = 0;
maxHigh = CopySymb[0].high;

for (int i = 1; i < len; i++)
  if(CopySymb[i].high > maxHigh) {
    maxHigh = CopySymb[i].high;
    iMaxHi = i;
  }

Print(iMaxHi, ": ", maxHigh);

また、ArrayMaximumがMqlRates配列で動作しないのはOKです。

 
Mihail Matkovskij #:

コードに直接書けばいいのでは?

が、よくよく考えてみると

この短いコードでさえも、残酷な間違いがあります。

 
Maxim Kuznetsov #:

と考えたらどうでしょう。

この短いコードでさえも、残酷な間違いがあります。

オンラインでコードを書きました。目を通し、すべてのエラーを修正した、つもりだ。このコードをスクリプトに貼り付けると、コンパイラがエラーがあれば表示します。

 
Mihail Matkovskij #:

オンラインでコードを書きました。目を通し、すべてのエラーを修正した、つもりだ。スクリプトにコードを挿入すると、コンパイラはエラーがあればそれを表示します。

コンパイラで解決することはできませんが、CopyXXXの結果に0やEMPTY_VALUEが含まれる可能性があることを知っておく必要があります。ごく稀にだが、よくあること。EMPTY_VALUE は DBL_MAX、すなわち最大値である。それは、「見つける」ことです。

外部から受け取った値が正しいかどうかのチェックができない。

 
Maxim Kuznetsov #:

これはコンパイラで修正できないので、次のことを知っておく必要があります:CopyXXXの結果は0とEMPTY_VALUEを含むことができます。稀にだがよくある。EMPTY_VALUE は DBL_MAX、すなわち最大値である。それは、「見つける」ことです。

外部から受け取った値が正しいかどうかのチェックはしていない。

CopyRates が 0、EMPTY_VALUE、またはDBL_MAX を返すことを期待するのは、配列の高さですか?本気ですか?:)

もしかしたら、それが起こる例を示してくれるかもしれませんね?

 
Mihail Matkovskij #:

CopyRatesが0、EMPTY_VALUE、DBL_MAXを配列ハイで 返すと思う?本気ですか?:)

もしかしたら、それが起こる例を示してくれるかもしれませんね?

また、CopyHighで満たされた配列doubleの0、EMPTY_VALUE、DBL_MAXに 当たったとき、ArrayMaximumはどのような動作をするのでしょうか?

あなたの発言のどこに論理性があるのでしょうか?