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

 

最初のケースで解決される - 2つの比較のために括弧に入れ、それが誓うことはありません - 論理的なエラーがあった - すなわち、比較の結果は、 "または "のために置き換えることができる?

2つ目の表現に疑問が残りますが、何が問題なのでしょうか?

 
-Aleks-:

最初のケースは解決しました - 2つの比較を括弧に入れ、それは誓いません - 論理的なエラーがありました - すなわち、比較結果は、 "または "のために置き換えることができますか?

2番目の表現については、まだ未解決の問題があります。

新しいmql4では、条件のチェックは完全には行われないことを覚えておいてください。I.e.条件において

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Low[x]がPriceBuyより大きくない場合、それ以上のチェックは行われない。これは、エラーの説明でわかることです。これに対応して、最初の組を括弧で囲むと、2番目の組の条件が失敗した場合にチェックされる。

2つ目の質問です。

for(calc_day;calc_day>0; calc_day--)

calc_dayは何に相当するのでしょうか?ゼロ以下であってもよいですか?コンパイラはロジックの中身を知らないので......。そのため、効果的でないループの可能性を警告しているのです。

 
Alexey Viktorov:

新しいmql4では、条件チェックが完全に行われないことを忘れないでください。すなわち、条件において

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Low[x]がPriceBuyより大きくない場合、それ以上のチェックは行われません。これは、エラーの説明でわかることです。これに対応して、最初の組を括弧で囲むと、2番目の組の条件が失敗した場合にチェックされる。

回答ありがとうございました

驚いた。視覚的にはいつも正しく動作しているロジックなので、うーん...。


アレクセイ・ヴィクトロフ

2つ目の質問です。

for(calc_day;calc_day>0; calc_day--)

calc_dayは何に相当するのでしょうか?ゼロ以下であってもよいですか?コンパイラはロジックの中身を知らないので...。そのため、効果的でないループの可能性を警告しているのです。

calc_day は常に 0 より大きく、それ以外の値ではコードは呼び出されない。
 
-Aleks-:

返信ありがとうございました

驚いた。視覚的にはいつも正しく動作しているロジックなので、うーん...。

6**ビルド以前はそのような感じで、条件の連鎖をすべてチェックして、すべてがうまくいっていたのですが、今はすべてが変わっています。また、古いビルドでは、この場合の条件は曖昧です。どのようにデザインされているのですか?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

それとも、そうなのか?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

人間の脳ならわかるが、コンパイラはどうすればいいのか?脳がないんです。

-Aleks- です。

calc_day は常に 0 より大きく、それ以外の値ではコードが呼び出されない。

コンパイラに伝えると...

 
Alexey Viktorov:

ビルド6**までは、条件の連鎖をすべて確認し、すべてがうまくいくという感じでしたが、今はすべてが変わっています。そして古いビルドでは、この場合も条件があいまいです。どのようにデザインされているのですか?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

なのか、それだけなのか。

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

人間の脳ならわかるが、コンパイラはどうすればいいのか?彼には脳がない...


コンパイラに伝えると...

納得~、もっと警戒します。

コンパイラに伝えるにはどうしたらよいですか?書いても、理解されるか?

if (calc_day<0)  calc_day=calc_day*(-1);

 
Alexey Viktorov:

6**ビルドの前もそうでしたが、条件の連鎖をすべて確認し、すべてがうまくいっていたのに、今はすべてが変わってしまいました。はい、そしてこの場合の条件の曖昧さの古いビルドで。どのようにデザインされているのですか?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

なのか、それとも

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

人間の脳ならわかるが、コンパイラはどうすればいいのか?彼には脳がない...


コンパイラに伝えると...

演算子の優先順位をチェックし、エラーの可能性がある場合は、括弧を使用して優先順位を明確にします - これはエラーでは ありません。 それは警告である。古いコードで発生する。

コンパイラのためというより、ユーザーのために追加したのです。コンパイラは操作の優先順位 によって導かれる。そこでは、すべてがクリアになる。の優先順位は||の優先順位より高いので、括弧はこのように並べます。

if( (安値[X]>価格買い && 高値[X]>価格買い) || (安値[X]<価格買い && 高値[X]<価格買い]) )

更新:この場合、MT4でもMT5でも優先順位は同じです。

 
-Aleks-:

納得~、もっと警戒します。

コンパイラに伝えるにはどうしたらよいですか?書いても、理解されるか?

if (calc_day<0)  calc_day=calc_day*(-1);

for( calc_day = 365; calc_day > 0; calc_day --)
だから、試してみてください。
 
Alexey Kozitsyn:

演算子の優先順位をチェックし、エラーの可能性がある場合は、括弧を使用して優先順位を明確にします - これはエラーでは ありません。 それは警告である。古いコードで発生する。

コンパイラのためというより、ユーザーのために追加したのです。コンパイラは操作の優先順位 によって導かれる。そこでは、すべてがクリアになる。の優先順位は||の優先順位より高いので、括弧はこのように並べます。

if( (安値[X]>価格買い && 高値[X]>価格買い) || (安値[X]<価格買い && 高値[X]<価格買い]) )

更新:この場合、MT4でもMT5でも優先順位は同じです。

まあ要するに、そう、警告はエラーではないのです。しかし、最初のバリアントはどのように動作するのでしょうかif( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )?。 それとも、ブラケットを何個もつけるのはバツが悪いのでしょうか?

 
-Aleks-:

納得~、もっと警戒します。

コンパイラに伝えるにはどうしたらよいですか?書いても、理解されるか?

if (calc_day<0)  calc_day=calc_day*(-1);

for(int i=calc_day; i>0; i--) {}
 
Alexey Viktorov:

まあ、要するに、そう、警告はエラーではないのです。しかし、最初のif( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy ) はどうなっているのでしょうか それとも、ブラケットを何個か付けるのに失敗するのでしょうか?

上に書いたような仕組みになります。

コンパイラは、明白でないエラーの可能性を避けるために、怠慢に括弧を付けないようユーザーに警告している。

理由: