こんにちは。私たちは個人で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を内部の基準にして、ローカル時間は表示用として使う。このやり方が、異なる市場間のデータ変換にも強いですし、後々の分析でのずれも減らせます。
私たちもまだ試行錯誤の途中ですが、同じように個人で取引している方の参考になれば幸いです。コメントで情報交換も歓迎です。
