【無料DL可】MT4一括決済ツール|全ポジション・売り買いを安全にスクリプトで一括処理

一括決済アイキャッチ

MT4で一括決済ができるスクリプトを無料で配布中!初心者でも使いやすく、手順も簡単です。

⬇️無料で今すぐダウンロード

※インストール手順・使い方は記事内で詳しく解説しています

目次

MT4で一括決済をしたい方へ|この記事でわかること

MT4で複数ポジションを持っているとき、「一瞬で全ての注文を決済したい」「買いだけ・売りだけをまとめて決済したい」と感じたことはありませんか?

しかし、標準のMT4機能ではこれらをワンクリックで実行することができず、リスク回避のタイミングで対応が遅れてしまうこともあります。

本記事では、こうした悩みを解消するために開発された、**無料で使える一括決済スクリプト「PositionClose」**の使い方を詳しく解説します。

この記事で得られる情報は以下の通りです:

  • MT4で全ポジション・買い・売りを一括決済できる無料スクリプトの紹介
  • スクリプトの導入方法から使い方、注意点まで完全ガイド
  • 初心者でも安心して使えるよう、安全性やリスクに関する解説
  • 他の一括決済ツールとの違いと使い分けのポイント
  • スクリプトのソースコードを公開し、カスタマイズや学習にも対応

この記事を読むことで、誰でも簡単に「MT4の一括決済作業」を効率化し、トレードリスクを減らすことができます。

全ポジションの一括決済

MT4で複数の通貨ペアやポジションを持っている場合、それらを一括ですべて決済する機能は標準では用意されていません。このため、急なニュースや価格変動が起こった際に、ひとつひとつ手動でポジションを閉じるのは大きなリスクとなります。

PositionCloseスクリプトを使えば、「はい(YES)」を選ぶだけで、すべてのオープンポジションをまとめて決済することが可能です。通貨ペアやマジックナンバーに関係なく、MT4上で保持している全ポジションに対して決済処理が行われます。

PositionCloseの確認画面1 (1)
PositionCloseの確認画面

この機能は特に、以下のようなケースで有効です:

  • 急な指標発表で全てのポジションを閉じたいとき
  • 相場が急変し、保有中のリスクを即時回避したいとき
  • 複数EAや手動トレードのポジションをまとめて処理したいとき

ただし、一括決済は1ポジションずつ順にクローズ処理を行うため、処理に若干のラグが発生する点に注意が必要です。また、指値注文・逆指値注文には影響を与えませんので、必要に応じて別途手動で削除しましょう。

※特定の通貨ペアやポジションタイプのみを対象にしたい場合は、スクリプトのカスタマイズが必要です(後述の「ソースコード解説」セクションを参照してください)。

買いポジション・売りポジションだけの選択決済

PositionCloseスクリプトでは、「すべてのポジションを一括決済する」だけでなく、「買いだけ」「売りだけ」のポジションを選んで一括決済することも可能です。

スクリプトを実行したあと、最初の確認ダイアログで「いいえ(NO)」を選択すると、次に「買いポジションを全て決済しますか?」というウィンドウが表示されます。

PositionCloseの確認画面2
売り全決済か買い全決済を選択できる

このときの選択肢は以下の通りです:

  • 「はい」 → 買い(ロング)ポジションのみを一括決済
  • 「いいえ」 → 売り(ショート)ポジションのみを一括決済
  • 「キャンセル」 → 何も実行せず終了

この機能は、以下のようなケースで特に便利です:

  • 買いポジションだけ含み益が出ており、先に利益確定したいとき
  • 一方向だけのポジションを切りたいとき
  • 両建ての片方だけをまとめて決済したいとき

なお、決済処理は1ポジションずつ順番に行われるため、ポジション数が多い場合には処理に数秒かかることがあります。また、対象となるのは「現在保有中のオープンポジション」のみで、未約定の注文(指値・逆指値)は含まれません。

注意:売りか買いかの判定は、MT4上のオープンポジションに対して行われます。スクリプトはシンボルやマジックナンバーを問わずすべての買い/売りを処理するため、必要に応じてカスタマイズもご検討ください。

スクリプト形式のメリットとEAとの違い

MT4では、自動売買を行う「EA(エキスパートアドバイザー)」と、単発の処理を行う「スクリプト」という2種類のプログラムがあります。

今回紹介しているPositionCloseは「スクリプト形式」で動作するツールです。ここでは、EAとの違いや、スクリプト形式ならではのメリットを解説します。

EA(エキスパートアドバイザー)とは?

  • 常にチャート上で動作し続け、事前に設定した条件に従って自動売買を行う
  • チャートにセットしておく必要があり、他のEAと併用する場合は複数チャートが必要
  • 一括決済機能はあるが、他のEAとの干渉が起こる可能性がある

スクリプトとは?

  • 実行した瞬間に一度だけ処理を実行して終了するプログラム
  • チャートに常駐しないため、他のEAと競合しにくく、動作の安定性が高い
  • 単発の作業(例:全ポジションを決済する)を自動化するのに最適

スクリプト形式のメリットまとめ

比較項目スクリプトEA
常駐するか×(しない)○(する)
起動方法手動で実行自動で継続実行
他EAとの干渉少ない起こりやすい場合あり
処理の目的単発処理継続処理(自動売買)
対象補助的な自動化トレードロジックの完全自動化

特にPositionCloseのような決済系の操作は、「EAが動作中でもスクリプトなら安全に実行できる」点が大きなメリットです。
そのため、現在EAを運用しているトレーダーにとっても安心して導入できる補助ツールとなります。

※EAとスクリプトは同じ「.mq4」形式ですが、使い方や目的が大きく異なるため、混同しないように注意しましょう。

PositionCloseの無料ダウンロードとインストール手順

ここでは、PositionCloseスクリプトのダウンロード方法から、MT4へのインストール手順までを詳しく解説します。初心者の方でも迷わず進められるよう、手順は画像付きで丁寧に紹介しています。

ダウンロードリンク

PositionCloseは、当サイトにて無料で配布しています。以下のボタンよりダウンロードしてください。

※スクリプトは安全に動作するよう検証済みですが、ご利用はご自身の責任で行ってください。

ファイル形式:.mq4
対応プラットフォーム:MetaTrader 4(MT4)


MT4への設置方法(画像付き)

データフォルダを開く画面
データフォルダを開く
  1. MT4を起動し、メニューバーの「ファイル」>「データフォルダを開く」をクリック
  2. データフォルダ内の「MQL4」>「Scripts」フォルダを開く
  3. ダウンロードしたPositionClose.mq4ファイルをScriptsフォルダにコピーする
  4. MT4を再起動する(スクリプトが表示されるために必要です)
データフォルダのスクリプトフォルダ
データフォルダのスクリプトフォルダにコピーする

これでインストールは完了です。


初回起動と再起動の注意点

  • スクリプトは、MT4のナビゲーター画面>スクリプト欄に表示されます。
  • ドラッグ&ドロップでチャートにセットすることで実行できます。
  • 初回起動時には「自動売買を許可する」にチェックが入っていなくても動作しますが、「DLLの使用を許可する」にチェックが入っているとより安定します

※PositionCloseはスクリプト形式であるため、常駐することはなく、実行ごとに単発で処理が行われます。


この手順により、初心者の方でも安心して導入・実行できる設計になっています。続けて「使い方」のセクションに進みましょう。

PositionCloseの使い方と実行手順

ここでは、MT4にインストールしたスクリプト「PositionClose」を実際にどう使えばいいのか、ステップごとに解説します。

このスクリプトは、チャート上で手動実行することで、全ポジションの一括決済や売買の選択決済を行うものです。EAと異なり常駐はせず、実行のたびに1回だけ処理されます。


ナビゲーターから実行する方法

PositionCloseをナビゲーターから選択
PositionCloseをナビゲーターから選択
  1. MT4のナビゲーター画面を開きます(ショートカットキー:Ctrl+N)
  2. 「スクリプト」欄にある「PositionClose」を確認します
  3. 任意のチャートへドラッグ&ドロップします
    → ポジションが存在する通貨ペアのチャートでなくても動作します
  4. 実行時に確認ウィンドウが表示されます

※スクリプトの性質上、実行するたびに手動でドラッグ&ドロップが必要です。


全ポジション決済の流れ

スクリプトを実行すると、以下のような確認ウィンドウが表示されます。

PositionCloseをナビゲーターからドラッグ
PositionCloseをナビゲーターからドラッグでスクリプトを実行できる

すべてのポジションを決済しますか?

「はい」:すべてのポジションを一括決済
「いいえ」:買いまたは売りだけを選択して決済(次の確認画面へ)
「キャンセル」:スクリプトを終了

PositionCloseの確認画面1 (1)
PositionCloseの確認画面

ここで「はい」を選択すれば、すべてのオープンポジションが順番に決済されます。ポジション数が多い場合、決済に数秒かかることがあります。


売りだけ・買いだけを決済する方法

最初のウィンドウで「いいえ」を選択すると、次の選択画面が表示されます。

PositionCloseの確認画面2
売り全決済か買い全決済を選択できる

買い全決済または売り全決済しますか?

「はい」:買い(ロング)ポジションのみを一括決済
「いいえ」:売り(ショート)ポジションのみを一括決済
「キャンセル」:スクリプトを終了

選択後、対象のポジションに対してのみ一括決済処理が順に行われます。


実行後にキャンセルした場合の動作

どちらのウィンドウでも「キャンセル」を選択した場合は、一切の決済処理は実行されません。誤って実行してしまっても、キャンセルを選べば安心です。


PositionCloseは、誤操作を避けるために二重の確認ステップが設けられており、安全性にも配慮された設計となっています。
「一括決済」と聞くと不安を感じる方もいるかもしれませんが、確認画面の導入によって安心して使える仕様になっています。

スマホから一括決済する方法(リモートデスクトップを活用)

「スマホからMT4のポジションを一括で決済したい」という声は非常に多くあります。
しかし、MT4のスマートフォンアプリには一括決済機能が備わっていません。そのため、スマホから直接「すべてのポジションをまとめてクローズする」ことはできません。

ではどうするかというと、リモートデスクトップを使うことで、スマホからPC上のMT4を操作するという方法があります。


スマホアプリだけでは一括決済できない理由

  • スマホ版MT4には、ポジションごとに1件ずつ決済する機能しかない
  • スクリプトやEAの実行がスマホアプリ上では制限されている
  • ファイルの設置・スクリプトのドラッグ実行ができない

これにより、スマホ単体ではPositionCloseを実行することはできません。


PCを操作する方法(AnyDesk・Chrome Remote Desktopなど)

リモートデスクトップとは、スマートフォンから遠隔でPCの画面を操作できる仕組みのことです。代表的な無料ツールには次のようなものがあります:

■ AnyDesk(無料/iOS・Android・Windows対応)

  • 動作が軽快でFX用途でも人気
  • 専用アプリをスマホとPCにインストールするだけで使える

■ Chrome Remote Desktop(Google製/無料)

  • Chromeブラウザがあればすぐ導入可能
  • セキュリティが高く、Googleアカウントで管理

利用の流れ(例:AnyDeskの場合)

  1. PCとスマホ両方にAnyDeskをインストール
  2. PC側でMT4を起動し、スクリプト「PositionClose」をセットしておく
  3. スマホでAnyDeskを開き、PCに接続
  4. スマホ上でPC画面を遠隔操作し、スクリプトを実行

この方法なら、出先でもスマホを使って安全に全ポジションを一括決済することが可能です。


※注意:リモートデスクトップは、PCの電源が入っており、インターネットに接続されている必要があります。また、公共のWi-Fiなどを使用する場合は、セキュリティにも注意してください。

PositionCloseの注意点とリスク【重要】

PositionCloseは、非常に便利な一括決済スクリプトですが、使い方を誤ると予期せぬ損失や操作ミスにつながる可能性があります。

ここでは、使用前に必ず知っておくべき注意点やリスクについて解説します。


複数ポジション決済時のズレ・遅延について

PositionCloseは、保有中のポジションを1つずつ順番に決済する仕様になっています。
そのため、10ポジションを持っている場合は、10回の決済処理が連続して実行されることになります。

この際、以下のようなズレや遅延が生じることがあります:

  • 約定までの数ミリ秒〜数秒のタイムラグ
  • 相場が急変しているときはスリッページの発生
  • 一部のポジションで決済エラーが起きる可能性

実行後はMT4の「ターミナル」ウィンドウで決済ログを確認し、すべて正常にクローズされたかチェックする習慣をつけましょう。


指値・逆指値注文には非対応

PositionCloseが処理できるのは、現在オープン中のポジション(成行注文)のみです。

以下の注文は決済対象になりません:

  • 指値注文(Limit Order)
  • 逆指値注文(Stop Order)
  • 未約定の保留中注文

これらはMT4上で手動削除するか、別のスクリプトを利用する必要があります。


複数チャート・通貨ペアでもすべて決済される

PositionCloseは、チャートにドラッグした通貨ペアだけでなく、MT4に存在するすべてのオープンポジションを対象に処理を実行します。

たとえば:

  • USDJPY、EURUSD、GBPJPYを同時保有中
  • 任意のチャート(例:USDJPY)にPositionCloseを実行

この場合でも、すべての通貨ペアのポジションが処理対象になります。


緊急時の実行に頼る前に、検証とテストを

特に実運用前には、デモ口座での動作確認を強く推奨します。

  • 実行後の動作が想定通りか
  • 決済完了までの速度や挙動
  • 複数ポジションを保有した際の安定性

をあらかじめチェックしておくことで、本番環境での予期せぬリスクを回避できます。


PositionCloseは便利なツールですが、「即時かつ大規模な操作」を行う機能であるため、常に慎重な判断のもとで使用することが大切です。

スクリプトのソースコードと機能解説

このセクションでは、「PositionClose」スクリプトのMQL4ソースコード全文と、その中で使われている主な関数の解説を行います。
ご自身でカスタマイズしたい方や、MQL4を学習中の方にも役立つ内容です。


コード全文(コピー&ペースト用)

//+------------------------------------------------------------------+
//|                                                PositionClose.mq4 |
//|                                     Copyright 2024, tokyo-ea.jp |
//|                                            / |
//+------------------------------------------------------------------+
#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()

  • 保有しているすべてのポジション(買い/売り問わず)を順番に決済します。

ShowSecondConfirmation()

  • ユーザーが「買い/売りを選択したい」と選んだ場合に呼び出される関数です。
  • 「はい」で買い決済、「いいえ」で売り決済を実行します。

CloseBuyPositions() / CloseSellPositions()

  • 保有中の買い(ロング)ポジションまたは売り(ショート)ポジションのみを順番に決済します。

**補足:**このスクリプトは、マジックナンバーや通貨ペアのフィルタは行わず、すべてのポジションに対して処理を実行します。
特定の通貨ペアやEAのポジションだけを対象にしたい場合は、OrderMagicNumber()OrderSymbol() を条件に追加するカスタマイズが必要です。


このソースコードを使えば、MT4の一括決済を完全自動化するだけでなく、自分の取引スタイルに合わせた改造も可能になります。
MQL4に慣れている方や、自動化の知識を深めたい方はぜひ参考にしてください。

よくある質問(FAQ)

ここでは、PositionCloseスクリプトの利用に関してよく寄せられる質問とその回答をまとめました。
初めて使う方や、トラブルが不安な方はぜひ参考にしてください。

スクリプトは一度実行するだけでずっと動き続けるのですか?

いいえ、PositionCloseは「スクリプト形式」で作られており、実行された瞬間に一度だけ処理を行って終了します
EA(エキスパートアドバイザー)のようにチャート上で常駐し続けることはありません。

EAと併用して使うことはできますか?

はい、可能です。スクリプトはチャートに常駐しないため、EAが稼働中のチャート上でも干渉せずに一括決済を実行できます。
ただし、EAによってはポジションを再エントリーする設定になっている場合があるため、必要に応じてEAを一時停止してください。

一部のポジションだけ決済されませんでした。なぜですか?

以下のような原因が考えられます:

  • スリッページリクオートによる約定エラー
  • サーバー遅延によるタイミングのずれ
  • 証拠金不足やブローカー側の制限による拒否

スクリプト実行後は、必ず「ターミナル」>「口座履歴」や「エキスパート」タブでログを確認し、エラーコードが出ていないか確認してください。

スマホだけでスクリプトを実行できますか?

はい、デモ口座での動作確認は推奨されます。
まずはデモ環境で、複数ポジションを保有した状態でスクリプトを実行し、決済処理の挙動・速度・ログの出力などを確認してから実運用に進んでください。

通貨ペアやマジックナンバーを指定して決済できますか?

標準のPositionCloseでは、すべてのポジション(通貨ペア問わず)を処理対象とします。
特定の条件だけで決済したい場合は、ソースコードを編集し、OrderSymbol()OrderMagicNumber() を使って条件分岐を追加するカスタマイズが必要です。



ご利用上の注意

本記事で紹介しているスクリプト「PositionClose」は、検証済みのMQL4コードですが、すべての環境・ブローカーにおいての動作を保証するものではありません
ご利用の際は必ずご自身の判断と責任のもとで、事前にデモ口座での動作確認を行ってください。

当サイトでは、ツール使用による損失・損害について一切の責任を負いかねます。
利用規約・免責事項については以下をご参照ください:


まとめ|PositionCloseでMT4の決済作業を効率化しよう

MT4の標準機能では不可能な「ポジションの一括決済」を、簡単・安全に実現できるのが無料スクリプト『PositionClose』です。

このツールを使えば、以下のような操作がワンクリックで実行可能になります:

  • すべてのポジションを一括で決済
  • 買いポジションのみ、売りポジションのみの選択的な一括決済
  • EAとの併用も可能(チャートに常駐しないスクリプト形式)

加えて、ソースコードを公開しているためカスタマイズや学習用途としても活用でき、MT4ユーザーにとっては実用性の高いスクリプトです。


ただし、以下の点にはご注意ください:

  • 決済は1ポジションずつ順に実行されるため、若干の遅延が発生することがあります
  • 指値・逆指値注文は対象外です(別途手動で削除)
  • 実行前には必ずデモ口座などで動作を確認し、実環境での挙動を把握しておくことを推奨します

PositionCloseを活用することで、トレード判断から決済実行までの時間を短縮し、リスク管理を強化できます。
特に、複数通貨・複数ポジションを運用しているトレーダーには、必携の補助ツールといえるでしょう。

スクリプトは無料で配布していますので、まずはデモ口座での検証からぜひお試しください。

多くのトレーダーが求めているのは、信頼できて無料で使えるEAです。
当サイトでは、MT4対応の無料EAを厳選して紹介しています。

👉 無料EA一覧を見る(TOKYO-EA公式)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次