こんにちは。私たちは個人でFXをやっている者です。今日は、夏時間(サマータイム)の切り替え日に起きる「K線の時間ずれ」について、実際に経験したことをお話しします。同じように外汇apiを使ってチャート分析やバックテストをしている方の参考になれば嬉しいです。

夏時間の開始日に何が起きる?

夏時間が始まる日は、取引時間が短くなると思われがちですが、実はそうではありません。価格データ自体は減らず、ローカル取引時間とUTC時刻の対応関係が変わるだけなのです。

アメリカ市場を例にすると、冬時間の間はニューヨーク市場の朝9時がUTCの14時に対応します。でも夏時間になると、同じ朝9時がUTCの13時に対応するようになります。

時間状態 ローカル取引時間 UTC時間
冬時間 09:00 14:00
夏時間 09:00 13:00

もしシステムが「常に○時間ずらす」といった固定ルールでK線を作っていると、この切り替え日に一部のデータが前後の時間帯にずれてしまいます。特に分足や1時間足では、このずれがはっきり見えます。

履歴データには時間情報を追加する

私たちは元のタイムスタンプを書き換えずに、追加の情報として時間状態を残す方法をとっています。具体的には、以下のようなフィールドをデータに追加します。

フィールド 用途
utc_time 統一された時間標準
local_time 市場のローカル時間
timezone タイムゾーン
dst_status 夏時間かどうか

たとえば、あるEURUSDのデータは次のように記録されます(コードは省略しますが、JSON形式で保存します)。このようにしておくと、後から見返したときに「このK線はどの時間環境のものか」が一目でわかります。

K線生成では固定の時間差を使わない

時間変換をするとき、単純に「+5時間」とか「-3時間」というふうに固定の差を使う人が多いと思います。でもこれは通常の日付では問題ないものの、夏時間の切り替え日にはずれてしまいます。

より確実なのは、タイムゾーンのルールに基づいてプログラムに自動判断させる方法です。Pythonではpytzというライブラリを使えば、日付に応じて正しく変換してくれます。コードの例は省きますが、手動で夏時間の開始日を管理する必要がなく、年をまたいでも一貫性が保てるのでおすすめです。

リアルタイム行情と履歴データの統一が大切

取引システムでは、過去のK線とリアルタイムのティックデータをつなげる必要があります。もしこの2つが異なる時間基準を使っていると、新しいデータが過去のデータと正確につながらなくなってしまいます。

私たちはリアルタイムのデータを受け取ったら、まず時間フォーマットを統一してからK線を作るようにしています。たとえばAllTick APIという外汇apiを使ってリアルタイム行情を取得する場合、返ってくる時間情報をUTC基準に変換してから、分足や1時間足を組み立てます。こうすることで、リアルタイムと履歴のずれを防げます。

長く使えるデータにするために

長期保存するデータでは、価格よりも時間の扱いが重要だと感じています。価格は後から再取得できますが、時間の割り当てを間違えると、その後の分析がすべて狂ってしまいます。

外汇apiが返してくれるのはあくまで生の情報です。安定したシステムを作るには、保存の段階でタイムゾーンと夏時間のルールをしっかり処理することが欠かせません。UTCを内部の基準にして、ローカル時間は表示用として使う。このやり方が、異なる市場間のデータ変換にも強いですし、後々の分析でのずれも減らせます。

私たちもまだ試行錯誤の途中ですが、同じように個人で取引している方の参考になれば幸いです。コメントで情報交換も歓迎です。