見出し画像

MT4/MQLソースサンプル:オーダーを全キャンセル

処理内容


一度出した注文(買い、売りその他指値注文とか)をキャンセルする関数です。


使いどころとしては
・オーダーを出したものの、約定せずに一定時間経ってしまい、オーダー時と状況が違ってしまった場合。にオーダーキャンセルする

・オーダー出したまま週末を跨ぎたくない。ので、オーダーキャンセルするとか

・FOMCが迫っているのでリスク回避のためにオーダーキャンセルするとか

・証拠金率が下がってきたので、リスク低減のために今出してあるオーダーをキャンセルするとか


ですかね。
なので基本的には使いたい条件式とセットで使う関数となります。
なお、オーダーキャンセルも取引会社(FX会社側)での受理が必要ですので他の注文と合わせて使う際にはsleepなどで少しだけでも合間時間を確保しておくと、リクエスト拒否されにくいです。

使い方

ALLOrderCancel();
と書くだけ

■引数
なし

■戻り値
なし

無料ソースコード

■関数側のコードです。
呼び出し側の前に記述されている必要があります。

//+------------------------------------------------------------------+
//| オーダーを全キャンセル      ALL0rderCancel
//|  code by KOUSHIROU
//|  https://note.com/mt4_coder                 
//+------------------------------------------------------------------+
void ALLOrderCancel()
 {
  int total0Dcnt = OrdersTotal();
  if(total0Dcnt > 0)
    {
     for(int i = total0Dcnt -1; i >= 0; i--)
       {
        bool selected = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if(selected)
          {
           int type = OrderType();
           switch(type)
             {
              case OP_BUY:
                 OrderDelete(OrderTicket());
                 break;
              case OP_SELL:
                 OrderDelete(OrderTicket());
                 break;
              case OP_BUYLIMIT:
              case OP_BUYSTOP:
                 OrderDelete(OrderTicket());
                 break;
              case OP_SELLLIMIT:
              case OP_SELLSTOP:
                 OrderDelete(OrderTicket());
                 break;
             }
           OrderPrint();
          }
       }
    }
 }
//+------------------------------------------------------------------+

■呼び出し側のコードです。
呼び出したいタイミングに合わせてOnTick()、OnInit()とかOnTimer()の中で記述してみてください。何らかの条件(if文とかで注文から10分たったらとか)内に記述するのが一般的でしょう。


ALLOrderCancel();

以上でございます。
間違い・アドバイスなどあればご連絡くださいませ。

この記事が気に入ったらサポートをしてみませんか?