全決済のマジックナンバー指定について

2026/03/13 08:42
15

ツクールで例えばポディションを2つもち全決済があるEAを作ります。
全決済のマジックナンバー指定で1,2を入力します。
ポディションのマジックナンバーは初期値1,2なので、これで全決済できるというのは理解できます。

実際にEAを使用する段階で、マジックナンバーをEAの設定上で1→101,2→102に変更したとした場合でも正常に稼働するということで良いでしょうか。ツクールであらかじめ全決済の指定を1→101,2→102に変更する必要はないという認識です。
これについては、
① input int Magic1 = 1;→input int Magic1 = 101;にしても問題ない。= 101 はMagic1の代数というだけで、全決済のコードは代数ではなく、Magic1が指定されているということで合っていますか?

② ①があってるとして、
全決済をそれぞれ持つ2つのEAが起動していた場合、EA1がMagic1 = 1 Magic2 = 2、EA2がMagic1 = 101 Magic2 = 102として、全決済のポディションが2つのEAで混同しないのは、ポディション自体が持っているのは= 1 等の部分だけで、結果として、全決済のコードは、逆から1 = Magic1と読み込んで、EA1のみ決済され、EA2のMagic1 = 101には干渉せず、2つのEAがそれぞれ決済されるということでしょうか

プログラム初心者で見当違いでしたら申し訳ありません。

コメント

GogoJungle
2026/03/13 15:47

ご質問は、「全決済」の指定欄に 1,2 と入れておけば、実運用時に Magic1=101Magic2=102 に変更しても正しくそのEA内の対象ポジションだけ全決済されるのか、という点ですね。

結論から申し上げますと、その認識で問題ありません
EAつくーるの「全決済」の指定欄に入れる 1,2 は、実際のマジックナンバーそのものではなく、ポジション番号1・2を指す指定として扱われています。

つまり、

  • ポジション1 → 実際には Magic1
  • ポジション2 → 実際には Magic2

という対応になっており、EAの設定画面で

  • Magic1 = 101
  • Magic2 = 102

に変更した場合でも、全決済の 1,2 は自動的にその現在値(101,102)を参照します。

仕組み

EAつくーるのデフォルトのソースコードでは、初期化時に次のような処理があります。

magic_array[0] = Magic1;

複数ポジションのEAであれば、実際にはこれが

magic_array[0] = Magic1;
magic_array[1] = Magic2;

のように並ぶ形になります。

そして、全決済などで複数指定を判定する部分は次の考え方です。

if(OrderMagic == magic_array[StrToInteger(magics[i])-1]) return (true);

ここで magics[i] に入っている "1""2" は、

  • "1"magic_array[0]Magic1
  • "2"magic_array[1]Magic2

というふうに変換されます。

ですので、全決済欄に 1,2 と書いてあれば、実際の比較対象は

  • Magic1 の現在値
  • Magic2 の現在値

です。

①について

ご理解はほぼ合っています
ただ、より正確に言うと、

  • input int Magic1 = 1;
  • これを input int Magic1 = 101;

に変更しても問題ありません。
そして全決済側は、単純に「1という数値」そのものを見ているのではなく、ポジション1に対応する Magic1 変数の現在値を見ています。

そのため、Magic1 = 101 に変えた場合は、全決済の対象も自動的に 101 になります。

ここで少しだけ注意点

「全決済のマジックナンバー指定」という表示だと、101,102 のように実マジックナンバーを書く欄に見えやすいのですが、コード上の動きとしてはそうではありません。

この欄は実質的には、

  • 1 = ポジション1
  • 2 = ポジション2

を指定する欄として考えていただくのが正確です。

つまり、EAつくーる側で全決済欄を 101,102 に書き換える必要はありません。
むしろ、そこを 101,102 にすると想定外の動作になる可能性があります。

②について

こちらも、基本的にはその理解で問題ありません。

たとえば、

  • EA1:Magic1 = 1Magic2 = 2
  • EA2:Magic1 = 101Magic2 = 102

という2つのEAが同時に動いている場合、各EAはそれぞれ自分自身の Magic1Magic2 の現在値を使って判定します。

そのため、

  • EA1の全決済 1,2 → 実際には 1,2 を対象
  • EA2の全決済 1,2 → 実際には 101,102 を対象

となり、通常は混同しません。

重要な前提

ただし、混同しないためには次の前提があります。

  • 各EAで実際のマジックナンバーが重複していないこと

たとえば、

  • EA1も Magic1=101
  • EA2も Magic1=101

のように、同じ通貨ペア上で同じマジックナンバーを使ってしまうと干渉します。

ですので、複数EAを同時運用する場合は、実際に設定するマジックナンバーを重複させないことが大切です。

こうなっていませんか?

誤解しやすい点として、次のように考えてしまうことがあります。

  • 全決済欄に 1,2 と入れる
  • 実運用で Magic1=101Magic2=102 に変更した
  • だから全決済欄も 101,102 に直さないといけないのでは?

これは不要です
全決済欄は 1,2 のままで大丈夫です。

逆に、全決済欄に 101,102 を入れてしまうと、コード上は「ポジション101、ポジション102」を参照しようとする形になり、正常に使えません。

まとめ
  • 全決済欄の 1,2 は、実マジックナンバーではなくポジション番号の指定です。
  • 実運用時に Magic1=101Magic2=102 に変更しても、全決済欄は 1,2 のままで正常動作します。
  • 2つのEAを同時に動かしても、実際のマジックナンバーが重複していなければ基本的に干渉しません。
  • 全決済欄を 101,102 に書き換える必要はありません。

実運用の設定としては、以下の考え方で問題ありません。

EAつくーる作成時
全決済のマジックナンバー指定:1,2

実際のEA設定
Magic1 = 101
Magic2 = 102

この形で、全決済は 101102 のポジションを対象に動作する認識で問題ありません。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。