« MetaTrader 4のEAでMagicナンバーを通貨ペア毎に生成する方法 | トップページ | MetaTrader4のEAで足が増えた時だけ処理するには »

2014年6月14日 (土)

MetaTrader 4でサマータイムかどうか判定する関数

スキャルピングタイプのEAを作ったりすると、スワップ金利が付く時間帯のトレードを避けるために、そもそもサマータイム中なのかどうか知りたい場合が多々あると思います。

そこで作った関数、IsSummerTime() が以下です。
パラメータとして、結果をプリントするかどうかのboolをデフォルト値falseで持っています。
結果はboolで返し、trueならサマータイム、falseならサマータイムではない、となります。

bool IsSummerTime(bool _prt = false) {
bool _ret;
string StartTime="03.01";
string EndTime="11.01";

datetime cTime = TimeCurrent();
int cDoW = TimeDayOfWeek(cTime);
string cYear = IntegerToString(TimeYear(cTime));

datetime sTime = StrToTime(StartTime);
int sDoW = TimeDayOfWeek(sTime);
switch(sDoW) {
case 0:
sTime = StrToTime(cYear+"."+"03.08");
break;
case 1:
sTime = StrToTime(cYear+"."+"03.14");
break;
case 2:
sTime = StrToTime(cYear+"."+"03.13");
break;
case 3:
sTime = StrToTime(cYear+"."+"03.12");
break;
case 4:
sTime = StrToTime(cYear+"."+"03.11");
break;
case 5:
sTime = StrToTime(cYear+"."+"03.10");
break;
case 6:
sTime = StrToTime(cYear+"."+"03.09");
break;
}

datetime eTime = StrToTime(EndTime);
int eDoW = TimeDayOfWeek(sTime);
switch(eDoW) {
case 0:
eTime = StrToTime(cYear+"."+"11.01");
break;
case 1:
eTime = StrToTime(cYear+"."+"11.07");
break;
case 2:
eTime = StrToTime(cYear+"."+"11.06");
break;
case 3:
eTime = StrToTime(cYear+"."+"11.05");
break;
case 4:
eTime = StrToTime(cYear+"."+"11.04");
break;
case 5:
eTime = StrToTime(cYear+"."+"11.03");
break;
case 6:
eTime = StrToTime(cYear+"."+"11.02");
break;
}

if(sTime < eTime) {
if(cTime >= sTime && cTime < eTime)
_ret = true; // YES
else
_ret = false; // NO
}
else {
if (cTime >= eTime && cTime < sTime)
_ret = false; // NO
else
_ret = true; // YES
}
if(_prt) {
if(_ret) {
Print("SUMMER TIME");
}
else {
Print("WINTER TIME");
}
}
return(_ret);
}

|

« MetaTrader 4のEAでMagicナンバーを通貨ペア毎に生成する方法 | トップページ | MetaTrader4のEAで足が増えた時だけ処理するには »

コメント

コメントを書く



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




« MetaTrader 4のEAでMagicナンバーを通貨ペア毎に生成する方法 | トップページ | MetaTrader4のEAで足が増えた時だけ処理するには »