基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2010年03月02日(火)

if文の注意点(2) [プログラミング]



CやMQL4でif文を使う際の注意点をもう一つ。

if文で条件が複雑になる場合、基本的には単純な条件を組み合わせることになりますが、そのときに論理和(OR)論理積(AND)の違いに注意しなくてはいけません。

OR は「または」という意味、ANDは「かつ」という意味に置き換えればわかりやすいでしょう。

例えば、xが10から90の間の場合、x>10かつx<90なので、

if(x > 10 && x < 90)

のように「&&」というANDの演算子で条件を結びました。

逆に10以下と90以上の場合に条件が成り立つ場合を考えてみましょう。

日本語だと「何々と何々の場合」というように「」という助詞を使います。

これは英語に直訳すると「and」になるかもしれませんが、論理的には「AND」の意味ではなく、「OR」の意味となります。

なので、
if(x <= 10 && x >= 90)

ではダメで
if(x <= 10 || x >= 90)

と書かなくてはいけません。

こんどは、もうちょっと複雑にして、「10から20までと80から90までの場合」に条件が成立するケースをみてみましょう。

さっきと同じく「10から20まで」の条件と「80から90まで」の条件はOR「||」で結ばれるので次のように書けます。
if(x > 10 && x < 20 || x > 80 && x < 90)

あるいは「||」の前後を入れ替えて
if(x > 80 && x < 90 || x > 10 && x < 20)

と書いてもよさそうです。

Cプログラムの場合、どちらの式でも正しく条件分岐されます。しかし、MQL4では、上の式は正しく条件分岐されますが、下の式はどの場合も成立しません。

なぜでしょう?

これはCとMQL4の仕様の違いがあるからです。

例えば「3+4*5」という式では「4*5=20」を先に計算して「3+20=23」を後から計算します。これを「優先順位」というのですが、論理演算子の場合も優先順位があります。

但し、
Cの場合:&& → || の順
MQL4の場合:|| → && の順

と、逆になっているのです。

なので、Cの場合、
if((x > 80 && x < 90) || (x > 10 && x < 20))

のように && を先に評価するのに対して、MQL4では、
if(x > 80 && (x < 90 || x > 10) && x < 20)

のように || を先に評価するのです。

その結果、80より大きい条件と20より小さい条件を同時に満たすことはあり得ないので、どんな場合でも条件が成り立たないということになるのです。

これは、Cを知っている人からすると、結構な落とし穴です。

MQL4では、複雑な条件式を書く場合、先に評価させたい条件を括弧「()」で囲んでおく方が確実と言えるでしょう。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 17時24分


ページのトップへ ページのトップへ

Sponsor AD

2010/3

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

ランダムウォークとランダムトレード(6)

ランダムウォークとランダムトレード(6)

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.