ポジション全決済と売りのみ・買いのみ決済を選択できる一括決済スクリプト
ポジションを一括で決済したいのですが。
買いだけ全決済、売りだけ全決済が選べるツールはありますか?
FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。
このページでわかること・できること
〇ポジションの全決済、買いポジションの全決済、売りポジションの全決済のができるスクリプト
〇ポジション決済スクリプトをダウンロード
〇スクリプトのプログラムについて
スクリプトを使ってポジションを全決済する
MT4で全決済を可能とするスクリプト「PositionClose」は、オープンポジションの全決済と買いのみ全決済、売りのみ全決済が選択できる一括決済のツールだ。
このスクリプトを使えば簡単に「全決済」「買い全決済」「売り全決済」が可能となる。
スクリプトはこちらのリンクから無料でダウンロードが可能。
スクリプトをインストールする手順
スクリプトはデータフォルダの「Scripts」フォルダへ移動し、MT4を再起動すればインストールが完了する。
この手順にてフォルダを開き、Scriptsフォルダ内にスクリプト「PositionClose」を移動する。
PositionCloseを使った全決済の方法
スクリプトを実行すると確認画面が表示され、「全決済」か「買い全決済・売り全決済」を選択できる。
「はい」を選択した場合はオープンポジションがすべて決済される。
「いいえ」を選択した場合は「買い全決済・売り全決済」の選択画面へ移行する。
「キャンセル」を選択した場合はなにもせずスクリプトが終了する
買い全決済・売り全決済を選択した場合
最初の確認画面で買い全決済・売り全決済を選択した場合の選択肢は以下の通り。
「はい」買いポジションの全決済が実行される
「いいえ」売りポジションの全決済が実行される
「キャンセル」なにもせずスクリプトが終了する
使用上の注意
スクリプトは実行されるとすべてのポジションに対して処理をする。
複数のチャート、通貨ペアで取引している場合でも、すべてのポジションに対して決済処理が実行される。
指値・逆指値注文に対しての処理はされない。
一括決済は疑似的なもので、決済処理は1ポジションずつ連続して実行される。
そのため、ポジション決済には若干のズレが生じる。
ポジション一括決済スクリプトのプログラム
//+------------------------------------------------------------------+
//| PositionClose.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
// メッセージボックス用の定数
#define MB_YESNOCANCEL 0x00000003
#define IDYES 6
#define IDNO 7
#define IDCANCEL 2
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// 確認メッセージを表示
int answer1 = MessageBox("すべてのポジションを決済しますか?\n\n「はい」全決済\n「いいえ」買い全決済または売り全決済の選択へ\n「キャンセル」なにもしない", "全決済を選択", MB_YESNOCANCEL);
// ユーザーの選択に応じて処理を行う
switch(answer1)
{
case IDYES:
CloseAllPositions();
break;
case IDNO:
ShowSecondConfirmation();
break;
case IDCANCEL:
// 何もしないで終了
break;
}
}
// すべてのオープンポジションを決済する関数
void CloseAllPositions()
{
int totalPositions = OrdersTotal(); // オープンポジションの数を取得
for(int i = totalPositions - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) == true)
{
// クローズの結果を格納する変数を初期化
bool closeResult = false;
// オーダーのタイプに応じて決済
if(OrderType() == OP_BUY)
{
closeResult = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, clrWhite);
}
else if(OrderType() == OP_SELL)
{
closeResult = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, clrWhite);
}
// クローズの結果をチェック
if(closeResult == true)
{
Print("ポジションをクローズしました。");
}
else
{
Print("ポジションのクローズに失敗しました。エラーコード: ", GetLastError());
}
}
}
}
// 2番目の確認画面を表示する関数
void ShowSecondConfirmation()
{
int answer2 = MessageBox("買い全決済または売り全決済しますか?\n\n「はい」買いポジション全決済\n「いいえ」売りポジション全決済\n「キャンセル」なにもしない\n", "売り買い決済を選択", MB_YESNOCANCEL);
switch(answer2)
{
case IDYES:
CloseBuyPositions(); // 買いポジションをすべて決済する関数を呼び出す
break;
case IDNO:
CloseSellPositions(); // 売りポジションをすべて決済する関数を呼び出す
break;
case IDCANCEL:
// 何もしないで終了
break;
}
}
// 買いポジションをすべて決済する関数
void CloseBuyPositions()
{
int totalPositions = OrdersTotal(); // オープンポジションの数を取得
for(int i = totalPositions - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) == true)
{
// 購入ポジションのみを決済
if(OrderType() == OP_BUY)
{
bool closeResult = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, clrWhite);
if(closeResult == true)
{
Print("買いポジションをクローズしました。");
}
else
{
Print("買いポジションのクローズに失敗しました。エラーコード: ", GetLastError());
}
}
}
}
}
// 売りポジションをすべて決済する関数
void CloseSellPositions()
{
int totalPositions = OrdersTotal(); // オープンポジションの数を取得
for(int i = totalPositions - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) == true)
{
// 売却ポジションのみを決済
if(OrderType() == OP_SELL)
{
bool closeResult = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, clrWhite);
if(closeResult == true)
{
Print("売りポジションをクローズしました。");
}
else
{
Print("売りポジションのクローズに失敗しました。エラーコード: ", GetLastError());
}
}
}
}
}
プログラムの詳細を解説
OnStart() 関数:
スクリプトのメイン関数であり、スクリプトが実行されるときに最初に呼び出される。
ユーザーに対してポジションのクローズを確認するメッセージボックスを表示する。
ユーザーの選択に応じて、全てのポジションをクローズするか、買いポジションまたは売りポジションのクローズを選択するか、または何もせず終了する。
CloseAllPositions() 関数:
OnStart() 関数内で全てのポジションをクローズするために呼び出される。
OrdersTotal() 関数を使用してオープンポジションの数を取得し、それらのポジションをループで処理する。
ポジションのタイプに応じて適切な方法でクローズする。
買いポジションは現在の売り価格で、売りポジションは現在の買い価格でクローズされる。
ShowSecondConfirmation() 関数:
ユーザーが “いいえ” を選択した場合に呼び出され、買いポジションまたは売りポジションのクローズを選択するメッセージボックスを表示する。
CloseBuyPositions() 関数:
ShowSecondConfirmation() 関数内で買いポジションをクローズするために呼び出される。
買いポジションのみを処理し、適切な価格でクローズする。
CloseSellPositions() 関数:
ShowSecondConfirmation() 関数内で売りポジションをクローズするために呼び出される。
売りポジションのみを処理し、適切な価格でクローズする。
その他の便利なMT4用スクリプト
-
海外FXのEA_MT4
ラウンドナンバーに自動で水平ラインを引く方法|MT4スクリプト
-
海外FXのEA_MT4
MT4|市場ごとに高値と安値を色分けする|時間帯ブレイクアウト
-
海外FXのEA_MT4
取引履歴をすべてCSVファイルに出力するスクリプト|MT4
-
海外FXのEA_MT4
リスクゼロの損益分岐点でストップ注文するスクリプト|ブレイクイーブン
-
海外FXのEA_MT4
MT4を便利にするスクリプトまとめ
-
海外FXのEA_MT4
すべてのチャートを一括で閉じる方法|通貨ペア選択も可|MT4スクリプト
-
海外FXのEA_MT4
S/L・T/P注文を一括でキャンセルする方法|MT4スクリプト
-
海外FXのEA_MT4
ストップロス(損切り)とテイクプロフィット(利食い)を一括で注文する方法
-
海外FXのEA_MT4
ポジション全決済と売りのみ・買いのみ決済を選択できる一括決済スクリプト
-
海外FXのEA_MT4
すべて・または選択したチャートを一括で開く方法|MT4スクリプト
-
海外FXのEA_MT4
チャートのトレンドラインまたはオブジェクトすべてを一括で削除する方法
-
海外FXのEA_MT4
チャートのタイムフレーム(期間•時間枠)を一括で変更するスクリプト