せっかくMT4(MetaTrader4)を使うなら、あなたオリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか!?
初心者向けに、MQL4言語を使ったプログラミングについて解説しています。
今回は、if文とfor文を解説します。
制御文であるif文とfor文を使いこなすことが出来れば、思いどおりにEA(Expert Advisor)やインジケーターを自作できるようになります。
一見難しそうに感じるかもしれませんが、実は超簡単ですから、ぜひ挑戦してみましょう♪
MetaEditor の起動
サンプルコード「MACD Sample.mq4」を使って説明します。
MT4の「メタクォーツ言語エディタ」をクリックし、MetaEditorを起動しましょう。
MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。
「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。
if文(条件分岐処理)
if文は、「もし○○なら××する」という意味で使われます。
○○は、AはBより大きい(小さい)、AはBと等しい(等しくない)などの条件です。
以下のように記述します。
if(条件式) { // 条件式がtrueの場合に実行する処理 }
条件式が「正(true)」であれば、{ }内の処理を行います。
条件式が「誤(false)」であれば、{ }内の処理をとばします。
「MACD Sample.mq4」の50行目からのif文を見てみましょう。
total=OrdersTotal(); if(total<1) {
まず、変数totalに注文数を代入します。※OrdersTotal()は注文数を返す関数です。
もし、「total(注文数)が1より小さい」という条件式が「true」なら、{ }の処理を行います。
という意味になります。
if else文
if else文は、「もし○○なら××する、そうじゃなければ△△する」という意味で使われます。
elseの後には、if文の条件が「false」の場合に行う処理を記述します。
以下のように記述します。
if(条件式) { // 条件式がtrueの場合に実行する処理 } else { // 条件式がfalseの場合に実行する処理 }
条件式が「true」であれば、ifの後の{ }内の処理を行います。
条件式が「false」であれば、ifの後の{ }内の処理をとばし、elseの後の{ }内の処理を行います。
「MACD Sample.mq4」の63行目からのif else文を見てみましょう。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return;
変数ticketに、OrderSend()関数の値を代入します。※OrderSend()は注文を出す関数です。約定(true)ならチケット番号を、失敗(false)なら-1を返します。
もし、「ticketが0より大きい」という条件式が「true(=約定成功)」なら、ifの後の{ }内の処理(約定メッセージを吐き出す)を行います。
もし、「false(=約定失敗)」なら、ifの後の{ }内の処理をとばし、elseの後の{ }内の処理(エラーメッセージを吐き出す)を行います。
という意味になります。
for文(ループ処理)
for文は、指定した回数だけ処理を繰り返すときに使われます。
以下のように記述します。
for (初期化式; 条件式; 変化式) { // 条件式がtrueの場合に実行する処理 }
初期化式は、最初に一度だけ実行される式です。主にfor文で使用する変数の初期化に使用します。
条件式は、ループする度に評価される式です。「true」のときに{ }内の処理を行います。
変化式は、ループ処理が終わる度に実行される式です。条件式で使用している変数の値を変化させます。
「MACD Sample.mq4」の91行目からのfor文を見てみましょう。
for(cnt=0;cnt<total;cnt++) {
初期化式では、最初に一度だけ変数cntを初期化(0を代入)します。
条件式では、ループする度に、cntが変数total(=注文数)より小さいかを評価し、小さければ{ }の処理を行います。
変化式では、{ }内の処理が終わる度に、cntに+1します。※「++」と「+1」は同じ意味です。
cntがtotal以上になるまで条件式と変化式を繰り返し、cntがtotal以上になったらfor文を終わります。
という意味になります。
条件式の種類
if文やfor文で使われる条件式は、以下のような、等号、不等号、論理演算子などを使って記述します。
- A == B : AとBは等しい。
- A != B : AとBは等しくない。
2.不等号
- A < B : AはBより小さい。
- A <= B : AはB以下。
- A > B : AはBより大きい。
- A >= B : AはB以上。
3.論理演算子
- A || B : OR(※ABのどちらか一方が「true」であれば)
- A && B : AND(※ABどちらも「true」の場合のみ)
まとめ
今回は、MQL4言語入門として、代表的な制御文であるif文とfor文について解説しました。
制御文であるif文とfor文は、EAやインジケーターを自作するためには必須の構文ですから、ぜひ使いこなせるようになりましょう。