条件分岐をマスターする|MQL入門(4回目)

2018年11月8日

条件分岐

今回は、「条件分岐」について学んでいきます。

プログラムをやっていくうえでとても重要な項目なので、しっかり覚えていきましょう。

第3回目までを確認いただいている前提で進めますので、まだ見ていない方は先にご確認いただければと思います。

初心者でも分かる!MT4/MT5のプログラミング入門|MQL入門(1回目)

MT4/MT5のコメントと変数について|MQL入門(2回目)

MT4/MT5で数値の計算をしてみる|MQL入門(3回目)

条件分岐の基本

条件の判定方法

条件を判定するにはifを使います。

( )内に条件を書いて、{ }内に条件が成立したときの処理を書きます。

if (条件) {
条件が成立したときの処理
}

 

プログラムの準備

いつものようにMetaEditorを開いて「Practice003」を作成しましょう。

作成したら以下のようにプログラムを変更してください。

 

数値を比較してみる

条件が成立した場合

プログラムをチャートに適用してみると、以下のように「n=5です。」と出力されたかと思います。

if分による条件分岐確認

 

if~について、実行したプログラムの例で具体的に説明します。

if (n == 5) { }

もし( )内の条件が成立したら、{ }の中を実行するということです。

 

「==」は、左辺と右辺が等しければtrueを返し、異なればfalseを返します。
trueであれば条件が成立したとみなされます。

代入の時は「=」で、条件判定では「==」となりますので間違えないように注意しましょう。

 

今回のケースでは、左辺(n)と右辺5を比較して等しいのでTrueとなります。

 

条件が成立したので、{ }内のprintfが実行されました。

 

条件が成立しなかった場合

試しに「int n = 5;」という部分を、「int n = 4;」に変更してコンパイルしてみてください。

今度は、何も表示されなかったと思います。

elseの確認

 

条件が成立しなかった場合の処理

条件が成立しなかった場合の処理を、「else { } 」の中に書くことができます。

プログラムを以下に変更してコンパイルしましょう。

ifの中身は実行されず、elseの中身が実行されたことが分かると思います。

 

条件が複数ある場合

複数条件の判定方法

else ifを使います。

if (1つ目の条件) {
1つ目の条件が成立したときの処理
} else if (2つ目の条件) {
2つ目の条件が成立したときの処理
} else {
どの条件も成立しなかったときの処理
}
else ifはいくらでも追加できるので、上記に加えて「3つ目の処理、4つ目の処理・・・」と続けることも可能です。

 

プログラムの実行

以下のようにプログラムを変更してコンパイルしてみましょう。

n=4なのでelse ifの部分に入り、「n=4の時に実行する処理」と出力されました。

複数条件の確認

 

比較演算子での条件判定

比較は「==」のように、「左辺と右辺が等しい」という判定だけではなく、他の比較演算子を使うこともできます。

ifの中で利用可能な比較演算子をまとめました。

プログラム表示 意味
> 左辺が右辺より大きい
>= 左辺が右辺以上
< 左辺が右辺より小さい
<= 左辺が右辺以下
!= 右辺と左辺が異なる

 

次に、実際にプログラムを書いてそれぞれの内容を確認してみましょう。

結果は以下のようになりました。

比較演算子の確認

n=4なので、正しい結果となっています。

  • n > 3・・・成立
  • n >= 3・・・成立
  • n < 3・・・成立しない
  • n <= 3・・・成立しない
  • n != 3・・・成立

 

気付いた方もいるかもしれませんが、今回のプログラムではif( )の後ろに、{ }がありません。

条件が成立したときに実行する行が1行の時は、{ }なしで書くことも可能です。

 

条件が同時に成立した場合

条件が同時に成立することを、「&&」を使って表現することができます。

例えば、値が3と8の間にある場合という条件を考えてみましょう。

イメージでは「3 <= n <= 8」のように書けそうですが、プログラムではこのような書き方ができません。

if (n >= 3 && n <= 8)このように、「nが3以上、かつnが8以下」と書きます。

「かつ」の部分を「&&」で表現します。

プログラムを書いて実行してみましょう。

n=2は「8以下ですが、3以上ではない」ので何も表示されません。

AかつBのチェック1

 

次はn=9で実行してみてください。

n=9は「3以上ですが、8以下ではない」ので何も表示されません。

AかつBのチェック2

 

最後はn=5で実行してください。

n=5は「3以上であり、8以下」なので条件が成立しています。

AかつBのチェック3

 

条件のどちらかが成立した場合

条件のどちらかが成立したことを、「||」を使って表現することができます。

早速プログラムを書いて実行してみましょう。

n=2は「3でもなく、8でもない」ので何も表示されません。

AまたはBのチェック1

 

次はn=3として実行してみましょう。

n=3は条件を満たしているので、条件成立時のメッセージが表示されます。

AまたはBのチェック2

 

最後にn=8で実行します。

n=8は条件を満たしているので、条件成立時のメッセージが表示されます。

AまたはBのチェック3

 

 

if以外の条件分岐

switchという構文を使ってifと同じように条件分岐することが可能です。

そこまで需要がある構文ではないので、ここではプログラムのみ載せておきます。

基本的にはifで事足りますが、大量の条件分岐をするときにswitchの方が見やすいことがあります。

 

 

実戦ではどのように使われるか

「FXのチャート分析で、ローソク足が3本連続で上昇したかを判定したい。」

MT4が持っている値をそのまま使えるので、ifと組み合わせれば以下のように簡単に判定できます。

※Close[3]やOpen[3]は、MT5では少しプログラムの書き方が異なりますが、共通ライブラリを使用すると同じプログラムで動作します。

現時点ではまだ詳しく説明しませんが、この他にも「移動平均線のゴールデンクロス判定」や、「買われ過ぎ、売られ過ぎ判定」など、全て条件分岐で判断可能です。

 

 

まとめ

説明が少し細かくなりすぎてしまいましたが、ifはそれだけ重要な項目です。

もし理解しきれていない場合は何回か読んでみてください。

最低限ここまでクリアできれば、自動売買のプログラムを書くことができますので。

次回はループ処理をマスターする|MQL入門(5回目)です。

今回の記事のまとめ

  • ifを使って条件が成立した場合、しなかった場合の処理を書ける
  • else ifを使って条件をどんどん増やすことができる
  • &&や||で成立条件を増やすことができる
  • 様々な比較演算子を使うことができる

 

自動売買入門のまとめは以下をご参照ください