Spec Match Trade Copier MT5
- ユーティリティ
- バージョン: 1.1
- アップデート済み: 30 9月 2026
- アクティベーション: 10
MetaTrader 5用のローカルで動作するトレードコピーツールです。同じWindows PCまたはVPS上のMT5ターミナル間でポジションをコピーし、各コピーのサイズを双方のブローカーの契約仕様(契約サイズ、ティック価値、口座通貨)から算出します。そのため、二つのブローカーでロットの定義が異なっていても、コピーは同じエクスポージャーを持ちます。同じマスターポジションに対して二つ目のコピーを建てることは決してありません。
機能
各ターミナルで、同じEAをチャート一つに適用します:
- マスターターミナルでは、入力パラメータModeをMasterに設定します。
- 各レシーバーターミナルでは、入力パラメータModeをReceiverに設定します。
マスターは、保有中のポジション、その銘柄仕様、ハートビートを、共有のCommon\Filesフォルダー内のファイルに書き込みます。各レシーバーはそのファイルを100 msごとに読み込み、自分のポジションをマスターに合わせます:
- 新規ポジションの建玉
- ストップロスとテイクプロフィットの変更
- 部分決済
- 決済
サーバー、ネットワーク接続、DLL、WebRequestは一切使用しません。
ロット数ではなく契約に合わせたロットサイズ
「1ロット」の定義はブローカーによって異なります。ゴールドはロットあたり100 oz、10 oz、1 ozのいずれの場合もあります。指数はポイントあたり1、10または25単位の場合があります。セント口座では金額が100倍で表示されます。ロット数をそのままコピーするコピーツールは、100倍も過大または過小なポジションを建ててしまうことがあります。
このコピーツールは、双方でロットあたりの価値を測定します。ブローカー自身の損益計算であるOrderCalcProfitを使い、口座通貨で求めます。次に、マスター側の価値をレシーバーの口座通貨に換算します。ティック価値も確認し、両者が食い違う場合はパネルに警告を表示します。
一つのマスターポジションに対してコピーは最大一つ
レシーバーはディスク上にコピーマップを保持し、マスターポジションごとに一行を記録します:
- すべてのコピーにはコメント SMC:<master position id> が付きます。
- リクエストは送信前にマップに書き込まれるため、取引の途中でクラッシュや再起動が起きても、二つ目のコピーが作られることはありません。
- 再起動後、および入力パラメータやチャートの時間足を変更した後、レシーバーはマップを再読み込みします。コピーを保有したまま入力パラメータを変更するテストを、ヘッジング口座とネッティング口座のレシーバーでライブ実施しました。余分な約定は発生しませんでした。
- ヘッジング口座のレシーバーでマップファイルが失われた場合、レシーバーはポジションのコメントからマップを再構築します。
- ネッティング口座のレシーバーは、失われたマップを再構築できません。一つのネットポジションをマスターポジションごとに分割し直すことはできないためです。代わりに、コピーを保有している各銘柄をNET_HOLDにします(下記「コピーツールが停止・保留するとき」を参照)。
辻褄の合わないことがあると、レシーバーはコピーを停止してアラートを出します。推測で処理することは決してありません。例:
- 二つのレシーバーポジションが同じマスターIDを持っている場合
- コピーされたポジションのコメントにIDがない場合
- マスター口座が変わった場合
- 口座の証拠金モードが変わった場合
- マップファイルが破損している場合
- ネッティング口座のネットボリュームが手動で変更された場合
パネルには、ブロックした重複の件数が表示されます。
コピーしたポジションはマスターの指示があったときだけ決済
マスターは、決済したすべてのポジションについて、自身の約定履歴から取得した決済記録を公開します。レシーバーは、その記録を確認したときにのみコピーを決済します。ファイルの破損や履歴の未読み込みなどにより、ポジションが記録なしにマスターのファイルから消えることもあります。その場合、コピーはHOLDとなり、アラートが届きます。コピーは決済されません。
次のいずれかが起きるとレシーバーは一時停止し、ポジションはそのまま維持されます:
- マスターターミナルが停止されたとき
- マスターターミナルが強制終了されたとき
- マスターターミナルが接続を失ったとき
- マスターのファイルが更新されなくなったとき(ハートビートのタイムアウト、既定値 3 s)
モニタリング
ステータスパネルはレシーバーのチャート上に表示され、次の内容を示します:
- マスターの状態(ALIVE / SILENT / NOT CONNECTED)
- 有効、決済済み、拒否、保留、フィルター除外の各コピー数
- マスターとレシーバーの総エクスポージャーの比較(口座通貨建て、差を%で表示)
- 新規、決済、部分決済、SL/TP変更、ブロックした重複の各件数
- 最後の動作、最後のエラー、警告
- コピーしたポジションごとに一行(最大10行)、それ以降は「... N more」の行
すべての動作は Common\Files\SpecMatchCopier 内のCSVジャーナルにも記録されます。
コピーツールが停止・保留するとき
コピーツールが不整合を推測で修復することは決してありません。原因を解消してから、再起動してください。
| パネル表示 | 意味 | 対処 |
|---|---|---|
| COPYING STOPPED | レシーバーが説明のつかない状態を検出しました:一つのマスターIDに対する二つのポジション、コピーツールのマジックナンバーを持つがIDのないポジション、マスター口座または証拠金モードの変更、マップファイルの破損。理由はパネルとジャーナルに表示されます。EAを再起動するまで、何もコピーされません。 | メッセージに示された原因を解消し、EAをチャートから削除して再度適用してください。原因が残っていれば、再び停止します。 |
| COPYING STOPPED: master account changed | チャネルで別のマスター口座が配信されています。 | 切り替えが意図したものであれば:EAを削除し、旧マスターのコピーを手動で決済し、Common\Files\SpecMatchCopier 内の map_<login>_<magic>.txt(このレシーバーのログインとマジックナンバー)を削除してから、EAを再度適用してください。 |
| COPYING STOPPED: map file is damaged | コピーマップのチェックサム検証に失敗しました。 | ヘッジング:マップファイルを削除してEAを再度適用すると、コメントからマップが再構築されます。ネッティング:NET_HOLDを参照してください。 |
| NET_HOLD(ネッティング口座のレシーバー) | ある銘柄のネットボリュームが、コピーツールが建てた量と異なっています(手動取引の後やマップ消失の後など)。その銘柄はそれ以降取引されません。保留状態はマップに保存されるため、再起動しても解除されません。 | EAを削除します。コピーツールのポジションを手動で決済します。map_<login>_<magic>.txt を削除します。EAを再度適用します。その後は、それ以降に建てられたマスターポジションをコピーします。 |
| 一つの行にHOLD | 一つのコピーの状態が不確かです。例えば、マスターポジションが決済記録なしに消えた場合。あるいは、接続が切れたなどの理由で取引リクエストが確認されず、15秒以内にポジションが現れなかった場合です。ポジションが後から現れた場合は、アラートとともに保留中の行に紐付けられ、二重に送信されることはありません。保留中のコピーは、マスターがポジションを決済した後でも保有されたままです。 | コピーを手動で決済するか、そのまま保有してください。コピーツールが保留中のコピーに再び手を加えることはありません。 |
ロットモード
| モード | レシーバーのボリューム | 契約を考慮 |
|---|---|---|
| Same exposure(既定) | マスターのボリューム x(マスター1ロットの価値 / レシーバー1ロットの価値)x 乗数 | はい |
| Balance ratio | Same exposureの値 x(レシーバーの残高 / マスターの残高) | はい |
| Equity ratio | Same exposureの値 x(レシーバーの有効証拠金 / マスターの有効証拠金) | はい |
| Master lot x multiplier | マスターのボリューム x 乗数。契約が異なる場合は警告を表示 | いいえ |
| Fixed lot | すべてのコピーで固定ロット | いいえ |
どのモードでも、ボリュームはその後次のように処理されます:
- レシーバーのボリュームステップへの丸め(最も近い値または切り捨て)
- 任意設定のMax lotとブローカーの最大値による上限
- ブローカーの最小値を下回る場合のスキップ、または最小値への引き上げ(選択可能)
- 送信前のOrderCalcMarginによる余剰証拠金との照合
一方のロットあたりの価値が、もう一方のロットあたりの価値の1000倍を超える場合、コピーは拒否されます。この上限は変更可能です。通常、これは銘柄マッピングの誤りを意味します。
計算例:ゴールド、ロットあたり100 ozからロットあたり1 ozへ
| マスター(ブローカーA) | レシーバー(ブローカーB) | |
|---|---|---|
| 銘柄 | XAUUSD | XAUUSD.cs(自動照合) |
| 契約サイズ | 100 oz | 1 oz |
| 口座 | USD | USD |
| ゴールド価格 | 4,178.13 | 4,178.13 |
| 1ロットの価値 | 100 x 4,178.13 = 417,813 USD | 1 x 4,178.13 = 4,178.13 USD |
マスターが0.10ロットを建てます。これは10 ozで、価値は41,781 USDです。
- Same exposure: 0.10 x 417,813 / 4,178.13 = レシーバーで10.00ロット。これは10 ozで、価値は41,781 USDです。ロット数をそのままコピーするコピーツールなら0.10ロット = 0.1 ozを建てることになり、エクスポージャーは百分の一になります。
- セント口座のレシーバー(口座通貨USC、1 oz契約):ブローカーは1ロットの価値を417,813 USCと報告し、セント係数で換算すると4,178.13 USDです。レシーバーは同じく10.00ロットとなります。
- Balance ratio(マスター残高10,000 USD、レシーバー残高1,000 USD):10.00 x 1,000 / 10,000 = 1.00ロット。
これらの数値は、テストレポートに同梱しているユニットテストのものです。同じ計算はライブでも実行しました:USD口座のXAGUSD(ロットあたり5,000 oz)をEUR口座のXAGEUR(ロットあたり1,000 oz)にコピーし、0.10ロットが0.50ロットになりました。
銘柄の照合
レシーバーは、マスターの銘柄を次の順序で照合します:
- 手動マップ(XAUUSD=GOLD.x,US30=DJ30)。常に優先され、他の方法にフォールバックすることは決してありません。
- 同じ名前。
- Suffix / Prefixのヒント(.cs, m, #)。
- ブローカー独自の装飾を除いた後の同じコア名:XAUUSD.cs, XAUUSDm, #XAUUSD, EURUSD.pro, US500Cash, fxEURUSDなど。
- 組み込みのエイリアス:GOLD/XAUUSD, SILVER/XAGUSD, US30/DJ30/WS30, NAS100/US100/USTEC, US500/SPX500, GER40/DE40/DAX, UK100, JP225, USOIL/WTI, UKOIL/BRENT, BTCUSD, ETHUSD。
レシーバー側の二つの銘柄が同程度に一致する場合は、気配値表示にある方を使います。両方とも気配値表示にある場合、またはどちらもない場合、コピーは拒否され、パネルに手動マップの設定を求める表示が出ます。例えば、ExnessにはUS30m(ロットあたり指数1単位)とUS30_x10m(ロットあたり10単位)があります。どちらもマスターのUS30に一致するため、使いたい方を気配値表示に追加するか、マップを設定してください。どちらの方法でもロットは換算されます。
通貨ペアの後に続く数字は、ブローカーの装飾として扱いません。ExnessのXAUUSD247m(週末も取引されるゴールド)は別の商品なので、マスターのXAUUSDはXAUUSDmにコピーされ、XAUUSD247mにコピーされることは決してありません。どうしてもそちらを使いたい場合は、手動でマップしてください。
ある銘柄を初めてコピーする前に、レシーバーは双方の価格を自身の口座通貨で比較します。差が3%(変更可能)を超える場合、コピーは拒否されます。これにより「GOLD」のようなマッピングを検出できます。一部のブローカーでは、「GOLD」はゴールドではなく、約40 USDの金鉱株です。
入力パラメータ
| 入力パラメータ | 初期値 | 説明 |
|---|---|---|
| Mode of this terminal | Receiver | Masterは配信、Receiverはコピー |
| Channel | 1 | マスターとそのレシーバーを結び付けます。PC上のマスターごとに異なるテキストを使用してください |
| Cent account (this terminal) | Auto | AutoはUSC/EUCの口座通貨をセント口座として扱います。ブローカーが別のコードを使う場合はYes/Noを設定してください |
| Master scan interval, ms | 200 | 取引イベントに加えて、マスターが変更を確認する間隔 |
| Master heartbeat interval, ms | 500 | 変更がないときにマスターがファイルを書き直す間隔 |
| Lot mode | Same exposure | 上記のロットモードを参照 |
| Fixed lot | 0.01 | Fixed lotモードで使用 |
| Multiplier | 1.0 | Fixed lot以外のすべてのモードに適用 |
| Max lot of one copied position | 0(オフ) | コピー一つあたりの上限 |
| Volume rounding | Nearest | 最も近いボリュームステップ、または切り捨て |
| Volume below the broker minimum | Skip | コピーをスキップするか、最小ボリュームを使用 |
| Refuse if one lot is worth more than x times the other | 1000 | 誤ったマッピングを防ぎます |
| Manual symbol map | 空欄 | MASTER=RECEIVERの組をカンマ区切りで指定 |
| Receiver symbol suffix hint | 空欄 | 例:.cs |
| Receiver symbol prefix hint | 空欄 | 例:# |
| Refuse a mapping if prices differ by more than, % | 3.0 | 0でチェックを無効化 |
| Copy only these master symbols | 空欄(すべて) | カンマ区切り |
| Never copy these master symbols | 空欄 | カンマ区切り |
| Copy only these master magic numbers | 空欄(すべて) | カンマ区切り |
| Never copy these master magic numbers | 空欄 | カンマ区切り |
| Reverse copy | false | 買いは売りになり、ストップロスとテイクプロフィットは入れ替わります |
| Copy stop loss and take profit | true | |
| Copy positions already open at the first start | false | 既定では、レシーバーの起動後に建てられたポジションのみコピーされます |
| Skip if price moved more than, % since master entry | 0.10 | 一時停止後の遅れたコピーを防ぎます。0で無効 |
| Master heartbeat timeout, ms | 3000 | マスターのファイルがこれより古くなると、コピーを一時停止します |
| Hold if a master position vanishes without a close record, s | 30 | |
| Max slippage, points | 20 | 即時執行の銘柄用 |
| Magic number of copied positions | 7310001 | 口座とマジックナンバーの組み合わせごとにレシーバーは一つです。同じ口座で二つ目のレシーバーを使う場合は、別のマジックナンバーを使用してください |
| Expected master account | 0 | 0の場合、最初に検出したマスターを受け入れます。それ以外の場合、チャネルに別の口座が現れるとコピーを停止します |
| Show the status panel | true | |
| Panel X / Y offset, px | 12 / 24 | |
| Popup alerts / Push notifications | true / false | |
| CSV journal | true | Common\Files\SpecMatchCopier\journal_<account>_<magic>.csv |
設定手順
- EAを両方のターミナルにコピーします。Common\FilesはWindowsユーザーに属するため、両ターミナルは同じWindowsユーザーで実行する必要があります。マスターとすべてのレシーバーのターミナルで同じバージョンのEAを使用してください。アップデートした場合は、すべてのターミナルでアップデートしてください。
- マスターターミナルで、Mode = Masterとして任意のチャートにEAを適用します。
- 各レシーバーターミナルで、Mode = Receiver、および同じChannelを設定して、任意のチャートにEAを適用します。
- レシーバーのターミナルで「アルゴリズム取引」を有効にします。
- マスターで小さなポジションを建てます。レシーバーのパネルに、コピーとロットの換算が表示されます。
ストラテジーテスター
ストラテジーテスターには二つ目のターミナルがありません。そのため、テスターではEAがシミュレーションのマスターを実行します:
- 数本のバーごとに仮想ポジションを建て、変更し、部分決済し、決済します。各ポジションのサイズは、ストップロス到達時の損失が残高の約1%、証拠金の使用が残高の最大10%となるように設定されます
- 仮想ポジションが注文として送信されることは決してありません
- それらの仮想ポジションを、選択したロットモードとすべての取引前チェックを適用してテスター口座にコピーします
これにより、二つ目のターミナルなしでコピーのロジックとロットの換算を確認できます。これは売買戦略ではなく、そのテスター結果は利益について何も示しません。
制限事項(購入前にお読みください)
- 同一PCのみ:マスターとレシーバーは、同じWindows PCまたはVPS上で、同一のWindowsユーザーで実行する必要があります。インターネット経由のコピーには対応していません。
- MQL5の組み込みVPSでは実行できません。移行された各ターミナルは、それぞれ独自のストレージを持ちます。
- MT5からMT5へのみ。未決注文はコピーされません。未決注文は、約定してポジションになった時点でコピーされます。
- 市場が閉じているとき:レシーバーの銘柄が取引セッション外の場合、何も送信しません。コピーツールはセッションが始まるのを待ち、その時点でまだ必要なものをコピーします。新規ポジションには引き続き「Skip if price moved」の上限が適用されます。レシーバー側の市場が閉じている間にマスターが行った決済は、その市場が開いたときに、その時点の価格で実行されます。
- 速度:デモ口座で測定したところ、マスターの取引から0.2〜1.1 s後にレシーバーのポジションがマスターと一致しました(中央値0.3 s、測定60回。1.1 sのケースは、ネッティング口座で10ポジションを一度に決済したもの)。これは100 msのポーリングとブローカーの執行時間の合計です。コピーはレシーバー自身の価格で約定するため、特にニュースの前後では、マスターの価格と異なることがあります。
- ストップロスとテイクプロフィットの水準:
- 両方の銘柄が同じ通貨で建値されている場合は、正確な水準をそのままコピーします。
- それ以外の場合(例:XAGUSDからXAGEUR)は、価格比で水準を換算します。
- ネッティング口座のレシーバーでは、その銘柄のマスターポジションがすべて同じ水準を使っている場合にのみ、SL/TPをコピーします。
- レシーバーで手動で決済または縮小したポジションには手を加えません。再び建てられることは決してありません。
- レシーバーが48時間を超えてオフライン:マスターは決済記録を48時間保持します。それより前にマスターポジションが決済されたコピーは、自動では決済されません。アラートとともにHOLDとなるので、手動で決済してください。
- 新規時にストップ水準が拒否された場合:ブローカーが新しいコピーのストップロスまたはテイクプロフィットを拒否した場合(無効なストップ。例えばニュースの前後でストップレベルが拡大したとき)、そのコピーは拒否され、再試行されません。パネルにはREFUSEDと表示されます。
- 上限で制限されたコピー:コピーがMax lotまたはブローカーの最大ボリュームで制限されている場合、マスターの部分決済によってコピーが縮小されるのは、換算後の新しいボリュームが保有中のボリュームを下回るときだけです。それまでは、コピーは上限のままです。
- リスク管理機能なし:コピーツールはドローダウンや日次損失を制限せず、口座の管理も行いません。マスターが行うことをコピーします。
- すべて同じバージョンで:マスターとレシーバーは同じコードでロットの価値を測定します。すべてのターミナルで同じバージョンのEAを実行してください。例えば、v1.00のマスターとv1.01のレシーバーの組み合わせでは、株式CFDなどロットあたりの価値が小さい契約について、v1.00のセント単位の丸めがそのまま使われます。
- ブローカーでの資金不足:ブローカーが証拠金を理由に新しいコピーを拒否した場合、そのコピーは拒否され、再試行されません。一部のブローカーは、MetaTrader自身の証拠金計算が示すより多くの証拠金を要求します。テストで使用したExnessのデモもそうでした。
- テスト環境:
- MetaQuotes-Demo口座でライブテスト:USDのマスター、EURのヘッジング口座レシーバー、USDのネッティング口座レシーバー。
- マスターはUSDのネッティング口座でもテストしました(追加建て、一つの約定によるドテン、部分決済、全決済)。
- 二つのブローカー、MetaQuotes-DemoとExness Standardのデモ(USD、ヘッジング、「m」サフィックス付きの銘柄)の間で、双方向にライブテスト:
- MetaQuotes-DemoからExnessへ、自動照合:XAUUSDからXAUUSDm、XAGUSDからXAGUSDm、EURUSDからEURUSDm。テスト内容:SL/TP付きの新規、SL変更、部分決済、レシーバーの再起動、入力パラメータの変更、決済。
- ExnessからMetaQuotes-DemoのEUR口座へ、自動照合:XAUUSDmからXAUUSD、XAGUSDmからXAGUSD、EURUSDmからEURUSD。テスト内容:新規、SL変更、部分決済、決済。株式CFDのBACm(ロットあたり100株)をBAC(ロットあたり1株)にコピーし、0.10ロットが10ロットになりました。
- Exness内の異なる契約サイズ間、手動マップ使用:US30mからUS30_x10m(0.30ロットが0.03に)、USTECmからUSTEC_x100mおよびUS500mからUS500_x100m(1.00ロットが0.01に)、BTCUSDmからBTCUSDTm。
- すべての実行で重複は0件、パネル上のエクスポージャー差は0.00%〜0.01%でした。誤ったマッピングは価格チェックで拒否されました。曖昧な照合は、一方の銘柄が気配値表示に入るまで拒否されました。
- 1 ozのゴールドとセント口座は、合成したブローカー仕様を使ったユニットテストで確認したもので、ライブ口座では確認していません。どちらのブローカーもデモではこれらを提供していませんでした。
- 実際の資金をコピーする前に、ご利用のブローカーのデモ口座でテストしてください。
