MT4の時間を日本時間に変換するには?サーバー時刻・夏時間・MQL4の注意点

MT4のサーバー時刻を日本時間へ変換するには、その日時に適用されるサーバーのUTCオフセットを確認します。PCの夏時間を返すTimeDaylightSavingsを使っても、ブローカーの夏時間は判定できません。現在時刻の表示と、過去の足の変換は分けて設計します。

こんにちは。trade-engineer.com 運営者のHです。

※当サイトはアフィリエイト広告(Amazonアソシエイツ等)を利用しています。

目次

MT4の時刻関数は同じ時計を返していない

関数 基準と注意点
TimeCurrent() 最後に受信した気配値のサーバー時刻。PCの現在時刻とは別
TimeLocal() MT4が動くPCのローカル時刻
TimeGMT() PCのローカル時刻と夏時間設定をもとに計算したGMT
TimeDaylightSavings() PCの夏時間に関する補正値。ブローカーの設定ではない

TimeCurrentの公式仕様では、OnTick内なら処理中のティックの時刻、その他のハンドラーでは気配値表示にある銘柄の最後の受信時刻です。休日や通信停止中に、壁時計と同じ速度で進む現在時刻として扱うとずれます。

PCの時計そのものを表示する用途はTimeLocalと区別します。チャートの足をPC側の表示時刻に置き換える処理とは別です。

日本時間への計算はUTCとの差から求める

日本時間をUTC+9として扱うなら、計算は「サーバー時刻+9時間-その日時のサーバーUTCオフセット」です。UTC+2のサーバーなら7時間、UTC+3なら6時間を加算します。これらはオフセットを仮定した計算例で、特定の業者の年間設定ではありません。

例えばUTC+2のサーバー時刻が10月2日20:30なら、日本時間表示は10月3日03:30です。日付も繰り上がります。時刻の文字列だけを切り出して「7を足す」方法では、日付変更の処理が抜けるので、datetimeの値に秒数を加算してから表示します。

確認済みのオフセットを入力するMQL4スクリプト例

以下はMQL4のスクリプト全体です。入力値はUTCとの差を分で表します。初期値120はUTC+2という例なので、利用するサーバーに合わせて変更してください。時刻計算を確認する例で、チャート全体の表示や注文時刻を変更する機能はありません。

#property strict
#property script_show_inputs

input int ServerUTCOffsetMinutes = 120;

datetime ServerToJST(datetime server_time, int utc_offset_minutes)
{
   return server_time + (540 - utc_offset_minutes) * 60;
}

void OnStart()
{
   datetime server_time = TimeCurrent();
   if(server_time == 0)
   {
      Print("No server quote time available.");
      return;
   }
   datetime jst = ServerToJST(server_time, ServerUTCOffsetMinutes);
   Print("Server: ", TimeToString(server_time, TIME_DATE | TIME_SECONDS),
         " / JST display: ", TimeToString(jst, TIME_DATE | TIME_SECONDS),
         " / UTC offset minutes: ", ServerUTCOffsetMinutes);
}

MetaEditorでスクリプトとして保存・コンパイルし、接続した端末で実行してログを確認します。本例は日時計算の境界を別環境で確認したもので、MT4端末上のコンパイル・実行は未検証です。使用する端末でサーバーの公表設定とログを照合してから利用してください。

PCの夏時間とブローカーの夏時間を混ぜない

TimeDaylightSavingsの公式仕様は、PCの時刻設定による夏時間の補正を示しています。ブローカーがUTC+2からUTC+3へ切り替える日を、この関数から取得できるわけではありません。

TimeCurrentとTimeGMTの差をそのまま使う方法にも条件があります。受信時刻とPCの現在時刻が同じ瞬間とは限らず、PCの時計やタイムゾーンの誤設定も結果に影響します。丸めた差がそれらしく見えても、公式のサーバー設定を確認する代わりにはなりません。

過去足とストラテジーテスターでは別途確認する

TimeGMTの公式仕様では、ストラテジーテスター内のTimeGMTはシミュレートされたTimeCurrentと同じになります。両者の差から実サーバーのUTCオフセットを推定する処理は、そのままではテスターで成立しません。

過去足を日本時間へ変換するなら、各バーの日時に対応したオフセットが必要です。今のオフセットを1年前の全バーへ適用すると、夏時間の期間がずれます。履歴の切替日と適用区間を業者の資料で確認し、変換関数へその日時の値を渡します。確認できない期間を推測で埋めないでください。

検証では、日付の繰上がり、年末年始、UTC+2とUTC+3、夏時間の切替前後を分けて記録します。現在の表示が合うことと、過去の取引時間帯が正しく分類できることは別の確認です。

あわせて確認したい関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次