S/L・T/P注文を一括でキャンセルする方法|MT4スクリプト
S/L注文やT/P注文を簡単に取り消す方法はありますか?
FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。
このページでわかること・できること
〇S/LとT/P注文を一括で取消すスクリプトについて
〇スクリプトのダウンロード
〇スクリプトのインストールと使い方
S/LとT/P注文を一括で取消すスクリプト|DeleteOrders
MT4用スクリプトのDeleteOrdersをチャート上で実行すれば、保有ポジションに設定されたS/LとT/P注文を一括で取消すことができる。
MT4用スクリプトDeleteOrdersは保有ポジションのS/L・T/P注文のみを処理し、指値逆指値注文には影響がない。
スクリプトを実行すると、すべてのS/L・T/P注文に対して処理される。同じプラットフォームであれば通貨ペア問わずにS/L・T/P注文は取り消される。
DeleteOrdersのインストールと使用方法について
DeleteOrdersをダウンロードしたら、MT4の「Scriptsフォルダ」へファイルを移動してインストールする。
スクリプトをScriptsフォルダへ移動し、MT4を再起動すればインストールが完了する。
インストールしたスクリプトはナビゲーターのスクリプトから呼び出しが可能となる。
スクリプトの実行は「ダブルクリック」または「チャートへドラッグアンドドロップ」などで可能。
チャートへドロップする場合でも、どのチャートへドロップしてもすべての注文に対して処理がされる。
スクリプトが実行される前に、確認画面で実行を選択できる。
使用上の注意
スクリプトはすべてのS/L・T/P注文を取消す。
指値、逆指値注文に対して処理はされない。
チャートへドロップして実行した場合でも対象のチャートのみに適用されるわけではなく、すべてのチャート、注文に対して処理が実行される。
S/L、T/Pを一括で注文するスクリプトと併用する
S/L、T/Pを一括で注文するスクリプト「SetStoploss」を合わせて使用すれば損切や利食いの設定はかなり楽になる。
「SetStoploss」はすべてのオープンポジションに対してストップロスとテイクプロフィットを一括設定できるスクリプトだ。
設定値を0にすることで、ストップロスのみ注文、テイクプロフィットのみ注文と応用できる。
SetStoplossでした注文を、DeleteOrdersで取消したり、SetStoplossで再注文したりと細かな調整作業も簡単に行える。
DeleteOrdersのプログラム
//+------------------------------------------------------------------+
//| DeleteOrders.mq4 |
//| Copyright 2024, FX-Bonus.net |
//| https://fx-bonus.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, FX-Bonus.net"
#property link "https://fx-bonus.net/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// オープンポジションがあるかどうかをチェック
int ordersCount = CalculateCurrentOrders();
if(ordersCount != 0)
{
// ダイアログを表示して実行を確認
if(MessageBox("オープンポジションのS/LとT/P注文をキャンセルしますか?", "確認", MB_YESNO) == IDYES)
{
// 全てのストップロスとテイクプロフィット注文をキャンセルする
CancelAllSLnTP();
}
}
else
{
Print("オープンポジションがありません。キャンセルする注文はありません。");
}
}
int CalculateCurrentOrders()
{
int buys = 0, sells = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
break;
if(OrderType() == OP_BUY)
buys++;
else if(OrderType() == OP_SELL)
sells++;
}
if(buys > 0)
return(buys);
else
return(-sells);
}
//+------------------------------------------------------------------+
//| ストップロスとテイクプロフィット注文をキャンセルする関数 |
//+------------------------------------------------------------------+
void CancelAllSLnTP()
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
break;
// 注文を変更してストップロスとテイクプロフィットを0に設定する
bool modifyResult = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, 0);
if(!modifyResult)
{
Print("注文のストップロスとテイクプロフィットのキャンセルに失敗しました ", OrderTicket());
}
}
}
プログラムコードの概要
CalculateCurrentOrders()
関数:- 現在のオープンポジションの数を計算する関数。
OrdersTotal()
関数を使用して、全てのオープンポジション数を取得し、その中から売買の数をカウントしている。- 売買の数を返すことで、後続の処理でオープンポジションの有無を確認する。
CancelAllSLnTP()
関数:- オープンポジションの中からストップロスとテイクプロフィット注文をキャンセルする関数。
OrderSelect()
関数を使用してオープンポジションを順番に選択し、その注文に対してOrderModify()
関数を使用し S/L と T/P を0に設定している。
OnStart()
関数:- スクリプトの開始時に実行される関数。
CalculateCurrentOrders()
関数を使用してオープンポジションの数を取得し、その数が0でなければCancelAllSLnTP()
関数を呼び出して S/L と T/P をキャンセルする。OnStart()
関数:- この関数はスクリプトのメインとなる関数。スクリプトを実行するとき最初に呼び出す。
CalculateCurrentOrders()
関数を使用してオープンポジションの数を取得し、それがゼロでない場合はキャンセルの確認をユーザーに求める。MessageBox()
関数を使用して、ユーザーにキャンセルの確認を行い、IDYES
(Yesボタンがクリックされた)の場合にのみCancelAllSLnTP()
関数を呼び出して注文をキャンセルする。- オープンポジションがない場合は、単にメッセージを出力する。
CalculateCurrentOrders()
関数:- 現在のオープンポジションの数を計算する関数。
OrdersTotal()
関数を使用して全てのオープンポジションの数を取得し、買いポジションと売りポジションの数をカウントする。
CancelAllSLnTP()
関数:- オープンポジションの中からストップロスとテイクプロフィット注文をキャンセルする関数。
OrderSelect()
関数を使用してオープンポジションを順番に選択し、OrderModify()
関数を使用して S/L と T/P を0に設定する。
便利なMT4スクリプト集
-
ラウンドナンバーに自動で水平ラインを引く方法|MT4スクリプト
-
市場ごとに高値と安値を色分けする|時間帯ブレイクアウト|MT4スクリプト
-
取引履歴をすべてCSVファイルに出力するスクリプト|MT4
-
リスクゼロの損益分岐点でストップ注文するスクリプト|ブレイクイーブン
-
MT4を便利にするスクリプトまとめ
-
すべてのチャートを一括で閉じる方法|通貨ペア選択も可|MT4スクリプト
-
S/L・T/P注文を一括でキャンセルする方法|MT4スクリプト
-
ストップロス(損切り)とテイクプロフィット(利食い)を一括で注文する方法
-
ポジション全決済と売りのみ・買いのみ決済を選択できる一括決済スクリプト
-
すべて・または選択したチャートを一括で開く方法|MT4スクリプト
-
チャートのトレンドラインまたはオブジェクトすべてを一括で削除する方法
-
チャートのタイムフレーム(期間•時間枠)を一括で変更するスクリプト