はじめに
システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。
目次
処理内容
一度出した注文(指値買い、指値売りその他逆指値注文とか)をキャンセルする関数です。
もちろん約定する前の注文のみ取り消し可能です。
使いどころとしては
・オーダーを出したものの、約定せずに一定時間経ってしまい、オーダー時と状況が違ってしまった場合。にオーダーキャンセルする
・オーダー出したまま週末を跨ぎたくない。ので、オーダーキャンセルするとか
・FOMCが迫っているのでリスク回避のためにオーダーキャンセルするとか
・証拠金率が下がってきたので、リスク低減のために今出してあるオーダーをキャンセルするとか
ですかね。
mql4ソースコード
こちらが関数側のソースです。呼び出し側の前に記述されている必要があります。
基本的には使いたい条件式とセットで使う関数となります。
なお、オーダーキャンセルも取引会社(FX会社側)での受理が必要ですので他の注文と合わせて使う際にはsleepなどで少しだけでも合間時間を確保しておくと、リクエスト拒否されにくいです。
//+------------------------------------------------------------------+
//| オーダーを全キャンセル 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();
皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です