MQL if関数
if関数による条件分岐
ここまでで、売買注文を出す準備が整いました。
売買注文を出すタイミングは、もし移動平均線がゴールデンクロスをしたら買い、デッドクロスをしたら売り、という条件になります。
「もし〜ならば〜〜」という命令は「条件分岐」になりますので、「if関数」を使います。
ゴールデンクロスする時の必要条件は2つあって、下図の状態でなので「@>BかつA<C」でした。
これを変数名に置き換えると、「Short1>Long1かつShort2<Long2」となります。
「かつ」はMQLで「&&」と表しますから、「if関数」と併せて考えてみると、前半部分は、「if(Short1>Long1&&Short2<Long2)」となります。
OrderSend関数
「ゴールデンクロスしたならば、買い注文を出す」という条件の、前半部分ができました。あとは「買い注文を出す」という内容なので、注文を出す命令文「OrderSend関数」を後半部分に入れます。
OrderSend関数は、以下の11個のパラメーターを取ります。
OrderSend(@string symbol,Aint cmd,Bdouble volume,Cdouble price,Dint slippage,Edouble stoploss,Fdouble takeprofit,Gstring vomment,Hint magic,Idatetime expiration,Jcolor arrow_color)
OrderSend(@通貨ペア,A注文種類,Bロット数,C注文価格,D許容スリッページ,E逆指値注文,F指値注文,Gコメント,Hマジックナンバー,I有効期限,J色)
パラメーターを1つずつ見ていきましょう。
@注文を出す通貨ペアは現在表示のものになるので「Symbol()」とします。
A成行で買い注文を出すので「OP_BUY」です。
B取引量は1万通貨とするので「0.1」になります。
C注文価格は現在の買値なので「Ask」です。
Dスリッページは一般的な数値である「3」にしておきます。
E逆指値でストップロス価格を決めます。ストップロス価格は外部変数の「Stoploss」で、初期値は1000にしていました。この「Stoploss」に「Point」を掛けるのですが、これはPoint関数といって、通貨ペア別に値を一定に保つ役割を果たしています。
例えばドル円が「100.00」→「100.05」と動いた場合と、ユーロドルが「1.3000」→「1.3005」と動いた場合では、ともに5pipsの値動きになりますが、両者の桁数が違っています。Point関数はこれを調整し、桁が違っても「5pips」と認識させるための関数です。
逆指値は買値から下へ100銭のところなので、「Ask−(Stoploss*Point)」となります。「*」はかけ算「×」のことです。
F利益確定するための指値注文です。現在の買値から上へ50銭のところなので、「Ask+(Profit*Point)」となります。
Gコメントは「BUY」としました。
H今回稼働するEAは他にはないので「0」としました。(詳しくはコラム参照)
I有効期限は特に指定しないので「0」です。
Jチャート上に表示される矢印の色は青「Blue」にしました。
以上は「ゴールデンクロス時の買い」です。もうひとつの売買ポイントである「デッドクロス時の売り」は、すべてを逆にしますif条件分の不等号を逆にし、「Ask」を「Bid」に、利食いと損切りポイントは「Ask」を「Bid」にしたあとそれぞれの加減を逆にします。