コンテンツにスキップ

【移植#61】日時をUnix秒へ変換する — MT5のdatetimeを往復検証

MT5で指定日時をUnix秒へ変換し、元の日時へ戻ることを表示した検証画面

この記事の3行まとめ

  • 年月日時分秒をUnixエポック秒へ変換し、MT5のdatetimeとして扱う
  • StructToTime()TimeToStruct()で変換後の往復一致を確認する
  • うるう年や月日計算を手作業で再実装せず、標準APIへ任せる

原典の課題

原典は、年月日時分秒から1970年1月1日基準の秒数を求める関数を紹介しています。年日数、うるう年、月ごとの累積日数を自前で計算した後、StrToTime()を使う短い案も示されていました。日付文字列のゼロ埋めによって結果が変わる注意点も記録されています。

MT5での標準API置き換え

MT5ではMqlDateTimeへ各フィールドを設定し、StructToTime()datetimeへ変換できます。逆方向はTimeToStruct()です。配列の月日表や文字列のゼロ埋めに依存しないため、読みやすく、うるう年の境界も標準処理へ委ねられます。

配布インジケータは、入力した日時、Unix秒、往復後の結果をチャートへ表示します。初期値は2026年2月28日12:34:56です。2月29日や年末年始へ入力を変え、変換後も年月日時分秒が一致するか確認できます。

61_Epoch_Time_Roundtrip_Auditor_v1_00.mq5 をダウンロード

タイムゾーンの注意

Unix秒はUTC基準の値として扱われます。一方、TimeLocal()や端末の表示時刻は実行環境の設定に依存します。外部システムと連携する場合は、入力がUTCなのかサーバー時刻なのかを仕様として固定し、文字列だけを見て変換しないようにします。

検証結果

専用MT5(Build 6061、EURUSD・H1)でインジケータと独立capture EAをコンパイルし、エラー0・警告0でした。画像はcaptured=true、画像エラー0で取得でき、注文・ポジション操作はありません。

まとめ

日時計算は短いコードほど境界条件を隠しやすい領域です。MT5ではStructToTime()TimeToStruct()を使い、入力と出力を往復させて検証することで、うるう年を含む変換をシンプルに監査できます。


前後の記事

前: 【移植#60】DDEをやめて口座スナップショットをCSVへ — 複数MT5を表計算で集計

次: 【移植#62】Linear Regressionの謎を解く — 終値をすべて含む平行チャネル

— SPONSORED —