🦁
MQL5で日本時間の取得(夏時間の計算も有り)
enum use_times {
GMT9, //WindowsPCの時間を使って計算する
GMT9_BACKTEST, // EAで計算された時間を使う(バックテスト用)
GMT_KOTEI// サーバータイムがGMT+0で固定されている(バックテスト用)
};
input use_times set_time = GMT9;//時間取得方法
input int natu = 6;//夏加算時間(バックテスト用)
input int huyu = 7;//冬加算時間(バックテスト用)
datetime calculate_time() {
if(set_time == GMT9) {
return TimeGMT() + 60 * 60 * 9;
}
if(set_time == GMT9_BACKTEST) {
return getJapanTime();
}
if(set_time == GMT_KOTEI) {
return TimeCurrent() + 60 * 60 * 9;
}
return 0;
}
// 日本時間の取得
datetime getJapanTime()
{
datetime now = TimeCurrent();
datetime summer = now + 60 * 60 * natu;
datetime winter = now + 60 * 60 * huyu;
if(is_summer())
{
return summer;
}
return winter;
}
// サマータイムなら真を返す関数
bool is_summer()
{
datetime now = TimeCurrent();
int month = TimeMonth(now);
int day = TimeDay(now);
int dayOfWeek = TimeDayOfWeek(now);
int hours = TimeHour(now);
if(month < 3 || month > 11)
{
return false;
}
if(month > 3 && month < 11)
{
return true;
}
// アメリカのサマータイムは3月の第2日曜日から11月の第1日曜日まで
if(month == 3)
{
int dstStart = 14 - dayOfWeek;
if(day >= dstStart)
{
return true;
}
else
{
return false;
}
}
if(month == 11)
{
int dstEnd = 7 - dayOfWeek;
if(day < dstEnd)
{
return true;
}
else
{
return false;
}
}
return false;
}
int TimeMonth(datetime date)
{
MqlDateTime tm;
TimeToStruct(date,tm);
return(tm.mon);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int TimeDay(datetime date)
{
MqlDateTime tm;
TimeToStruct(date,tm);
return(tm.day);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int TimeHour(datetime date)
{
MqlDateTime tm;
TimeToStruct(date,tm);
return(tm.hour);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date,tm);
return(tm.min);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int TimeDayOfWeek(datetime date)
{
MqlDateTime tm;
TimeToStruct(date,tm);
return(tm.day_of_week);
}
Discussion