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();
以上でございます。
間違い・アドバイスなどあればご連絡くださいませ。
この記事が気に入ったらサポートをしてみませんか?