
FXあなたの「ポチッ」が約定するまで。MT5 Trade Server内部の知られざる旅|MT5の向こう側
裁量で何気なくBUY/SELLする。
EAがいつものように自動でBUY/SELLする。
この「当り前」の裏では何が起こっているのでしょう?
今回はFXにおける注文の流れを細かく見ていきます。
顧客 → MT5 Trade Server → 約定エンジン → LP/銀行/取引所
MetaQuotesの公式資料を見ると、MT5にはTrade Serverそのものに取引処理機能があり、さらに Gateway を介してLP、銀行、ECN、取引所などへ接続できます。MT5には独自のECN/マッチング機能を構築することもできます。
詳細な流れは以下になります。

1.顧客が「Buy」を押した瞬間
顧客が
EURUSD
Buy
1.00 lot
を押したとします。
MT5端末は注文をブローカー側へ送ります。
この段階では、まだ「銀行でEURUSDを買った」とは限りません。
MetaTrader公式の説明でも、注文はまずブローカーへ送られ、サーバー側で価格・資金などのチェックを受け、その後Trade Serverで処理される、とされています。
つまり、
顧客
↓
「EURUSDを1 lot Buyしたい」
↓
ブローカーMT5サーバー
2.MT5 Trade Serverで何が起きるのか
ここが非常に重要です。
Trade Serverは単なる「注文を転送する中継サーバー」ではありません。
口座残高
証拠金
必要証拠金
注文数量
注文種別
価格
取引時間
銘柄の取引条件
などを確認します。
そして注文を
約定
拒否
キャンセル
Dealer処理
外部市場へ送る
などに振り分けることができます。公式ドキュメントにも、注文はTrade Serverで処理され、自動執行またはDealerによる執行、拒否、取消などがあり得ると説明されています。
3.ここで「A-book」と「B-book」の違いが出る
例えば顧客がEURUSDを1 lot Buyした場合。
パターンA:外部へヘッジする
顧客
↓
MT5 Trade Server
↓
Gateway
↓
LP / Bank
↓
EURUSD Buy 約定
パターンB:ブローカー内部で処理
顧客A
EURUSD Buy 1 lot
↓
MT5 Trade Server
↓
ブローカー内部
という処理も可能です。
この場合、顧客の注文がそのまま銀行に送られるとは限りません。
例えば、
顧客A → Buy 1 lot
顧客B → Sell 0.7 lot
顧客C → Sell 0.3 lot
なら、ブローカー内部で
Buy 1.0
↕
Sell 0.7 + Sell 0.3
と相殺することができます。
この場合、外部LPに1 lotを送る必要はありません。
4.では「約定エンジン」とは何なのか?
今回の記事ではここが今回一番重要です。
「約定エンジン」という言葉は、実は2種類の意味で使われることがあります。
① MT5内部の取引処理
MT5 Trade Server自身が注文を処理します。

MT5の公式ドキュメントでも、注文を処理して約定(Deal)を生成し、ポジション(Position)を更新するという取引モデルが説明されています。
② 外部のMatching Engine
一方、ECNなどを構築している場合は、
MT5
↓
Gateway
↓
Matching Engine(マッチングエンジン)
↓
LP A
LP B
LP C
のような別のマッチングエンジンが存在する場合があります。
MetaQuotes自身もMT5について、独自の流動性プールを作り、完全なマッチングエンジン管理を実行できると説明しています。
したがって、
「MT5 Trade Serverの後ろには必ず別の約定エンジンがある」
ではありません。
ブローカーの構成次第です。
5.LPとは何なのか?
LP = Liquidity Provider(流動性提供者) です。

MT5はこうしたLPへ接続できます。
現在のMetaQuotesの説明では、MT5にはLPへの接続機能があり、複数LPを同時接続して価格集約や注文執行を管理できます。
EURUSD
Bid / Ask
LP A 1.10000 / 1.10002
LP B 1.10001 / 1.10003
LP C 1.09999 / 1.10001
という価格が来ていたとします。
するとブローカー側では、
Best Bid = 1.10001
Best Ask = 1.10001
のように最良価格を組み合わせて顧客向け価格を作ることができます。
6.さらに重要なのが「Gateway」
ここはMT5を理解するうえで非常に重要です。
Gatewayは簡単に言えば、
💡MT5と外部取引システムを接続するためのアダプター
MT5 Trade Server
↓
MT5 Gateway
↓
Bank / LP / ECN
外部システムはMT5と同じ通信方式ではありません。
そこでGatewayが、
MT5注文
↓
外部システム用注文
に変換します。逆方向では、
LPからの約定
↓
Gateway
↓
MT5 Trade Server
↓
顧客MT5
となります。
MetaQuotesもGateway APIを、MT5と他の取引システムとの統合に使うものとして説明しています。
7.実際の「Buy 1 lot」を追ってみる
顧客が以下の発注を行ったとします。
EURUSD BUY 1.00 lot
STEP 1
顧客MT5
↓
注文送信
STEP 2
Access Server
↓
MT5 Trade Server
STEP 3
Trade Serverで以下を確認。
口座は有効?
証拠金は十分?
数量は正しい?
価格は有効?
取引時間内?
STEP 4
ここから分岐します。
Dealer:内部処理(ディーラー)
Internal Matching:内部処理(マリー)
Gateway:外部処理

💡全顧客注文が必ずLPへ行くわけではありません
8.LPへ送った場合
Gatewayを通してLPに送った場合
MT5
↓
Gateway
↓
LP
LP側から、
Fill:
EURUSD
Buy
1.00 lot
1.10002
という結果が返ってきます。
それを、
LP
↓
Gateway
↓
MT5 Trade Server
↓
顧客MT5
と戻します。
顧客のMT5には、
Buy EURUSD 1.00 lot 1.10002
として約定が表示されます。
外部システムでの約定には、MT5側のDeal IDとは別に外部システム側のIDが付く場合もあり、MetaTraderの公式ドキュメントでもその対応関係を追跡できるとされています。
9.この場合はどうなる?
顧客が以下の注文を出したとします。
EURUSD BUY 100 lot
LP A : Ask 1.10000 10 lot
LP B : Ask 1.10001 30 lot
LP C : Ask 1.10002 60 lot
しか持っていなかったとします。
すると100 lotを一発で同じ価格で約定できない可能性があります。
10 lot → 1.10000
30 lot → 1.10001
60 lot → 1.10002
という 複数LPへの分割執行 が起こり得ます。
このような価格集約・注文執行を行う仕組みがLiquidity Aggregatorです。
実際、MT5向けの流動性アグリゲータでは、複数LPの価格を集約し、BBO(Best Bid and Offer)に基づいて注文をルーティングする仕組みが提供されています。
10.そして「約定拒否」「スリッページ」が発生する
顧客から以下の注文が来たとします。
BUY EURUSD 1.10000
しかしLP側では、その瞬間には
1.10000 → unavailable(取引不可)
1.10002 → available(取引可能)
となっていたとすると
要求価格 1.10000
↓
実際の約定 1.10002
となることがあります。
これがスリッページです。
あるいは
No liquidity
などで注文が拒否されることもあります。
11.ここで「MT5が価格を作っているのか?」という疑問が出る
これも非常に重要です。
MT5そのものが世界のFX市場からEURUSD価格を取得しているわけではありません。
ブローカーが以下の構造をつくります。

だから、
💡同じMT5でもブローカーによってEURUSDの価格・スプレッド・約定品質が違う
MT5はブローカー向けにLP、取引所、ECN、銀行などへの接続機能を提供しています。
12.さらに重要:「MT5=市場」ではない
ここを理解するとMT5の全体像がかなりクリアになります。
MT5は、市場そのものではありません。
むしろ、

という ブローカーの取引インフラの中心部分 と考えた方が近いです。
MetaQuotes自身もMT5をブローカー向けのフルサイクルプラットフォームと位置付け、取引所・LP・ECN・銀行などへの接続機能を提供しています。
13.FXの注文は分散システム

FXの注文は上記の分散システム全体で処理されます。
MetaQuotesもMT5について「様々な機能が個々のサーバーに分散された分配型アーキテクチャ」と説明しています。
そしてサーバーを置く場所についても、MetaQuotesはAWS、Azure、Equinixなどのホスティング環境を例として挙げています。つまり物理専用機の場合もあれば、クラウド/仮想化環境の場合もあり得ます。