本文へスキップ
導入・設定

マジックナンバーとは|EA複数運用で必須の設定と命名規則の作り方

EAのマジックナンバーは、そのEAが出した注文を識別する整数IDです。重複すると何が壊れるのか、0を避ける理由、通貨ペアごとに分ける理由、命名規則と一覧表の作り方を、MT4/MT5の関数名とエラーコードつきで解説します。

執筆: Redington 公開: 最終更新:

PR当ページにはプロモーション(アフィリエイト広告)が含まれます。順位・評価は公開の評価基準に基づき編集部が独立して決定しています。EAの成績はすべて過去の検証結果であり、将来の利益を保証するものではありません。海外FX業者は金融庁未登録です。

この記事の目次
  1. 結論:マジックナンバーは「自分の注文の目印」
  2. マジックナンバーとは何か
    1. MT4での扱い
    2. MT5での扱い
  3. 重複すると何が壊れるのか
  4. 0を避ける理由
  5. 通貨ペアごとに別の値にする理由
  6. 命名規則の作り方
  7. マジックナンバー一覧表のテンプレート
  8. 保有数の上限に関係するエラーコード
    1. MT4固有:146 Trade context is busy
  9. よくある失敗
  10. まとめ

マジックナンバーは、EAが「どの注文を自分が出したのか」を見分けるための整数IDです。1本だけEAを動かしているうちは意識しなくても動いてしまうため、後回しにされがちな設定です。しかし複数のEAを1つの口座で動かした瞬間、この番号が重複しているかどうかが損益を左右します。この記事では、マジックナンバーの役割、重複したときに何が壊れるのか、そして実際の命名規則と一覧表の作り方を整理します。

結論:マジックナンバーは「自分の注文の目印」

✅ 結論

マジックナンバーの設定ルールは3つだけです。(1) EAインスタンスごとにユニークな値にする、(2) 0は使わない、(3) 同じEAでも通貨ペアが違えば別の値にする。この3つを守り、稼働前に一覧表を作れば、複数EA運用の事故の大半は防げます。

導入手順全体の中では、マジックナンバーの設定は EAの入れ方(導入9手順28ステップ) の手順7にあたります。ファイルの配置や自動売買の許可がまだの場合は、先にそちらを確認してください。

マジックナンバーとは何か

EAが発注するとき、注文には「どのプログラムが出したか」を示す整数を添えられます。これがマジックナンバーです。MetaTraderはこの値を注文・ポジションの属性として保存するため、EAは後から自分の注文だけを抽出できます。

EAの内部処理は、おおむね次の流れで動いています。

  1. 現在保有しているポジションを一覧で取得する
  2. マジックナンバーが自分の値と一致するものだけを残す
  3. 残った件数・ロット・含み損益をもとに、追加エントリーや決済を判断する

つまりマジックナンバーは、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桁

12

EA種別

10=トレンドフォロー / 11=スキャルピング / 12=グリッド / 13=ナンピン

中央2桁

05

通貨ペア

01=USDJPY / 02=EURUSD / 03=EURJPY / 04=GBPJPY / 05=XAUUSD

末尾

01

時間足

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

ERR_TRADE_TOO_MANY_ORDERS

"The amount of open and pending orders has reached the limit"

MT5: 10033

TRADE_RETCODE_LIMIT_ORDERS

"The number of pending orders has reached the limit"

MT5: 10034

TRADE_RETCODE_LIMIT_VOLUME

"The volume of orders and positions for the symbol has reached the limit"

MT5: 10040

TRADE_RETCODE_LIMIT_POSITIONS

"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はマルチスレッドのため、この問題は発生しません。

よくある失敗

  1. チャートに適用するたびに番号を変えるのを忘れる。 2本目以降のインスタンスで初期値のまま OK を押してしまうパターンです。適用直後に、パラメータ画面を開き直して値を確認してください。
  2. セットファイルを使い回して番号ごとコピーする。 .set ファイルにはマジックナンバーも含まれます。読み込んだ後に必ず番号を書き換えてください。
  3. ポジションを持ったまま番号を変更する。 変更前のポジションがEAから見えなくなり、決済されずに残ります。停止・全決済してから変更してください。
  4. 一覧表を作らずに記憶で運用する。 EAが3本を超えると記憶では管理できません。表にして、口座情報と同じ場所に保存してください。

発注が拒否されている場合は、 MT4/MT5の注文エラーコード一覧 でコードの意味を確認できます。EAが動いているのに取引しない場合は EAが動かないときのチェックリスト が出発点になります。

まとめ

マジックナンバーは、EAが自分の注文を識別するための整数IDです。守るルールは「ユニークにする」「0を使わない」「通貨ペアごとに分ける」の3つで、これを稼働前の一覧表で担保します。

重複したときに壊れるのはカウント処理だけではありません。ロット計算、段数判定、決済ロジックまで連鎖して狂い、しかもログ上は正常に見えます。だからこそ、稼働後に気づくのではなく、稼働前の表で潰しておく種類の設定です。

複数EA運用を前提にするなら、あわせて EAは何本まで同時に動かせるか で本数の考え方を、 EAを停止する判断基準 で撤退ルールを決めておいてください。導入手順全体は EAの入れ方 に戻って確認できます。

よくある質問

Q.マジックナンバーは何番にすればよいですか?
決まった正解はありません。条件は「0以外」「口座内で重複しない」「自分が後から意味を読み取れる」の3つだけです。EA種別・通貨ペア・時間足に桁を割り当てて 120501 のように体系化しておくと、ログを見ただけでどのEAの注文かが分かります。思いつきの連番よりも、桁で意味を持たせた番号のほうが運用中に追跡しやすくなります。
Q.マジックナンバーが0のままだと何が起きますか?
0は手動で出した注文のマジックナンバーと同じ値です。EAが「マジックナンバー0の注文」を自分のポジションとして数えてしまい、手動で建てたポジションを勝手に決済したり、ナンピン段数の判定を誤ったりする可能性があります。EAのパラメータで0以外の値を指定できる場合は、必ず変更してください。
Q.同じEAを複数の通貨ペアで動かすときも、番号を分ける必要がありますか?
分けてください。EAは自分のマジックナンバーを手がかりにポジションを数えます。USDJPYとEURUSDで同じ番号を使うと、USDJPY担当のインスタンスがEURUSDのポジションも自分のものとして数えます。その結果、ロット計算、最大ポジション数の判定、決済ロジックが同時に狂います。チャートに適用するたびに別の値を入れてください。
Q.マジックナンバーを途中で変更しても大丈夫ですか?
ポジションを保有したまま変更すると、EAは変更前のポジションを自分のものと認識できなくなります。結果として、決済されないまま放置されるポジションが残ります。変更するのは全ポジションを決済してEAを停止した状態にしてからにしてください。変更後はデモ口座で1往復のトレードを通して確認すると安全です。
Q.マジックナンバーを分ければ、EAは何本でも同じ口座で動かせますか?
いいえ。番号を分けても、業者が定める最大保有ポジション数や銘柄ごとの数量上限は口座単位で効きます。上限に達すると、MT4は148、MT5は10033・10034・10040のコードで発注が拒否されます。また証拠金は共有されるため、1本のEAのドローダウンが他のEAを巻き込みます。本数の考え方は関連記事を確認してください。

関連記事