こんにちは、今日はバイナンス API で歴史ローソク足を取得する時、データが欠ける問題を解決する方法を、私の実践体験を交えてゆるっと紹介します✨
トレードの勉強や自動売買のバックテストをする時、過去のローソク足データは超重要ですよね。私も長年、バイナンス API を使ってデータを取得していますが、1 分足・5 分足の高頻度データや、長期間のデータを一気に取ろうとすると、途中で途切れたり、本数が足りなかったり… 何度も頭を悩ませました。
データが不完全だと、バックテストの結果が全然違っちゃうし、分析も無駄になっちゃうんです😭 今回は、私が実際に使っている確実にデータを揃える方法を、初心者さんでも分かりやすくまとめました!
なぜデータが欠けるの?
実はバイナンス API には **「1 回のリクエストで最大 1000 本まで」** というルールがあるんです!1 分足でも、1 時間足でも、日足でも、この制限は同じ。
- 長い期間を一気に取得 → データが途中で切れる
- 連続でリクエストしすぎ → 制限に引っかかって途切れる
- 確認しないまま使う → 隠れた欠落に気づかない
これが、データ欠落の一番の原因なんですよ。
私が実践している 4 つの方法
難しい設定は一切なし、4 つのコツを守るだけで、データが完璧に揃います!
1. 時間を小分けにして取得する
長い期間を一気に取ろうとせず、1000 本以内になるように分割します。例:1 年分の 1 時間足 → 1 ヶ月ごとに分けて取得例:1 日分の 1 分足 → ループで少しずつ取得
2. タイムスタンプで時間を確認
各ローソク足にはopenTime(ミリ秒)という時間の目印があります。
- 1 分足:60000 ミリ秒(毎分)
- 5 分足:300000 ミリ秒(5 分ごと)
取得後に時間順に並べて、間隔がズレていたら欠落している証拠なので、すぐに再取得できます。
3. リクエストの間隔を少し空ける
連続で API にリクエストすると、制限に引っかかっちゃいます。0.2 秒だけ待つだけで、安定してデータが取れるようになりますよ✨
4. 最後に 3 つのチェックをする
取得したデータは、必ず確認してから使いましょう!
- 時間が途切れていないか
- 価格や出来高に空欄がないか
- データの本数が想定通りか
これで、データのミスを防げます。
すぐ使える Python コード
コピーして実行するだけで、自動でデータを取得して欠落を確認してくれます💻
import requests
import time
import pandas as pd
API_URL = "https://apis.alltick.co/stock/history-klines"
symbol = "BTCUSDT"
interval = "1m"
start_time = 1680000000000 # ミリ秒の開始時間
end_time = 1680100000000 # ミリ秒の終了時間
all_klines = []
# 分割して取得
while start_time < end_time:
params = {
"symbol": symbol,
"interval": interval,
"startTime": start_time,
"limit": 1000
}
resp = requests.get(API_URL, params=params)
data = resp.json()
if not data:
break
all_klines.extend(data)
start_time = data[-1][0] + 60000 # 次の開始時間
time.sleep(0.2) # リクエスト間隔
# データを整理
df = pd.DataFrame(all_klines, columns=["openTime","open","high","low","close","volume"])
df["openTime"] = pd.to_datetime(df["openTime"], unit="ms")
df = df.sort_values("openTime").reset_index(drop=True)
# 欠落チェック
expected_interval = pd.Timedelta(minutes=1)
missing = df["openTime"].diff() != expected_interval
if missing.any():
print("欠落したローソク足があります:")
print(df[missing])
else:
print("データは完全です✨")
まとめ
バイナンス API のデータ欠落は、API のせいじゃなく、取得方法の問題なんです。「小分けに取得・時間確認・間隔を空ける・最終チェック」この 4 つを守るだけで、もうデータ欠落に悩まされなくなりますよ😊
リアルタイムのデータと比較したい時は、AllTick API を使うと WebSocket でリアルタイムデータが受け取れて、確認がもっと楽になります✨
今日の記事が、トレード勉強やデータ取得の参考になれば嬉しいです!質問があれば、コメントで気軽に聞いてくださいね~