見出し画像

MT4小ネタno.3 Magic Numberとは何?

こんにちは。
本日は、MT4で作成するEAに関する小ネタです。

この記事では、MT4のEAで利用するMagic Numberについて私の経験、おび、調べて理解したことを共有します。

◾背景

FXトレードの自動売買のEAスクリプトを作成、運用しています。
こちらのマガジンで経緯がご確認いただけます。

当初、EURJPY通貨ペアのみでトレードを始めて、その後去年12月よりEURUSDペアも参戦しました。
単独通貨ペアでトレードしていた際には問題がなく、その後通貨ペアを増やしたところEAが正しく稼働しないというトラブルが発生しました。
根本的な理由は、私のMT4の仕組み、EAの理解不足です。
運用するEAのスクリプトもAIに作成してもらったものがベースで、作成されコードを完全には理解していないことが原因となりました。
バックテスト、および、デモ口座で確認はしていましたが、複数通貨ペアを同時稼働という観点でのテストができていなかったため、テスト・デモ段階では問題が発覚しませんでした。

具体的な問題としては、EURJPY、EURUSDの通貨ペアごとにEAスクリプトを作成、EURUSDはEURJPY用のスクリプトをコピーして変更したものでした。
その結果、スクリプトで利用している MAGIC NUMBERが同一のものになっていたことが原因です。

#define MAGIC_NUMBER 101002001

この記事では、そもそも Magic Numberとは何なのか、その用途についてご紹介したいと思います。
この Magic Numberについて説明している記事、ブログもたくさんあります。
この記事では、少し深く掘り下げて理解し、また、どう活用できそうかといった視点でご紹介したいと思います。

◾MT4のMagic Numberとは

Magic Numberとは何なのかは、こちらの説明が分かり易いです。

https://www.mql5.com/ja/articles/1359

Magic Numberは、オーダーに固有の番号を割り当て、オーダーを区別するために利用できるユーザー定義の識別子。

どのEAからの注文なのかを識別するためのものと説明されているブログがありますが、正確には正しくありません。
正確には、ユーザー定義なので好きなように利用できます。
オーダーを作成する際に指定する識別子というだけです。
以下のOrderSendを実行する際のパラメータに含まれます。

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

このMagic Numberは典型的には、EAとしてトレードルールを複数起動した場合に、EAごとのOrderを識別するために利用できます。
ここで、MT4のOrderを実行する単位について整理すると以下のようになります。

  • MT4インスタンス

    • EAスクリプト(トレードルール)

      • チャート(通貨ペア・時間枠。同一もあり)

全く同じEAスクリプト・チャートの組み合わで複数のMT4インスタンスで実行した場合は、同じMagic Numberでは識別ができなくなります。
また、同じMT4インスタンスであっても、同じ通貨ペア・時間枠のチャートを二つ作成し、それぞれで同じEAスクリプトを稼働するとMagic Numberの競合が発生します。

ここで、私がEURJPYに追加して、EURUSDの運用を開始した際には同じMagic Numberを利用したことにより以下の問題が発生しました。

  • EURJPYで注文残があり、EURUSDの注文がされなかった。(ルールでポジションは一つと限定していたため)

  • EURJPYの注文をEURUSDのルールで決済してしまった。(EURUSDの利確幅の単位が1/100程度のため、すぐ利確となるケースが多発した)

というように、トレードルールが競合することにより、収拾がつかない状態になりました。
当初、フォワードテストとして最小ロットでの取引をしていて大きな損はでませんでしたが、最初は意味不明で非常に焦りました。
こういったトラブルを避けるために利用できるのか、Magic Numberですが使い方によっては、それ以外の用途でも利用できます。

◾Magic Numberの活用方法

MT4の Orderの単位は、MT4インスタンス・EAスクリプト・チャートの区分ごとになります。
Magic Numberの活用方法として、単純にOrderを区分するだけでなく、複数のEA間の連携にも利用できると考えます。

例えば、私がトライしている利小損大のFXトレード戦略は、一日数回のエントリーでポジション保持は短時間で終わるケースが多いです。
つまり、資金(証拠金)としては遊んでいる時間が長い。
現在は、通貨ペアごとに資金を分けてその資金量に応じたロット数しかポジションを保持していません。
これを、資金を分けずに、どちらの通貨ペアのポジションもない場合にエントリーするという形にするとロット数が大きくでき、資金・証拠金をより有効活用できる可能性があります。

具体的には、資金を分ける場合(現状)と分けない場合の違いは以下のようになります。

◾1.資金を分ける
 ◽ EURJPY  資金=50万。ロット=0.5。エントリー時間  8:30, 15:30,  19:00
 ◽ EURUSD 資金=50万。ロット=0.5。エントリー時間  9:15, 12:00,  21:00
◾2.資金を分けない
 ◽ EURJPY  資金=100万。ロット=1。エントリー時間  8:30, 15:30,  19:00
 ◽ EURUSD 資金=100万。ロット=1。エントリー時間  9:15, 12:00,  21:00

2の場合には、資金は共有するので、どちらかの通貨ペアのポジションが残っている場合、エントリーしません。(証拠金不足でそもそもエントリーできない)
ポジション保有時間が長いと、他の通貨ペアのエントリーが少なくなりますが、仮に両通貨ペアの保有時間が短く済むようであれば、ロット数が増えているため利益率も2倍程度になる可能性があります。

なお、Magic Numberを利用して複数EA間の連携をする場合には、EAをそれなりに工夫する必要があります。
私が現在運用しているFXトレード戦略の場合、以下の対応をすることにより上記の資金の共通化、効率的な利用ができそうです。

  • Magic Numberを同一にする

  • 決済(ロジックによる利確判定、および、保有時間経過による手仕舞い判定)をEAAごと

Magic Numberを共有する資金単位で同一にし、エントリーを制御します。
EAロジックで判定する決済については、EAスクリプトごとに分ける必要があるので、Magic Number+通貨ペアの組み合わせが同一の場合に決済するようい変更します。

以上で、より資金効率の良いEAになる可能性があります。
現在稼働しているEAの実績が固まってきた段階で検証してみたいと思っています。

結論

この記事はお気に入りいただけましたでしょうか?
内容お役にたちましたらうれしく思います。
また、サポートなど応援いただけましたら幸いです。

#MT4小ネタ
#FXトレード
#自動売買
#EA
#MT4
#利小損大戦略
#利小損大
#EURJPY
#EURUSD

いいなと思ったら応援しよう!

なべなべ
記事の内容を有効に活用できた、記事を気に入っていただけたようでしたらチップでサポートいただけますと嬉しいです。 また、こんなことを知りたい、あんなことができないかなど記事にしたいことがございましたら、サポートの有無にかかわらずお知らせくださいませ。