マジックナンバーとは|EA複数運用で必須の設定と命名規則の作り方
EAのマジックナンバーは、そのEAが出した注文を識別する整数IDです。重複すると何が壊れるのか、0を避ける理由、通貨ペアごとに分ける理由、命名規則と一覧表の作り方を、MT4/MT5の関数名とエラーコードつきで解説します。
PR当ページにはプロモーション(アフィリエイト広告)が含まれます。順位・評価は公開の評価基準に基づき編集部が独立して決定しています。EAの成績はすべて過去の検証結果であり、将来の利益を保証するものではありません。海外FX業者は金融庁未登録です。
この記事の目次
マジックナンバーは、EAが「どの注文を自分が出したのか」を見分けるための整数IDです。1本だけEAを動かしているうちは意識しなくても動いてしまうため、後回しにされがちな設定です。しかし複数のEAを1つの口座で動かした瞬間、この番号が重複しているかどうかが損益を左右します。この記事では、マジックナンバーの役割、重複したときに何が壊れるのか、そして実際の命名規則と一覧表の作り方を整理します。
結論:マジックナンバーは「自分の注文の目印」
✅ 結論
マジックナンバーの設定ルールは3つだけです。(1) EAインスタンスごとにユニークな値にする、(2) 0は使わない、(3) 同じEAでも通貨ペアが違えば別の値にする。この3つを守り、稼働前に一覧表を作れば、複数EA運用の事故の大半は防げます。
導入手順全体の中では、マジックナンバーの設定は EAの入れ方(導入9手順28ステップ) の手順7にあたります。ファイルの配置や自動売買の許可がまだの場合は、先にそちらを確認してください。
マジックナンバーとは何か
EAが発注するとき、注文には「どのプログラムが出したか」を示す整数を添えられます。これがマジックナンバーです。MetaTraderはこの値を注文・ポジションの属性として保存するため、EAは後から自分の注文だけを抽出できます。
EAの内部処理は、おおむね次の流れで動いています。
- 現在保有しているポジションを一覧で取得する
- マジックナンバーが自分の値と一致するものだけを残す
- 残った件数・ロット・含み損益をもとに、追加エントリーや決済を判断する
つまりマジックナンバーは、2番目のフィルタで使われる唯一の手がかりです。ここが狂うと、3番目の判断がすべて狂います。
MT4での扱い
MT4では OrderSend() の magic 引数で番号を指定します。読み取りは OrderMagicNumber() です。注文プールを OrderSelect() で走査し、OrderMagicNumber() == MagicNumber かつ OrderSymbol() == Symbol() の条件で絞り込む書き方が一般的です。
MT5での扱い
MT5では MqlTradeRequest 構造体の magic メンバーに値をセットして発注します。保有ポジションから読み取る場合は PositionGetInteger(POSITION_MAGIC) を使います。MT4とはAPIが根本的に異なりますが、マジックナンバーの役割そのものは同じです。
重複すると何が壊れるのか
マジックナンバーが重複すると、EAは他のEAのポジションを自分のものとして数えます。壊れるのは1か所ではなく、連鎖的に複数の処理です。
| 壊れる処理 | 具体的に起きること |
|---|---|
| 保有件数のカウント | 他EAのポジションを数え、最大ポジション数に達したと誤認して新規エントリーを止める |
| ロット計算 | 既存ロットを基準に次のロットを決めるEAで、他EAのロットを積算して過大なロットを要求する |
| ナンピン・グリッドの段数判定 | 他EAのポジションを自分の段数として数え、想定より早く最終段に到達する |
| 決済ロジック | 他EAのポジションを自分の利確・損切り条件で決済してしまう |
| トータル利益での一括決済 | 他EAの含み損益を合算して判定し、意図しないタイミングで全決済する |
🚨 危険
最も深刻なのは4番目と5番目です。片方のEAが、もう片方のEAが育てているポジションを決済してしまうと、決済されたEAは「まだポジションがある前提」で動き続けます。ログ上はどちらも正常に見えるため、発覚が遅れます。
複数EAを1口座で運用する前提そのものについては、 EAは何本まで同時に動かせるか と EAポートフォリオの組み方 もあわせて確認してください。
0を避ける理由
マジックナンバー0は、手動で出した注文に付く値です。MetaTraderの画面から自分でクリックして発注したポジションは、マジックナンバーが0として記録されます。
EAのマジックナンバーを0のままにすると、EAは手動ポジションと自分のポジションを区別できません。裁量トレードとEAを同じ口座で併用している場合、EAが手動ポジションを決済する、あるいは手動ポジションを自分の段数として数えるといった動作が起こり得ます。
⚠️ 注意
EAによってはマジックナンバーの初期値が0になっています。パラメータ一覧に `MagicNumber` `Magic` といった項目があり、値が0のままになっていないかを、チャート適用時に必ず確認してください。
通貨ペアごとに別の値にする理由
同じEAをUSDJPYとEURUSDの2つのチャートに適用する場合でも、マジックナンバーは分けます。理由は、多くのEAがポジションを絞り込むときに通貨ペアの条件を併用するとは限らないためです。
通貨ペアで絞っていないEAでは、USDJPY担当のインスタンスがEURUSDのポジションも自分のものとして数えます。通貨ペアで絞っているEAでも、番号が同じだと後からログを追うときに区別できません。どちらの意味でも、分けておくほうが安全です。
💡 ポイント
「EAの本数」ではなく「チャートに適用したインスタンスの数」だけ番号が必要です。3本のEAをそれぞれ2通貨ペアで動かすなら、必要な番号は6個になります。
命名規則の作り方
番号は自由に決められますが、思いつきの連番にすると、半年後にログを見たときにどれがどのEAか分からなくなります。桁ごとに意味を割り当てておくと、番号を見るだけで内容を読み取れます。
代表的な作り方が「EA種別2桁+通貨ペア2桁+時間足1桁」という並べ方です。例として 120501 という番号を分解します。
| 位置 | 値 | 意味 | 対応表の例 |
|---|---|---|---|
| 先頭2桁 |
| EA種別 | 10=トレンドフォロー / 11=スキャルピング / 12=グリッド / 13=ナンピン |
| 中央2桁 |
| 通貨ペア | 01=USDJPY / 02=EURUSD / 03=EURJPY / 04=GBPJPY / 05=XAUUSD |
| 末尾 |
| 時間足 | 01=M15 / 02=H1 / 03=H4 / 04=D1 |
この例では 120501 は「グリッド系EA・XAUUSD・M15」を意味します。時間足の桁は、扱う時間足が9本以内なら1桁、余裕を持たせるなら2桁にしてください。対応表そのものは自分で決めて構いません。重要なのは、決めた対応表をEA一覧と同じ場所に残しておくことです。
マジックナンバー一覧表のテンプレート
稼働前に、次の形式の表を作ってください。番号の重複はこの表を作る段階で気づけます。
| マジックナンバー | EA名 | 口座 | 通貨ペア | 時間足 | 想定最大ポジション数 | 備考 |
|---|---|---|---|---|---|---|
| 120501 | (EA名) | (口座番号) | XAUUSD | M15 | 8 | グリッド・SLあり |
| 120101 | (EA名) | (口座番号) | USDJPY | M15 | 8 | グリッド・SLあり |
| 100202 | (EA名) | (口座番号) | EURUSD | H1 | 1 | トレンドフォロー |
| 110402 | (EA名) | (口座番号) | GBPJPY | H1 | 3 | スキャルピング |
「想定最大ポジション数」の列を入れておくのがポイントです。この列の合計が、業者の保有ポジション数上限を超えていないかを事前に確認できます。EAの組み合わせが自分の資金や方針に合っているかを整理したい場合は、 EA適性診断 も使えます。
保有数の上限に関係するエラーコード
マジックナンバーを分けても、口座単位の上限は共有されます。上限に達したときのコードは次の通りです。
| コード | 定数 | 公式説明(原文) |
|---|---|---|
| MT4: 148 |
| "The amount of open and pending orders has reached the limit" |
| MT5: 10033 |
| "The number of pending orders has reached the limit" |
| MT5: 10034 |
| "The volume of orders and positions for the symbol has reached the limit" |
| MT5: 10040 |
| "The number of open positions simultaneously present on an account has reached its limit" |
出典: MQL4 Error Codes / MQL5 Trade Server Return Codes (確認日 2026年9月24日)
ナンピン・グリッド系EAを複数通貨ペアで動かすと、この上限には簡単に到達します。事前に「EA数 × 想定最大ポジション数」を計算し、業者の上限内に収まるかを確認してください。上限値は業者・口座タイプによって異なるため、公式ドキュメントで確認してください。
MT4固有:146 Trade context is busy
MT4のトレードコンテキストはプロセス全体で1つしかありません。複数EAが同時に発注しようとすると衝突し、146 ERR_TRADE_CONTEXT_BUSY("Trade context is busy")が発生します。マジックナンバーの設計とは別の問題ですが、複数EA運用では必ず付いてくる論点です。
対処は2段階です。EA側では IsTradeContextBusy() をチェックし、Sleep() で待つループを入れます。根本的に避けるなら、EAごとに別フォルダへMT4をインストールし、別プロセスとして起動します。手順は MT4を複数起動して運用する方法 にまとめています。MT5はマルチスレッドのため、この問題は発生しません。
よくある失敗
- チャートに適用するたびに番号を変えるのを忘れる。 2本目以降のインスタンスで初期値のまま OK を押してしまうパターンです。適用直後に、パラメータ画面を開き直して値を確認してください。
- セットファイルを使い回して番号ごとコピーする。
.setファイルにはマジックナンバーも含まれます。読み込んだ後に必ず番号を書き換えてください。 - ポジションを持ったまま番号を変更する。 変更前のポジションがEAから見えなくなり、決済されずに残ります。停止・全決済してから変更してください。
- 一覧表を作らずに記憶で運用する。 EAが3本を超えると記憶では管理できません。表にして、口座情報と同じ場所に保存してください。
発注が拒否されている場合は、 MT4/MT5の注文エラーコード一覧 でコードの意味を確認できます。EAが動いているのに取引しない場合は EAが動かないときのチェックリスト が出発点になります。
まとめ
マジックナンバーは、EAが自分の注文を識別するための整数IDです。守るルールは「ユニークにする」「0を使わない」「通貨ペアごとに分ける」の3つで、これを稼働前の一覧表で担保します。
重複したときに壊れるのはカウント処理だけではありません。ロット計算、段数判定、決済ロジックまで連鎖して狂い、しかもログ上は正常に見えます。だからこそ、稼働後に気づくのではなく、稼働前の表で潰しておく種類の設定です。
複数EA運用を前提にするなら、あわせて EAは何本まで同時に動かせるか で本数の考え方を、 EAを停止する判断基準 で撤退ルールを決めておいてください。導入手順全体は EAの入れ方 に戻って確認できます。
よくある質問
Q.マジックナンバーは何番にすればよいですか?
Q.マジックナンバーが0のままだと何が起きますか?
Q.同じEAを複数の通貨ペアで動かすときも、番号を分ける必要がありますか?
Q.マジックナンバーを途中で変更しても大丈夫ですか?
Q.マジックナンバーを分ければ、EAは何本でも同じ口座で動かせますか?
関連記事
MT4/MT5 EAの入れ方|導入9手順28ステップと稼働確認まで
更新: 2026年9月24日
導入・設定MT4のEAはスマホだけでは動かせない|公式根拠と代替手段4つを解説
更新: 2026年9月24日
導入・設定MT4を同一PCで複数起動する方法|必要スペックとメモリ目安の早見表
更新: 2026年9月24日
導入・設定MT4サーバー時間とGMTオフセットの読み方|夏冬のズレ早見表と確認手順
更新: 2026年9月24日
導入・設定EAの複利設定のやり方|リスク率ベースのロット計算式と危険になる3局面
更新: 2026年9月24日
導入・設定夏時間・冬時間の切り替えでEAが狂う理由と対処法|ズレる期間も解説
更新: 2026年9月24日