マジックナンバー・ジェネレーター
EA 用のマジックナンバーとして、ランダムな 8 桁の整数値を生成するツールです。
生成されたコードを .mq5
コード内にコピペして使ってください。
変数 Magic
の値は、MqlTradeRequest
構造体の magic
フィールドなどにセットして使用します。
マジックナンバーとは
MT4/5 の EA(エキスパートアドバイザ)から何らかの注文を出す場合、マジックナンバーと呼ばれる整数値を設定する必要があります。 これは、OrderSend 関数 で注文を出す場合も、CTrade クラス で注文を出す場合も同様です。 具体的には次のようにマジックナンバーを指定します。
- MT5 の OrderSend 関数の場合 …
MqlTradeRequest
オブジェクト のmagic
フィールド(uint 値) - MT5 の CTrade クラスの場合 …
SetExpertMagicNumber
メソッド(uint 値) - MT4 の OrderSend 関数の場合 …
magic
パラメータ(int 値)
このマジックナンバーは、どの EA から出された注文かを識別するため のものであり、1 つの口座内で複数の EA を動かすときは、それぞれ異なる値を割り当てておく必要があります。 マジックナンバーが重複してしまうと、別の EA から注文を修正されてしまうといった誤動作の原因になります。 マジックナンバーを設定しなくても注文用の API は呼び出せてしまいますが、このときはデフォルト値として 0 が使われます。 0 というマジックナンバーは手動でのエントリーを示す ものであり、EA のコードでは何らかの一意なマジックナンバーを指定しておく必要があります。
マジックナンバーは取引リストの画面では、「エキスパート ID」と表示されたりします。 正確には、マジックナンバーは EA ごとの ID というよりは、複数の取引をまとめて管理するための識別子です。 なので、1 つの EA の中で複数のマジックナンバーを扱うこともできます。 例えば、次のような EA で注文の種類ごとにマジックナンバーを割り当てたりします。
- 複数の時間足で同時に注文を出す EA
- 複数のアルゴリズムで同時に注文を出す EA
注文の種類ごとにマジックナンバーを割り当てることにより、アルゴリズム別に損益合計を求めたり、注文をまとめて決済したりできます。 とはいっても、シンプルな EA であれば、マジックナンバーは 1 つだけで十分です。
マジックナンバーの定義方法
マジックナンバーは、MT4 では int 型整数(最大値は 2147483647
)、MT5 では uint 型整数(最大値はすごく大きな値)で設定します。
互換性を考えると 9 桁以下にしておくのが無難ですが、口座内で一意な値であればよいので、それほど大きな値を設定する必要はありません(5 桁とかでも十分)。
EA のコード内にマジックナンバーをハードコードしてしまうと、別の EA のものと重複した場合に困るので、マジックナンバーは外部パラメータとして値を変更できるようにしておくことをオススメします。
次の例では、マジックナンバーのデフォルト値を 71952000
に設定しつつ、ユーザーが自由に設定する余地を残しています。
関連記事
- MetaTrader/MQL5: シンボル名を取得する (Symbol, ChartSymbol, SymbolsTotal, SymbolName)
- MetaTrader/MQL: 表示しているチャートを列挙する (ChartFirst, ChartNext)
- MetaTrader/MQL: CTrade クラスで注文を出す (MT5)
- MetaTrader/MQL: OrderSend の引数を理解する - MqlTradeRequest/MqlTradeResult 構造体 (MT5)
- MetaTrader/MQL: 通貨(シンボル)のポイントサイズ、Digit 数を調べる (Point, Digits, SymbolInfoDouble)
- MQL で Hello World
- MetaTrader/MQL: MQL4 と MQL5 のどちらでコンパイルされているか調べる