MQL言語入門|OrderSend()とOrderClose()を使いこなそう!

ordersend-orderclose

せっかくMT4(MetaTrader4)を使うのなら、あなたオリジナルのEA(Expert Advisor)やインジケーターを自作してみませんか!?

初心者向けに、MQL言語を使ったプログラミングについて解説しています。

 

今回は、OrderSend関数とOrderClose関数を解説します。

OrderSend()は、新規注文を送信する関数です。

OrderClose()は、保有ポジションの決済注文を行う関数です。

どちらもMQL言語独自の関数であり、EA(Expert Advisor)作りでは必ず使う関数です。

簡単ですから、ぜひ挑戦してみましょう。

 

スポンサーリンク

MetaEditor の起動

サンプルコード「MACD Sample.mq4」を使って説明します。

MT4の「メタクォーツ言語エディタ」をクリックします。

メタエディター起動

 

MeTaEditorが立ち上がったら、画面左側の「Navigater」内のツリーから「Experts」をダブルクリックします。

「Experts」のツリーから「MACD Sample.mq4」をダブルクリックすると、ソースコードが開きます。

MACDサンプル起動

 

スポンサーリンク

OrderSend関数

OrderSend()関数は、新規注文を送信する関数です。

正常に約定した場合はチケット番号を返し、正常に約定しなかった場合は「-1」を返します。

たくさんのパラメーターがあり、基本の成行注文や指値注文だけではなく、IFD注文やIFO注文の設定も簡単にできます。

次のように記述します。

int OrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=clrNONE);

各パラメータは以下の意味を持っています。
・symbol:通貨ペア。
・cmd:注文タイプ。
・volume:ロット数。
・price:注文価格。
・slippage:最大スリッページ幅。
・stoploss:損切り価格。
・takeprofit:利食い価格。
・comment:注文コメント。
・magic:マジックナンバー。
・expiration:注文の有効期限(指値注文のみ)。
・arrow_color:チャート上の約定矢印の色。

 

「MACD Sample.mq4」の63行目を見てみましょう。

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);

この式は、「変数”ticket”にOrderSend()の結果を代入する。」という意味になります。

変数”ticket”に、新規注文が約定した場合はチケット番号を、約定しなかった場合は「-1」を代入します。

 

新規注文の内容は以下のとおりです。

通貨ペアは現在表示しているチャートの通貨ペア(Symbol())です。

注文タイプは買い注文(OP_BUY)です。

ロット数は変数「Lots」です。変数「Lots」の値はプログラムの別の箇所で指定しています。

注文価格は現在の買値(Ask)です。つまり、成行注文です。

許容できる最大スリッページ幅は「3」Pointです。

損切り価格は「0」、つまり未設定です。

利食い価格は、現在の買値(Ask)にプログラムの別の箇所で指定している利食い幅(TakeProfit*Point)を足した価格です。

注文に付けるコメントは「macd sample」です。

マジックナンバー(注文の識別番号)は「16384」です。

約定した場合はチャートに緑色(Green)の矢印で表示します。

 

スポンサーリンク

OrderClose関数

OrderClose()は、保有中のポジションを決済する関数です。

正常に終了した場合はtrue、失敗した場合はfalseを返します。

ちょっと工夫すれば、分割決済のような複雑な決済注文も自由自在にできます。

次のように記述します。

bool OrderClose(int ticket,double lots,double price,int slippage,int color color=CLR_NONE)

各パラメータは以下の意味を持っています。
・ticket:チケット番号。
・lots:ロット数。
・price:決済価格。
・slippage:最大スリッページ幅。
・color:チャート上の決済矢印の色。

 

「MACD Sample.mq4」の105~106行目を見てみましょう。

if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());

決済注文を出す際には、事前に決済するポジションを特定しておく必要があります。

そのため、92行目のOrderSelect()で保有中のポジションの有無を確認し、98行目のOrderType()で買いポジション(OP_BUY)を選択しています。

その上でののif文ですが、「もし正常に決済できなかった場合、エラーメッセージを吐き出す」という意味になります。

if()は条件分岐で、「()内の条件を満たしたら106行目のPrint命令を実行する」という意味になります。

()の中は、OrderClose()の前に否定を意味する「!」がついていますので、「OrderClose()が失敗したら」という意味になります。

 

決済注文の内容は以下のとおりです。

チケット番号は保有中のポジションのチケット番号(OrderTicket())です。

ロット数は保有中のポジションのロット数(OrderLots())です。

決済価格は現在の売値(Bid)です。つまり、成り行き注文です。

許容できる最大スリッページ幅は「3」Pointです。

決済した場合はチャートに紫色(Violet)の矢印で表示します。

 

スポンサーリンク

まとめ

今回は、MQL言語入門として、新規注文を行うOrderSend関数と決済注文を行うOrderClose関数について解説しました。

OrderSend関数とOrderClose関数を使いこなせるようになれば、新規注文をIFD注文やIFO注文にしたり、決済注文では分割決済するなどいろいろできるようになります。

EAやインジケーターを思いどおりに自作するために、ぜひ使いこなせるようになりましょう。

コメント

タイトルとURLをコピーしました