MT4の夏時間について

28 3月 2016, 01:22
Minoru Hiki
0
1 083

2016年も3月13日の3月第2日曜日で米国が、3月27日の3月最終日曜日でヨーロッパが夏時間になりました。トレードに関わるなら市場の取引時間が変わるので夏時間は気にせずにはいられません。しかしMT4の夏時間は本当に難しいと感じます。GMT、サーバー時間、ローカルPCと3つも時間を返す関数がある上に、夏時間なしの東京時間、夏時間ありだけど時期が違う欧州時間とNY時間を意識しないといけないからです。これに気をつけないと、いや、気をつけていても、「え~っと、この時間を基準にしてここのタイムゾーンの~日前の...NY時間では日をまたぐから.....▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ」なんてことがよくあります。下記に日時情報を得る関数について整理してみました。

  1. TimeCurrent : サーバー時間を返します。このサーバー時間というのがやっかいで、正確には「最後のTickを受信したサーバーの時間」です。なので市場がクローズしている土日は止まります。また、サーバーのタイムゾーンにも左右されます。
  2. TimeGMT : グリニッジ標準時を返します。
  3. TimeLocal : MT4を使っているPCの時間を返します。MT4を使用するPCのタイムゾーンによって夏時間になる場合もあります。
  4. TimeGMTOffset : GMTとローカルPCの時間の差分を秒単位で返します。これもMT4を使用するPCのタイムゾーンによって夏時間になる場合もあります。
  5. TimeDaylightSavings : ローカルPCの夏時間の補正を秒単位で返します。なので標準時間の時はいつも0を返します。

これらの関数がいつになるとどういう値を返すのか、下記のスクリプトを用いて、PCのタイムゾーンを東京、ロンドン、ニューヨークに変えて調べてみました。

void OnStart()
{
    Print("TimeCurrent()         : ", TimeToStr(TimeCurrent()));
    Print("TimeGMT()             : ", TimeToStr(TimeGMT()));
    Print("TimeGMTOffset()       : ", IntegerToString(TimeGMTOffset()));
    Print("TimeDaylightSavings() : ", IntegerToString(TimeDaylightSavings()));
    Print("TimeLocal()           : ", TimeToStr(TimeLocal()));
}


調べた時間帯は、標準時間、夏時間その1(米国が夏時間)、夏時間その2(ヨーロッパ、米国が夏時間)で市場がオープン、クローズの計6パターン。わざわざ夏時間を2パターン調べたのはロンドンの夏時間とGMTの時間を比較したかったからです。下記が結果です。


1-a. 標準時間で市場がオープンの時(2016/03/10 23:12 Thu. JST頃実行)

UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.10 23:12
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.10 14:12
TimeCurrent()         : 2016.03.10 16:12

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.10 14:15
TimeDaylightSavings() : 0
TimeGMTOffset()       : 0
TimeGMT()             : 2016.03.10 14:15
TimeCurrent()         : 2016.03.10 16:15

UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.10 09:17
TimeDaylightSavings() : 0
TimeGMTOffset()       : 18000
TimeGMT()             : 2016.03.10 14:17
TimeCurrent()         : 2016.03.10 16:17


1-b. 標準時間で市場がクローズの時(2016/03/12 14:39 Sat. JST頃実行)

UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.12 14:39
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.12 05:39
TimeCurrent()         : 2016.03.11 23:59

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.12 05:37
TimeDaylightSavings() : 0
TimeGMTOffset()       : 0
TimeGMT()             : 2016.03.12 05:37
TimeCurrent()         : 2016.03.11 23:59

UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.12 00:38
TimeDaylightSavings() : 0
TimeGMTOffset()       : 18000
TimeGMT()             : 2016.03.12 05:38
TimeCurrent()         : 2016.03.11 23:59


2-a. 夏時間その1(NYのみ夏時間)で市場がオープンの時(2016/03/14 20:43 Mon. JST頃実行)

UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.14 20:42
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.14 11:42
TimeCurrent()         : 2016.03.14 14:42

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.14 11:43
TimeDaylightSavings() : 0
TimeGMTOffset()       : 0
TimeGMT()             : 2016.03.14 11:43
TimeCurrent()         : 2016.03.14 14:43


UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.14 07:44
TimeDaylightSavings() : -3600
TimeGMTOffset()       : 14400
TimeGMT()             : 2016.03.14 11:44
TimeCurrent()         : 2016.03.14 14:44


2-b. 夏時間その1(NYのみ夏時間)で市場がクローズ(2016/03/14 05:12 Mon. JST頃実行)

UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.14 05:12
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.13 20:12
TimeCurrent()         : 2016.03.11 23:59

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.13 20:14
TimeDaylightSavings() : 0
TimeGMTOffset()       : 0
TimeGMT()             : 2016.03.13 20:14
TimeCurrent()         : 2016.03.11 23:59

UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.13 16:16
TimeDaylightSavings() : -3600
TimeGMTOffset()       : 14400
TimeGMT()             : 2016.03.13 20:16
TimeCurrent()         : 2016.03.11 23:59
3-a. 夏時間(その2 ロンドン、NYが夏時間)で市場がクローズの時(2016/03/27 14:10 Sun. JST頃実行)
UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.27 14:11
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.27 05:11
TimeCurrent()         : 2016.03.25 23:59

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.27 06:12
TimeDaylightSavings() : -3600
TimeGMTOffset()       : -3600
TimeGMT()             : 2016.03.27 05:12
TimeCurrent()         : 2016.03.25 23:59

UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.27 01:13
TimeDaylightSavings() : -3600
TimeGMTOffset()       : 14400
TimeGMT()             : 2016.03.27 05:13
TimeCurrent()         : 2016.03.25 23:59

3-b. 夏時間(その2 ロンドン、NYが夏時間)で市場がオープンの時(2016/03/27 14:10 Sun. JST頃実行)

UTC+9:00 大阪、札幌、東京
TimeLocal()           : 2016.03.28 08:03
TimeDaylightSavings() : 0
TimeGMTOffset()       : -32400
TimeGMT()             : 2016.03.27 23:03
TimeCurrent()         : 2016.03.28 02:03

UTC ダブリン、エジンバラ、リスボン、ロンドン
TimeLocal()           : 2016.03.28 00:01
TimeDaylightSavings() : -3600
TimeGMTOffset()       : -3600
TimeGMT()             : 2016.03.27 23:01
TimeCurrent()         : 2016.03.28 02:01

UTC-5:00 東部標準時(米国およびカナダ)
TimeLocal()           : 2016.03.27 19:02
TimeDaylightSavings() : -3600
TimeGMTOffset()       : 14400
TimeGMT()             : 2016.03.27 23:02
TimeCurrent()         : 2016.03.28 02:02


市場がクローズのときは金曜日の23:59で時計が止まっているのがわかります。上記の結果だとわかりにくいので、ローカルPCの時間をGMTに修正するTimeDaylightSavingsとTimeGMTOffsetだけ表にまとめてみました。


 
TimeGMTOffsetTimeDaylightSavings
UTC+9:00 大阪、札幌、東京 標準時間
-32400
0
夏時間その1
-324000
夏時間その2-32400
0
UTC ダブリン、エジンバラ、リスボン、ロンドン 標準時間
0
0
夏時間その1
0
0
夏時間その2
-3600
-3600
UTC-5:00 東部標準時(米国およびカナダ) 標準時間
180000
夏時間その114400-3600
夏時間その2
14400-3600


夏時間がない東京はどの時期でも、TimeDaylightSavingsの結果は0、TimeGMTOffsetは-32400 / (60 * 60) = -9時間となっているのがわかります。ニューヨークは3月第2日曜日の夏時間になると、オフセットが18000/(60*60)=5時間から14400/(60*60)=4時間になっ て、TimeDaylightSavingsの結果が0から-3600/(60*60)=-1時間になっているのがわかります。ロンドンは3月第2日曜日の夏時間になると、オフセットが-3600/(60*60)=1時間、TimeDaylightSavingsの結果が同じく1時間になっているのがわか ります。


以上、MT4の時間系のAPIについてどの時期にどのような結果が得られるのか実際に調べてみました。私も、チャート上に3つの時計を表示するだけのインジケータThreeClocksとそのMT5版、東京、ヨーロッパ、ニューヨークなど、3つの時間のセッションを枠で表示するインジケータThreeZonesとそのMT5版、と4つ夏時間が関係するインジケータをリリースしていますのでよかったらご使用ください。

それを友達とシェアしてください: