皆さん、こんにちは。ずいぶん久しぶりの記事です。
MT4/MT5では、EAでマジックナンバーを設定することが多いです。
同じMT4に複数のチャートを開いてEAを動かす場合、通貨ペアが異なっていれば、特にマジックナンバーは同じでも構いません。ただし、同じ通貨ペアのチャートをいくつも開いて同じEAを動かす場合、それぞれマジックナンバーを変えておく必要があります。
もちろん input をつけてマジックナンバー変数を宣言しておけば、EAを挿入後にマジックナンバーを個別に変えることはできます。今回はこれを自動的に行いたいという人向けの記事です。(個人的に必要だったので作ったものですが)
使う関数は、ChartID(), ChartFirst(), ChartNext()です。
これらの関数は、もともとMQL5の関数でしたが、新MQL4になってMQL4でも使えるようになったものです。
ChartID()は、プログラムを挿入したチャートのIDを返す関数です。
ChartFirst()は、MT4で開いている最初のチャートのチャートIDを返す関数です。
ChartNext()は、前のチャートIDを引数として次のチャートのチャートIDを返す関数です。
簡単にやるには、チャートIDをそのままマジックナンバーにすればいいですが、チャートIDはかなり大きな整数値なので、もう少し簡単なマジックナンバーに置き換えてみます。
以下は、チャート毎に異なるマジックナンバーを返す簡単なスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void OnStart() { Print("magic = ", GetUniqueMagic()); } //チャート独自のマジックナンバーを返す関数 long GetUniqueMagic() { long magic = 100; //マジックナンバー long chartID = ChartFirst(); //最初のチャートID while(1) { if(chartID < 0) return 0; //チャートがない if(chartID == ChartID()) break; //チャートIDが一致 magic++; //マジックナンバーの更新 chartID = ChartNext(chartID); //次のチャートのチャートID } return magic; } |
マジックナンバーの初期値は100としており、チャートを探す度に1ずつ増やすので、それぞれのチャートで、100、101、102・・・とマジックナンバーが変わっていきます。
それだけなんですが、まま簡単にできたのでメモしておきます。特に調べてないので、既出かもしれませんが。