1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【mt4/mql4】オーダー(注文)全キャンセル処理

Posted at

はじめに

システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。

目次

  1. 処理内容
  2. mql4ソースコード

処理内容

一度出した注文(指値買い、指値売りその他逆指値注文とか)をキャンセルする関数です。
もちろん約定する前の注文のみ取り消し可能です。

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

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

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

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

ですかね。

mql4ソースコード

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

test.mq4
//+------------------------------------------------------------------+
//| オーダーを全キャンセル      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分たったらとか)内に記述するのが一般的でしょう。

test.mq4
ALLOrderCancel();

皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?