« スター為替証券の大富豪21をSafariで使っていて | トップページ | MetaTrader 4でサマータイムかどうか判定する関数 »

2014年6月 9日 (月)

MetaTrader 4のEAでMagicナンバーを通貨ペア毎に生成する方法

一般にEAのMagicナンバーは作った日付(YYYYMMDD形式)とかにしていると思いますが、それだと複数の通貨ペアでEAを作動させた際に後々、困るんじゃないかと思うのです。
そこで、Magicナンバー生成。

まずは頭の方で普通に
#define MAGIC 20140609
int _magic = MAGIC;
とか書いておきます…

initの中に以下の文を書いて…
string _pearMagic;
int _pearNumber = PearNumber();
if(_pearNumber < 10)
_pearMagic = StringConcatenate("0", _pearNumber);
else
_pearMagic = StringConcatenate("", _pearNumber);

_magic = StrToInteger(StringConcatenate(_magic, _pearMagic));

関数を書きます。
int PearNumber() {
string _aPear = Symbol();
int _pearNumber = 0;
if(StringFind(_aPear, "USD") >= 0) _pearNumber += 1;
if(StringFind(_aPear, "EUR") >= 0) _pearNumber += 2;
if(StringFind(_aPear, "GBP") >= 0) _pearNumber += 4;
if(StringFind(_aPear, "AUD") >= 0) _pearNumber += 8;
if(StringFind(_aPear, "CHF") >= 0) _pearNumber += 16;
if(StringFind(_aPear, "CAD") >= 0) _pearNumber += 32;
if(StringFind(_aPear, "NZD") >= 0) _pearNumber += 64;
return(_pearNumber);
}

これで主要通貨は全部サポートされ、通貨ペア毎に異なったMagicナンバーが生成されるので、注文を特定する際などに便利です。
頭の8桁でどのEAかが分かり、下2桁でどの通貨ペアかが分かります。

ちなみに、USDJPYなら1。
EURJPYなら2、EURUSDなら3。
GBPJPYなら4、EURGBPなら6。
CHFJPYなら16、USDCHFなら17。

時間軸の違いは考慮していませんので、あしからず。

|

« スター為替証券の大富豪21をSafariで使っていて | トップページ | MetaTrader 4でサマータイムかどうか判定する関数 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« スター為替証券の大富豪21をSafariで使っていて | トップページ | MetaTrader 4でサマータイムかどうか判定する関数 »