個人でトレード戦略を作り込む際、歴史 K 線データの連続性がすべての基本です。バックテストを実行すると途中でエラーが出たり、指標計算が不安定になったり……ほとんどの取引所 API で、一部の K 線が欠けたり、古いデータが取得できないトラブルは日常的に発生します。

今回は、私が実際に使っているK 線欠落の検出・補完・集計までの流れを、コピペで使えるコードと共にまとめました。個人トレーダー・シストレ開発者に役立つ内容です。


K 線データが欠落する原因

取引所 API を使うと、よく以下の問題に直面します。

  • 古い期間のデータが提供されていない
  • 相場の混乱時に K 線が飛ぶ
  • 単一ソースだと信頼性が足りない
  • 周期ごとのデータが整合しない

これらはバックテストの結果を大きく歪めるため、必ず補完処理が必要です。


1. 欠落箇所を自動検出する

まず、どの時間帯の K 線が欠けているかを特定します。タイムスタンプの間隔を確認するだけで簡単に判別できます。

import pandas as pd

# K線データ読み込み
df = pd.read_csv("kline.csv")

# タイムスタンプの差分を計算
df['ts_diff'] = df['timestamp'].diff()

# 欠落している箇所を抽出
missing_hours = df[df['ts_diff'] != 3600]
print(missing_hours)

これで、欠落している区間を一目で把握できます。


2. 複数ソースでデータを補完する

単一の取引所 API だけでは完全性を保証できないため、予備データソースを用意するのが効果的です。AllTick API は WebSocket でリアルタイムのティックデータを取得でき、欠落 K 線の補完に最適です。

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    # ティックデータ → K線に集計可能
    print(data)

ws = websocket.WebSocketApp(
    "wss://ws.alltick.co/quote",
    on_message=on_message
)
ws.run_forever()

複数ソースを使うことで、データの途切れリスクを大幅に減らせます。


3. 短周期データから長周期 K 線を再集計

分足データがあれば、再サンプリングで時足・日足を再作成可能です。API から取得できなかった K 線も自力で復元できる強力な方法です。

import pandas as pd

# タイムスタンプを日時形式に変換
df['datetime'] = pd.to_datetime(df['timestamp'], unit='s')
df.set_index('datetime', inplace=True)

# 1時間足にリサンプリング
hour_kline = df['price'].resample('1H').ohlc()

これで、データの連続性を完全に確保できます。


4. データ状態を管理して安定運用

長期的に運用するためには、どの区間が補完済みかを記録しておくとトラブルが減ります。

 

時間帯 状態 データソース
2026-04-20 00:00 完備 取引所 A
2026-04-20 01:00 欠落 補完予定
2026-04-20 02:00 補完済 AllTick

データ登録前にエラーチェックを入れることで、品質を安定させられます。


まとめ:個人トレーダー必携のデータ整備術

仮想通貨のシストレ・バックテストにおいて、K 線データの質が結果を左右します。今回の「検出→複数ソース補完→集計→状態管理」の流れを導入するだけで、データの安定性が大幅に向上し、再現性のある戦略開発が可能になります。

ぜひ実際のコードを試して、自身のトレード環境に導入してみてください。