【MQL4関数】OrderClose関数の使い方!決済注文の出し方とサンプルプログラム

【中級編】MQLプログラムの読み方・書き方
朝日奈りさ
朝日奈りさ

自動売買にポジションを決済させるにはどうしたら良いの?

OrderClose関数とは

条件に当てはまったときに、ポジションを自動的に決済(クローズ)して欲しいですよね!

そこで、OrderClose関数を使います。

 

OrderClose関数とは、ポジションを1つ選択し、決済注文を出す関数です。

実行させることで、FX会社に決済注文を出してくれます。

決済できるポジションの種類は、以下の通りです。

  • 保有ポジション
  • 指値ポジション
  • 逆指値ポジション

 

つまり、注文を出したポジションであれば、どんなポジションでも決済できます。

OrderClose関数をプログラムに組み込んで、自動的にポジションを決済させてみましょう。

 

OrderClose関数の書き方

OrderClose関数の使い方は、基本的な関数と同じです。

関数をマスターしていない方はこちらの記事が参考になります。

 

基本的な書き方

OrderClose関数の基本的な書き方は以下の通りです。

分かりやすいように、引数を省略しています。

bool orderClose = OrderClose( ①, ②, ③, ④, ⑤);

 

このように、返り値は bool型で、引数は5つあります。

まずは返り値から見ていきましょう。

 

返り値(戻り値)

OrderClose関数の返り値は bool型です。

true」または「false」が返ってきます。

数値にすると「1」または「0」です。

true 、false が返ってくる条件は以下の通りです。

  • true : 決済注文がFX会社に受理されたとき
  • false : 決済注文が失敗したとき

 

もし falseが返ってきた場合、ポジションは決済されていないので、再度 OrderClose関数を実行する必要があります。

ですが、99%以上は正常に受理されるので、そこまで気にする必要はありません。

もし決済に失敗していた場合は、手動で決済しましょう。

 

引数

OrderClose関数の引数は5つあります。

まずは、一覧でザッと見てみましょう。

番号データ型引数名内容
intticket決済するポジションのチケット番号
doublelots決済するロット数
doubleprice希望する決済価格
intslippageスリッページの許容量(単位0.1pips)
colorarrow_colorチャート上の決済情報の色を設定

 

それぞれ詳しく見ていきながら、一緒に作っていきましょう。

 

① ticket

ticket には、決済したいポジションのチケット番号を入力します。

チケット番号を直接入力しても良いのですが、OrderSelect関数でポジションを選択している場合、OrderTicket関数を使うことができます。

OrderTicket関数は、選択しているポジションのチケット番号を返す関数です。

チケット番号を覚えておく必要がなくなるため、簡単に書くことができます。

bool orderClose = OrderClose( OrderTicket(), ②, ③, ④, ⑤);

 

② lots

lots には、決済したいポジションのロット数を入力します。

こちらも OrderSelect関数でポジションを選択している場合、OrderLots関数という便利な関数が使えるようになりますので、OrderLots関数を利用すると良いでしょう。

OrderLots関数は、ポジションのロット数を返す関数です。

bool orderClose = OrderClose( OrderTicket(), OrderLots(), ③, ④, ⑤);

 

③ price

price には、決済する価格を入力します。

こちらも同様に、OrderSelect関数でポジションを選択している場合、OrderClosePrice関数が使えますので、OrderClosePrice関数を使いましょう。

OrderClosePrice関数は、現在の価格を返す関数です。

bool orderClose = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), ④, ⑤);

 

④ slippage

slippage には、スリッページを入力します。

単位は0.1pipisです。

FXでは、希望する決済価格と、実際の決済価格がズレることがあります。

そのときに許容するズレ幅を入力してください。

ここでは、「10」を入力します。

bool orderClose = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 10, ⑤);

 

⑤ arrow_color

arrow_color には、決済したときにチャート上に表示される矢印の色を設定します。

「矢印が表示されるのが邪魔」という方は、「clrNONE」と入力しましょう。

clrNONE にすることで、矢印が透明になり、チャート上に見えなくなります。

bool orderClose = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 10, clrNONE);

 

OrderClose関数の具体的な使い方(サンプルあり)

ここまでは、OrderClose関数の基本的な書き方を解説しました。

ここからは、もっと具体的に OrderClose関数の使い方を見ていきましょう。

 

OrderClose関数は、事前にポジションを選択する必要があるため、OrderSelect関数と組み合わせて使われることが多いです。

例えば、以下のようなプログラムです。

//保有ポジションを一つずつチェックしていく
    for(int i = OrdersTotal() - 1; i >= 0; i--)
       {

        //保有ポジションを一つ選択
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {

            //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
            if(OrderSymbol() == Symbol())
               {

                //選択したポジションが、この自動売買のマジックナンバーと同じかチェック
                if(OrderMagicNumber() == magicNumber)
                   {

                      //ポジションを決済
                      bool orderClose = OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 10, clrNONE);

                   }
               }
           }
       }

 

 

OrderSelect関数以外にも、注文系の関数をたくさん使っています。

使っている関数の一覧は以下の通りです。

全て OrderClose関数を使うために必要な関数です。

 

これらの関数は MT4に標準装備されているので、書くだけで使えます。

ちなみに上記のプログラムを実行すると、全てのポジションが決済されてしまうので、if文で適宜条件を付け加えてください。

 

まとめ

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

基本的に OrderSelect関数と組み合わせて使います。

他にも便利な関数を使うことで、OrderClose関数を簡単に使うことができます。

サンプルプログラムに条件を付け加えて、検証してみてください。