第7回:条件の書き方 == && ||
今回はif文の中の条件を記述します。
== 等しいことを条件にする
A == B でAとBが等しいことを条件にできます。
これと現在の口座のポジション数を表すOrdersTotal()という関数を使うと
|
1 2 3 |
if( OrdersTotal() == 0 ){ OrderSend(略); } |
というように
ポジションを持っていない場合のみ
新規ポジションを取るように条件付けをすることができます。
※OrdersTotal():口座のポジションの数。ロットの数ではありません。
&& かつ、しかも
A && Bで、AかつBという条件になります。これまでに使った関数を使うと、
|
1 2 3 |
if( OrdersTotal() == 0 && Hour() == 6 ){ OrderSend(略); } |
このように、
ポジション数が0で、かつ、6時のときにオーダーが送信されます。
これで条件はまだまだ足りませんが、
深夜のトレードや”朝スキャ”が自動でできるようになります。
|| または、もしくは
A || B で、AもしくはBという条件になります。先ほどのを書き換えると
|
1 2 3 |
if( OrdersTotal() == 0 || Hour() == 6 ){ OrderSend(略); } |
ポジションが0のとき、
もしくは、
時刻が6時のときにオーダーが送信されます。
この場合、
ポジションを1つ以上持っていたとしても6時になればオーダーが送信されます。
また、6時でなくてもポジションが0ならばオーダーが送信されます。
&& と || の連結
&& と || は一つのIF文の中に何回でも記述することができます。
|
1 2 3 |
if( OrdersTotal() == 0 && ( Hour() == 5 || Hour() ==15) ){ OrderSend(略); } |
とすれば、
「ポジション数が0 かつ、 時刻が5時か15時のとき」
という条件文になります。
もしこのとき()が1つなかったら、
|
1 2 3 |
if( OrdersTotal() == 0 && Hour() == 5 || Hour() ==15 ){ OrderSend(略); } |
、「ポジション数が0 かつ、 時刻が5時か15時のとき」なのか
、「ポジション数が0かつ時刻が5時、または15時のとき」なのかはっきりしません。
現在のMT4のバージョンでは
()の区切りを明確にしなくても||と&&の順序がおかしくなることはないですが、
なるべく()を使って論理の区切りをはっきりさせましょう。
1 < 2 < 3 とは書けない
もう一つ注意しなければならない点があります。
数学では不等号を用いて、1>2>3のように書くことができますが、
プログラミングではそれはできません。
if( 1>2>3 )
とするとエラーになります。
if( 1>2 && 2>3 )のようにそれぞれを分けて
、&&で結んで記述しなければなりません。
関連記事
-
-
第13回:コードに汎用性を持たせる~”USDJPY”よりSymbol()~
MT4で設定を変更ができるような記述をする これまでに様々なコードを扱いましたが、 これまでの書
-
-
第15回:OrderModifyで損切り、利確注文を出す
SL,TPをEAから送信する ここでは ポジション取得時に損切りと利確を同時に送信するMQLプロ
-
-
第6回:オーダーに条件をつける IF文
ここではオーダーを送信する前に条件文を挿入します。 条件の書き方 前回までには、「新規ポジシ
-
-
第21回:パラメータ設定で変更できる数値を作る
パラメータ変数の作り方 EAはMT4側で設定できるようにした方がユーザーフレンドリーです。
-
-
第24回:iCustomでインジケータをEA化する
インジケータとiCustom 今回はインジケーターのシグナルを使って、EAを作ります。 iC