YouTube動画解説もありますのでお時間ある方は合わせてご視聴ください。
お問い合わせはこちらからどうぞ。
https://lin.ee/6rSmp8I
メールでのお問い合わせはこちらのメアドをご利用ください。
ea-designer-kuu@hashibito-llc.com
MT5で複数の端末に同じEAを入れて同じ口座を動かしている方に、まず読んでいただきたい記事です。
私は先日、到達していないSL/TPで保有35本が一括決済されるという事故を起こしました。原因は相場でもブローカーでもなく、自分が書いたEAの設計にありました。この記事では、その実ログと3段階の対策を公開します。
あわせて、新しく公開した裁量パネル「PW GoldCockpit」でサインと自動売買を全部削除した理由も整理します。機能を足す方向で改良を続けた結果、何が起きたのか。ツールを自作している方、EAを複数端末で運用している方の参考になれば幸いです。
結論:この記事で分かること
- 複数端末でEAを動かすと、各端末が独立に決済を実行してしまう(実際の事故ログあり)
- 対策は「執行権を1台に限定する」「ブローカー側の値を唯一の正とする」「多数決で採用値を決める」の3段階
- 機能を足し続けると、計算負荷とバージョン依存という2種類の負債が溜まる
- 依存関係を無くす最短の方法は、参照そのものを消すこと
- ブローカーの強制ロスカットは保険にならない(海外はゼロカット=破綻まで働かない)
事故の記録:到達していないTPで35本が消えた
私の運用環境は、ノートPC・デスクトップ2台・スマホ用のVPSを合わせた計4台です。すべて同じ口座に接続し、同じEAを入れています。外出先でも自宅でも同じ操作ができるようにするためです。
2026年8月6日、以下が起きました。
| 発生時刻 | 22:37:01 |
| 決済された建玉 | 35本 / 合計2.45ロット |
| 平均建値 | 4233.572 |
| 実際の決済価格 | 4257.291 |
| 手動で設定していたTP | 4286.058(未到達) |
| 手動で設定していたSL | 4239.768(未到達) |
| 操作していた端末のログ | 決済要求の記録が1件もない |
目の前の端末は何もしていない。ではどこが撃ったのか。答えは別の端末のEAでした。
原因:4台がそれぞれ「自分のライン」で執行していた
当時のEAは、各端末がそれぞれ自分のチャートにSL/TPラインを自動生成し、それぞれが独立に「ライン到達で全決済」を実行する設計でした。
1台でTPを遠くへ動かしても、残り3台のTPは初期値のまま残ります。そして22:09:15に引かれた初期TPは4256.819。実際の決済価格4257.291とほぼ一致しました。動かしていない端末のラインに、価格が先に触れたわけです。
これは「EAのバグ」というより、同じロジックを複数の実行環境に置いたときの競合です。MT5のグローバル変数は端末をまたげないため、EA側から他端末の状態を知る手段がありません。設計時に想定できていませんでした。
対策1:執行権を1台に限定する(Ver1.13)
まず、SL/TPラインの自動生成をやめました。パネルの [SL/TP] ボタンを押した端末だけがラインを持ちます(起動時の既定はLinesDefaultOn = false)。
- ラインを持たない端末は、ライン到達による全決済を一切行わない
- ラインを持たない端末は、ブローカーSL/TPの同期も行わない(他端末が設定した値を書き換えない)
- 発注・個別決済・All Close・両建てなどの手動操作は全端末で従来どおり使える
あわせて安全装置を2つ追加しました。ラインを引いた直後・手で動かした直後は執行を無効にするアーム制御と、条件が一定秒数続いた場合だけ執行する到達確認秒数(LineArmConfirmSec、既定2秒)です。ラインを価格の向こう側へ落としても、その瞬間に全決済されることはなくなりました。
対策2:ブローカー側の値を「唯一の正」にする(Ver1.14)
執行権を1台にしても、2台目でONにした瞬間にラインの位置が食い違うという問題が残りました。2台目は初期値でラインを引くため、1台目で動かした位置を知らないからです。
ここで使ったのがブローカーに設定されたSL/TP値です。これはサーバー上にあるため、全端末が同じものを見ています。端末をまたげる唯一の共有領域でした。
- SL/TPをONにしたとき、建玉にすでにブローカーSL/TPが入っていれば、初期値を計算せずその価格にラインを引く
- ライン表示中も、ブローカー側の値と食い違っていれば自分のラインをそちらへ合わせる
- 自分でドラッグした直後だけは追従せず、自分の値をブローカーへ書き込む
結果として「最後に手で動かした端末の位置」が全端末へ行き渡ります。追従でラインが動いたときはアームを解除するので、移動先が価格の向こう側でもその瞬間に決済されません。
対策3:採用値を多数決で決める(Ver1.15)
対策2にもまだ穴がありました。全端末がSL/TP OFFの状態で新規エントリーすると、その建玉だけ自分の建値基準の個別SL/TPが付きます。この「はぐれ建玉」がある状態でONにすると、共有していた位置とはぐれ建玉の値のどちらを拾うかが走査順で決まってしまい、意図と違う位置にラインが出ることがありました。
そこで、対象サイドの建玉が持つSL値・TP値をそれぞれ集計し、最も多くの建玉が持っている値を採用する(多数決)方式に変更しました。共有位置は複数の建玉に入っており、はぐれ建玉は1本なので確実に共有位置が勝ちます。SLとTPは独立に多数決を取るので、片方だけ手動で動かした場合にも正しく揃います。
それでも残る注意点
2台以上で [SL/TP] をONにすると、また同じ事故が起きます。MT5のグローバル変数は端末をまたげないため、EA側では他端末のON状態を検知できません。ラインを出すのは必ず1台だけにしてください。
これは技術で塞ぎきれなかった部分です。運用ルールでカバーするしかないので、正直に書いておきます。

機能を足し続けると溜まる、2種類の負債
ここからは設計の話です。私は「PW MTF → MTF2 → MTF3 → MTFS」と、一貫して機能を足す方向で改良してきました。サインを増やし、フィルターを重ね、判定を厳しくする。良かれと思ってやっていたことです。
そこで溜まった負債が2つありました。

負債1:計算負荷
ソースを見返して一番驚いたのは、AO(オーサム・オシレーター)の計算でした。1本のローソク足あたり最大39回の加算ループを回しており、インジケーター全体で最も重い処理になっていました。
マルチタイムフレーム判定も同様です。自動売買で使う以上、3分足と15分足の挙動を常に読み込み続ける必要があります。サインを生成するには過去の足も遡って計算します。「軽くする」という目標に対して、ここを残したまま到達する方法はありませんでした。
負債2:バージョン依存
EAとインジケーターがペアで動く設計には、見落としやすい落とし穴があります。片方が古いだけで検証結果が変わることです。
私はこれでバックテストを3回やり直しました。3回とも違う数字が出ました。開発者本人が組み合わせを間違えるのですから、利用者に「バージョンを揃えてください」と依頼する運用は現実的ではありません。
そこで採った解決策が、依存関係そのものを削除することでした。EA側からiCustomを2本、iAlligatorを1本、常時保持していたハンドル3本すべてを撤去しました。この結果、EAはインジケーターが入っていなくても単体で動作します。tester_indicatorの指定も不要になりました。
削除した機能と、残した機能
実際に何を消したかを、正確に列挙します。
| 区分 | 削除したもの |
|---|---|
| インジケーター (描画バッファ 10 → 6) | トレンド買い / トレンド売り / 押し目買い / 戻り売りのサイン4種、AO(SMA5−SMA34)、AC、出来高フィルター、レグ状態管理(交互制・レグ再開・追随回数)、および関連設定一式 |
| EA | Autoボタン、自動売買処理(収穫出口・反対サイン決済・サインエントリー)、インジケーター参照ハンドル3本、インジ連動表示行 |
| 共通 | マルチタイムフレーム判定表示(=名称を MTFS から変更した理由) |
残した表示はチャートを読むための線だけです。
- アリゲーター3本(SMMA 13 / 8 / 5、シフト 8 / 5 / 3、中央値ベースの増分計算)
- 直近60本の高値ライン・安値ライン・半値ライン
どちらもMT5に標準で備わっている考え方で、特別なロジックは使っていません。再現できる環境であることを優先しました。
操作系は削っていません。BUY / SELL、Buy Close / Sell Close、All Close、ロット倍率ボタン(×1.5 / ×2.0 / ×3.0)、緊急両建て、統一SL/TPライン、ライン到達での全決済、残高比ロスカット、リスク%設定、UIサイズ記憶はすべて残しています。
サインを消した理由は「判断が鈍るから」
技術的な理由とは別に、もう一つ判断がありました。サインがあると、人間の判断が鈍ります。
矢印が出たから入る、出ないから待つ。これを続けると、なぜその価格で入るのかを考えなくなります。サイン依存の状態を一度きれいに排除して、プライスアクション――半値ラインやアリゲーターに対して価格がどう反応したか――だけで判断してみる。そういう実験でもあります。
機能が多いほど良い道具ではありませんでした。これは現時点での結論であり、今後変わる可能性もあります。
ブローカーの強制ロスカットは保険にならない
削る話の中で、最後まで残したかった機能が残高比ロスカットです。既定値は10%(LosscutPercent = 10.0)。残高の10%を失った時点でEAが全決済します。
| 口座残高 | 10%設定での自動全決済ライン |
|---|---|
| 3,000,000円 | −300,000円 |
| 1,000,000円 | −100,000円 |
| 100,000円 | −10,000円 |
「ブローカー側に強制ロスカットがあるのでは」と思われるかもしれません。ですが、その水準は保険として遅すぎます。
- 海外口座(ゼロカット):残高がゼロになるまで働きません。つまり破綻するまで止まらない
- 国内口座:証拠金維持率20%前後で強制決済。裏を返せば8割を失ってから止まる
だから自分で先に切る仕組みを内蔵しました。損切りが苦手な方(私もそうです)にとっては、これが最後の砦になります。この機能は有料版のPW MTFSにも入っており、両者で共通の設計です。
なお、パネルのサイド別表示はポジション本数から合計ロット数に変更しました。0.1ロットで3回買って両建てを押すと、従来表示では「Buy 3.0 / Sell 1.0」となり3対1に見えますが、実際は0.3対0.3で中立化されています。現在は「Buy 0.30 / Sell 0.30」と表示され、取引タブを開かずに両建て比率を確認できます。
有料版 PW MTFS との違い
誤解が生まれやすい部分なので、明確にしておきます。有料版の PW MTFS は今後も継続します。サインも自動売買も、MTFS には付いたままです。
| 項目 | PW MTFS(有料) | PW GoldCockpit(無料配布) |
|---|---|---|
| サイン表示 | あり(4種) | なし |
| 自動売買 | あり | なし |
| マルチタイムフレーム判定 | あり | なし |
| 裁量操作パネル | あり | あり |
| 統一SL/TPライン | あり | あり(多端末対応済み) |
| 残高比ロスカット | あり | あり |
| インジ依存 | あり(ペア運用) | なし(単体動作) |
| 位置づけ | サイン+自動売買の本体 | 裁量を学ぶための入口 |
PW MTFS の価値は、サインと自動売買です。GoldCockpit にその機能はありません。取り上げてもいません。
そして、これは方向転換ではありません。自動売買は研究対象として残します。販売中および無料配布中のEAについても、フォワード履歴の分析、パラメーター調整、最適化期間を変えた再検証など、進化できるものは進化させていきます。EAの研究開発は継続します。

なぜ「二刀流」を勧めるのか
自動売買は、決めた条件を休まず淡々と実行します。これは人間に真似できない強みです。一方で、相場の性格そのものが変わったときに「降りる」判断はできません。それができるのは人間だけです。
だから私は、すでに自動売買を回している方にこそ裁量を学んでほしいと考えています。止める判断、待つ判断、ロットを落とす判断。それができるようになると、EAの成績そのものが変わります。裁量を学ぶことが、EAのリスクヘッジになります。
実務的なメリットもあります。ポジションを30本、40本と積む運用をする場合、一括決済・Buyだけ決済・Sellだけ決済・緊急両建てといった操作が手作業では追いつきません。パネルで管理が完結する分、判断そのものに集中できます。こうした「半裁量EA」の開発は今後も続けます。

PW GoldCockpit は無料で配布します
PW GoldCockpit(EA Ver1.15 / インジケーター Ver1.03)は無料で配布します。期限はありません。
| こんな方へ | 得られるもの |
|---|---|
| すでに自動売買を回している方 | 裁量を足して二刀流に。EA運用のリスクヘッジになります |
| これから始める方 | 本格的なチャート環境と発注パネルが無料で手に入ります |
| 勝てていない方 | 道具ではなく、判断の型から作り直せます |
無料で使用したい方は公式ラインで「GP希望」と書いてコメントください。
https://lin.ee/6rSmp8I
EAファイルは容量の都合でLINEではお渡しできないため、メールでの納品となります。あわせて、無料の裁量トレード動画教室も公募中です。
まとめ
- 複数端末で同じEAを動かすと、各端末が独立に決済を実行する。執行権は必ず1台に限定する
- 端末をまたいで共有できるのはブローカー側に保存された値だけ。そこを唯一の正とする
- 採用値は多数決で決めると、はぐれ建玉に引きずられない
- 機能追加は計算負荷とバージョン依存という負債を生む。依存は参照ごと削除するのが最短
- ブローカーの強制ロスカットは遅すぎる。残高比で自分から切る仕組みを持つ
- サインを外すと、判断の根拠を自分で言語化せざるを得なくなる
なぜエントリーしたのか、なぜイグジットしたのか。そこが言葉にできるようになれば、いずれEA化もできます。現時点では言語化しても計算式にしきれない部分が残っているため、研究を続けます。
免責事項
本記事は開発記録および情報提供を目的としたものであり、特定の投資成果を保証するものではありません。記載した数値は筆者の実運用環境およびソースコードに基づく事実ですが、同じ結果を再現することを約束するものではありません。取引はご自身の判断と責任において行ってください。

コメント