「EAを複数動かしたら、勝手にポジションが決済された…」
「裁量とEAを併用したら、意図しない決済が起きた」
こんなトラブルの原因の多くは、実は マジックナンバーの未設定・理解不足 にあります。
マジックナンバーは、“どのEAが持ったポジションなのか” を判別する専用IDです。
初心者には分かりにくい仕組みですが、正しく扱わないと運用トラブルが必ず発生します。
- マジックナンバーの正しい意味と役割
- 複数EA・裁量併用で必須になる理由
- EAでの設定方法(OrderSend)
- 決済時にマジックナンバーを参照する方法
- 単ポジEAのエントリー判定に必要なチェック方法
- 初心者がやりがちな失敗と回避方法
この記事では、初心者でも理解できるように、マジックナンバーの仕組み・必要性・設定方法を
図解+MQL4サンプルコード付きでやさしく解説します。
複数EAの運用や裁量併用を考えている方は、必ず役立つ内容です。
マジックナンバーとは?初心者向けに最も簡単に解説
まず、EAを使っていると必ず耳にするマジックナンバーですが、開発者の方もそうでない方もざっくりとどういった物か理解しておきましょう。難しそうですがとてもシンプルな仕組みです。
マジックナンバーを身近な物で例えると、クリーニング屋さんの服につけるタグです。クリーニングの「引換タグ」のように、どのお客さん(どのEA)の持ち物(ポジション)なのかを区別するための目印がマジックナンバーです。これが全てです。
マジックナンバーの概要
では、もう少し具体的にマジックナンバーについて確認していきましょう。
MT4ではマジックナンバーに設定できる値の最大(MAX)値は2147483647です。これを超える数値を設定しようとしても、2147483647になってしまいます。なのでマジックナンバーを自分で設定する場合はこの範囲内で設定しましょう。
EAは、新規注文をする際にEA開発者が(OrderSend()関数で)マジックナンバーを『このEAのマジックナンバーは77777だ!』って簡単に設定する事ができます。開発者でなくても市販で販売されているEAであれば基本的にマジックナンバーはパラメータ設定で設定できます。
ちなみに、裁量トレードをした場合のポジションは強制的にマジックナンバーが0となります。
このマジックナンバーですが、必要なの?何番に設定したらいいの?といった疑問について考えていきます。
マジックナンバーって必要?
そもそも、マジックナンバーは必要なのか?結論としては、必須ですが以下の1つだけ例外があります。
※もし複数のEAを稼働させる場合は、複数のFX口座でそれぞれ動かす
この場合、マジックナンバーは不要です。
なのでマジックナンバーは考えず手っ取り早くEAを動かしたい(裁量トレードもしたい)ってなった場合は、
- EA①のFX口座
- EA②のFX口座
- 裁量トレード用のFX口座
という風にFX口座をわけるとOKです。
裁量トレードも分けている理由は、もしマジックナンバー対応されていないEAがあったとすると裁量トレードのポジションを勝手に決済してしまうためです。
FX口座をわけると、A社のMT4で動かしているEAがさすがにB社でトレードしているポジションを決済しちゃうなんてことは無いですよね。
ただ1つの口座で複数のEAを稼働したり裁量トレードをする場合、EA①がEA②や裁量トレードのポジションを勝手に決済したりするのでマジックナンバーは必須になってきます。
👉 MT4・EAが使える国内FX業者を確認する場合はこちら
マジックナンバーが設定されていない場合の動き
複数のEAを1つの口座で稼働させる場合、EAが別のEAのポジションを決済してしまわないように、マジックナンバーを用いてどのEAのポジションなのかを判別する必要があります。実際にEAを2つ動かしていることを想定しながら考えてみましょう。
マジックナンバー対応されていないEAの問題点

例えばこんな感じで、左のEA①と右のEA②別々のEAを1つのFX口座で稼働させており、左のEA①が新規エントリーしてポジションを持っている状態とします。
ここで、右のEA②がたまたま決済タイミングだとしたらどうでしょう?左のEA①のポジションなのに右のEA②が決済してしまう・・・なんていう可能性がありますよね。EA①のタイミングで新規エントリーしたのに、EA②のタイミング的には決済だった場合、EA①の新規エントリーでポジションを持った瞬間、EA②によって勝手に決済されてしまうなんて事も起きて困ります。
どちらのEAが持ったポジションなのかを分別できなければ、EA①がEA②のポジションを勝手に決済してしまうんです。
※EA①とEA②でFX口座をわけちゃうとさすがに別のFX口座のポジションまでは干渉できないので、問題がなくなるわけですね
さて、この問題を1つの口座内で解決するにはどうしたら・・・といった時に解決してくれるのがマジックナンバーです。
各ポジションにマジックナンバーを設定し、EA①のポジションなのかEA②のポジションなのかを判別していきます。
⚙️ EAでマジックナンバーを設定する方法
EAを自作する場合
まず、EA(左側のEA①)を作る際は新規エントリー時にマジックナンバーを設定してあげましょう。
OrderSend( // 新規エントリー注文
NULL, // 通貨ペア
ea_order_entry_Type, // オーダータイプ[OP_BUY / OP_SELL]
Lot, // ロット(FXTFは1=10Lot)
ea_order_entry_price, // オーダープライスレート
20, // スリップ上限
order_stop_price, // ストップレート
order_good_price, // リミットレート
orderComment, // オーダーコメント
999, //★マジックナンバー★
0, // オーダーリミット時間
order_Color // オーダーアイコンカラー
);マジックナンバー「999」を設定したい場合はこんな感じにします。これだけでEAがポジションを持った際に、マジックナンバーが設定されます。
手持ちEAのマジックナンバーを設定する場合
自作ではないEAのマジックナンバーを設定する際は殆どの確率でパラメータ設定にありますのでそこを参照・設定してあげましょう。設定や取説にマジックナンバーの記載がない場合は作者に問い合わせましょう。

マジックナンバーの確認方法
EAのマジックナンバーをちゃんと設定していた場合、MT4上でも簡単に確認する事ができます。実際に、EAがポジションを持った際のマジックナンバーをMT4で見てみましょう。
マジックナンバーの確認方法は簡単で、以下イメージのように確認したいポジションにマウスカーソルをあてます。

すると、こんな感じで一番右側にエキスパートIDが表示されます。エキスパートID「999」がEAのマジックナンバーです。よって、上側のポジションは左側のEA①という事がわかります。
下側のポジションはどうでしょうか。

下側のポジションのマジックナンバーを見てみると、マジックナンバーは「111」となっています。「111」は右側のEA②で設定したものなので、このポジションはEA②のものだという事がわかります。
EAの開発としては、これでマジックナンバー対応は「完了」!
というわけではないですよ!先ほど目でみたようにEA開発時もマジックナンバーはちゃんと見てエントリーや決済などをしないといけないですよね。
【開発者向け】決済する際もマジックナンバーは見ないといけない
今までの解説ではポジションにマジックナンバーを持たせているだけなので、決済時にもマジックナンバーを見ないとマジックナンバー「111」「999」に限らず最新のポジションを決済しちゃいます。なので決済時にもマジックナンバーを見て違うEAのマジックナンバーであれば決済しないように作る必要があります。
OrderSelect()関数でマジックナンバーを確認する事ができます。
あとは現在のポジション数分ループして、各ポジションのマジックナンバーを見て、当該EAのポジションがなければ何もしない・当該EAのポジションがあれば決済するという作りにしないといけないのでややコード量は増えますが、正しく判別するために必要な処理です。
EAが複数のポジションを持つ可能性がある場合、各ポジションのマジックナンバーを参照して判別します。
for(int order_cnt = 0; order_cnt < OrdersTotal(); order_cnt++){
bool OrderKekka = OrderSelect(order_cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber() == 999 && OrderKekka == true){
OrderKekka = OrderClose(OrderTicket(),OrderLots(),・・・・);
}
}【開発者向け】エントリーする際もマジックナンバーは見ないといけない
あとは複数のポジションを持たないEAの場合は、新規エントリー時に既にポジションを持っているのかどうかを確認する必要があります。
int total = OrdersTotal();
bool hoji=false;
if(total > 0){
for(int cnt = 0; cnt < total; cnt++){
OrderKekka = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber() == 999){
//ポジション保持中
hoji=true;
}
}
}
if(hoji==false){
//新規注文する
OrderSend(・・・・・
}こうしておかないと、別のEAのポジションなのにポジションを既に持ってるからエントリーしないなんて事が起きちゃいます。
作り方はいくらでもあると思いますが、単純にポジションがある場合は全てのポジションのマジックナンバーを確認したいのでこんな感じでループさせて見てあげればOKです。
❓ マジックナンバーに関するFAQ
💬 マジックナンバーに関するよくある質問をまとめました。
複数EAを1つのFX口座で動かしたり、裁量と併用する場合は必ず必要です。 ただし、1つの口座で1つのEAのみ運用する初心者の場合は、重大トラブルが起きるケースは多くありません。
いいえ。裁量トレードで持ったポジションは強制的にマジックナンバーが0となります。 EAで Magic=0 のポジションを誤って決済しないよう注意が必要です。
EAごとに絶対に重複しない番号を割り当てるだけでOKです。 連番(1001、1002、1003…)や、EAごとにグループを分けて付けると管理しやすくなります。
いいえ、売買ロジックには影響しません。 マジックナンバーはあくまで「ポジションの識別ID」であり、エントリー条件や決済条件には影響しません。
EAが他のEAや裁量のポジションを誤って決済する可能性が高くなります。 特に複数EA運用時は重大トラブルの原因になるため必ず設定してください。
✅ まとめ|マジックナンバーは “複数運用するなら必須の安全装置”
マジックナンバーは、『どのEAが持ったポジションなのかを判別するためのID』です。 特に、1つのFX口座で複数EAを運用する場合、またはEAと裁量を併用する場合は、ポジションの取り違え・誤決済を防ぐために絶対に必要になります。
逆に言えば、1つのEAだけを運用している初心者の場合は、すぐに重大トラブルが起きるケースは多くありません。 (実際に、初心者はこの状態からスタートすることがほとんどです)
ただし、後から別のEAを追加したり裁量トレードを併用し始めると、突然トラブルが発生しやすくなります。 そのため、最初の段階からマジックナンバーを設定しておくことが、将来的なリスク回避として非常に有効です。
- ✔ EAごとにマジックナンバーを分ける
- ✔ 決済・エントリー時はマジックナンバーを参照する
- ✔ 裁量併用時は “Magic=0” の扱いに注意する
マジックナンバーを正しく扱うだけで、EA運用の予期せぬトラブルの大半は回避できます。 ぜひ今日から自分のEA運用に取り入れてみてください。
✅ 他にも多数のEAサンプルを公開中!
今回紹介した内容以外にも、当サイトではさまざまな
FX自動売買EAのサンプルコードを提供しています。
自分に合った戦略のEAを見つけたい方は、ぜひチェックしてみてください。
📊 【2025年最新】FX自動売買EAランキングも公開中!
当サイトの「どのEA(インジ)が実際に勝っているのか?」を知りたい方はこちら👇
PF(プロフィットファクター)や勝率で徹底比較した最新ランキングから、あなたに最適なEA(インジ)を見つけましょう。
EA開発初心者向けに、今後も実践的なMQL4関数を紹介していきます。
気になる機能やロジックがあれば、ぜひ他の記事もあわせてご覧ください!













コメント
解説ありがとうございます。EA初心者です。
マジックナンバーの設定に関して、複数のEAの意味が曖昧で理解できずに困ってましたがようやく少し分かってきました。
あるEAが複数の通貨に対応しているので、複数のチャートに適用しているのですが、それの場合も複数のEA(つまりマジックナンバーを変える必要がある)に該当するのかという問題。
多分ですが、同じ通貨に対して複数割り当てる場合に問題になるのかなと理解しました。なので、通貨が異なる場合は同じ番号でもよいという理解で相違ないでしょうか?
逆に言うと、同じEAでも同じ通貨に割り当てれば(例えば、15分足と1時間足のチャートを立てて同じEAを入れた場合など)干渉して問題になる??んですかね。
はじめまして、フープさん。
『同じ通貨に対して複数割り当てる場合に問題になる』という認識でOKです。
同様に、『同じEAでも同じ通貨に割り当てれば(例えば、15分足と1時間足のチャートを立てて同じEAを入れた場合など)干渉して問題になる』という認識でOKです。
これは、EAがエントリーや決済する際『どの通貨ペアを決済するか』というのをEA開発者があらかじめ設定できるのですが、『どの時間足でエントリーしたポジションを決済するか』という設定はできないため干渉してしまいます。
そういった場合、1時間足でエントリーしたポジションだとわかるようマジックナンバーを11111を設定し、15分足のEAのマジックナンバーを別の55555とかに設定してあげると、EAがちゃんとマジックナンバーを見る作りになっていれば1時間足のEAは11111のマジックナンバーがついているポジションだけ処理し、15分足のEAは55555のマジックナンバーがついているポジションだけ処理するといった感じになります。