【MQLプログラミング基礎】条件分岐をif文で書いてみよう!プログラム例あり

【初級編】MQLプログラミング基礎
朝日奈りさ
朝日奈りさ

条件分岐はプログラミングの基礎中の基礎です。しっかり理解しましょう!

条件分岐とは?

プログラムは自分で考えることができません。

そのため、プログラムを実行するかしないかの判断をすることができず、すべて実行してしまいます。

そこで「条件分岐」の出番です。

プログラムを実行させるのか、させないのかを、プログラムに判断をさせるのが、「条件分岐」です。

これは自動売買を作るために、必須の概念ですので、しっかり理解しましょう。

 

if文の書き方

if文は「もし〇〇が正しいなら、××する」というイメージでプログラミングします。

〇〇は「条件式」と呼ばれ、「AよりBが大きい」、「AとBは等しい」などの条件を記述します。

一般的には下記のようにプログラミングします。

if(条件式) {
// 条件式が正しい(true)の場合、実行する
}

if()の条件式が正しい(true)なら{}内の処理を実行します。

逆に誤り(false)なら{}内の処理を実行しません。

プログラム例

int condition1 = 1;  //条件1(int型)
int condition2 = 2;  //条件2(int型)

//if文の結果を代入するための変数を宣言
//ついでにfalseで初期化
   string Equal = "false"; 

//if文を実行
//条件式(イコール)の場合
   if(condition1 == condition2)
     {
      Equal = "true";    //実行されない
     }


//結果:Equalはfalse

上記のプログラムの場合、condition1とcondition2を比較しています。

条件式は10行目の「condition1 == condition2」です。

condition1は「1」の値が格納されていて、condition2は「2」の値が格納されています。

そのため、「1 = 2」という条件は誤りであり、if文の{}内は実行されません。

結果、Equal は false のままになります。

 

if else文の書き方

if else文は「もし〇〇が正しいなら、××する。誤りなら△△する」というイメージでプログラミングします。

「もし〇〇が正しいなら、××する。」はif文で記述し、「誤りなら△△する」はelse文で記述します。

一般的には以下のように記述します。

if(条件式) {
// 条件式が正しい(true)の場合、実行する
} else {
// 条件式が誤り(false)の場合、実行する
}

if文が正しい(true)なら、if文の{}内のプログラムを実行します。

if文が誤り(false)なら、if文の{}内のプログラムを飛ばし、else文の{}内のプログラムを実行します。

プログラム例

int condition1 = 1;  //条件1(int型)
int condition2 = 2;  //条件2(int型)

//if文の結果を代入するための変数を宣言
//ついでにfalseで初期化
   string Equal = "false"; 

//if文を実行
//条件式(イコール)の場合
   if(condition1 == condition2)
     {
      Equal = "true";   //実行されない
     }
   else
     {
      Equal = "false";   //実行される
     }


//結果:Equalはfalse

if文のプログラム例と結果は変わりませんが、こちらはelse文が実行されています。

if文の条件式が誤り(false)であるため、else文が実行されます。

 

条件式の種類と使い方

条件式は以下の種類があります。

注意点としては、イコールは2つ記述する必要があるということです。

2つ記述する理由は、イコールが1つだと「代入」と間違えてしまうためです。

いずれにしても、以下の条件式は重要であるため、覚えておくと良いでしょう。

条件式意味
A == BAとBは等しい
A != BAとBは等しくない
表1:等号の条件式
条件式意味
A < BAよりBの方が大きい
A <= BAよりBの方が大きい。または同じ
A > BAよりBの方が小さい
A >= BAよりBの方がい小さい。または同じ
表2:不等号の条件式
条件式意味
A || BOR(AとBの条件式が、どちらか正しいなら実行)
A && BAND(AとBの条件式が、両方正しいなら実行)
表3:論理演算子の条件式

 

プログラム例

if else文を網羅したプログラム例です。

EAにコピペして使えますし、ダウンロードすることもできます。

//+------------------------------------------------------------------+
//|                                                 SampleMQL_if.mq4 |
//|                                    Copyright 2020, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, 朝日奈りさFXchannel"
#property link      "https://mql-programing.com/"
#property version   "1.00"
#property strict

//条件の入力を受け付ける
input int condition1 = 1;  //条件1(int型)
input int condition2 = 2;  //条件2(int型)

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//if文の結果を代入するための変数を宣言
//ついでにfalseで初期化
   string Equal = "false";
   string NotEqual = "false";
   string Greater = "false";
   string GreaterEqual = "false";
   string Smaller = "false";
   string SmallerEqual = "false";
   string Or = "false";
   string And = "false";

//if文を実行
//条件式(イコール)の場合
   if(condition1 == condition2)
     {
      Equal = "true";
     }
   else
     {
      Equal = "false";
     }

//条件式(ノットイコール)の場合
   if(condition1 != condition2)
     {
      NotEqual = "true";
     }
   else
     {
      NotEqual = "false";
     }

//条件式(大なり)の場合
   if(condition1 < condition2)
     {
      Greater = "true";
     }
   else
     {
      Greater = "false";
     }

//条件式(大なりイコール)の場合
   if(condition1 <= condition2)
     {
      GreaterEqual = "true";
     }
   else
     {
      GreaterEqual = "false";
     }

//条件式(小なり)の場合
   if(condition1 > condition2)
     {
      Smaller = "true";
     }
   else
     {
      Smaller = "false";
     }

//条件式(小なりイコール)の場合
   if(condition1 >= condition2)
     {
      SmallerEqual = "true";
     }
   else
     {
      SmallerEqual = "false";
     }

//条件式(OR)の場合
   if(condition1 == condition2 || condition1 > condition2)
     {
      Or = "true";
     }
   else
     {
      Or = "false";
     }

//条件式(AND)の場合
   if(condition1 == condition2 && condition1 > condition2)
     {
      And = "true";
     }
   else
     {
      And = "false";
     }

//チャート上に表示する
   Comment(
      "Equal : ",Equal,"\n",
      "NotEqual : ",NotEqual,"\n",
      "Greater : ",Greater,"\n",
      "GreaterEqual : ",GreaterEqual,"\n",
      "Smaller : ",Smaller,"\n",
      "SmallerEqual : ",SmallerEqual,"\n",
      "Or : ",Or,"\n",
      "And : ",And,"\n"
   );

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+

実行結果は以下のようになります。

また、条件1、条件2は外部入力を受け付けておりますので、パラメータを変更してみると面白いかもしれません。

 

まとめ

MQLプログラミングの基礎として、if else文を解説しました。

条件式が正しいなら、if文の{}内のプログラムを実行し、誤りならelse文の{}内のプログラムを実行します。

条件分岐は必須の概念なので、使いこなせるようになると良いでしょう。

サンプルプログラムも配布しておりますので、内容を見たり、パラメータを変えたりして、楽しみながら勉強してください!

 

コメント