条件分岐はプログラミングの基礎中の基礎です。しっかり理解しましょう!
条件分岐とは?
プログラムは自分で考えることができません。
そのため、プログラムを実行するかしないかの判断をすることができず、すべて実行してしまいます。
そこで「条件分岐」の出番です。
プログラムを実行させるのか、させないのかを、プログラムに判断をさせるのが、「条件分岐」です。
これは自動売買を作るために、必須の概念ですので、しっかり理解しましょう。
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 == B | AとBは等しい |
A != B | AとBは等しくない |
条件式 | 意味 |
A < B | AよりBの方が大きい |
A <= B | AよりBの方が大きい。または同じ |
A > B | AよりBの方が小さい |
A >= B | AよりBの方がい小さい。または同じ |
条件式 | 意味 |
A || B | OR(AとBの条件式が、どちらか正しいなら実行) |
A && B | AND(AとBの条件式が、両方正しいなら実行) |
プログラム例
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文の{}内のプログラムを実行します。
条件分岐は必須の概念なので、使いこなせるようになると良いでしょう。
サンプルプログラムも配布しておりますので、内容を見たり、パラメータを変えたりして、楽しみながら勉強してください!
コメント