ผมเคยเสียเวลากว่า 3 เดือนในการสร้างกลยุทธ์ Mean Reversion บน BTCUSDT Perpetual ก่อนจะพบว่าผล backtest ที่ได้แตกต่างจากผล Paper Trade อย่างมาก ต้นเหตุสำคัญไม่ใช่กลยุทธ์ แต่เป็น คุณภาพของข้อมูล K-line ที่ดึงจาก API — บางแท่งขาดหาย บางช่วงเวลาถูก rate-limit ตัดทอน และบางครั้ง Open/Close กลับด้านจากต้นฉบับ บทความนี้เป็นรีวิวจากการใช้งานจริง โดยดึงข้อมูล K-line ของสัญญา Perpetual จาก 3 แหล่ง ได้แก่ Binance USDⓈ-M Futures, OKX และ Tardis เปรียบเทียบกันแบบเป็นกลาง พร้อมให้คะแนนใน 5 มิติหลัก

เกณฑ์การประเมิน 5 ด้าน (ที่ผมใช้ตัดสินใจเลือกแหล่งข้อมูล)

1. Binance USDⓈ-M Futures K-Line API

Endpoint หลักคือ https://fapi.binance.com/fapi/v1/klines รองรับช่วงเวลาตั้งแต่ 1s ถึง 1M และคืนค่าสูงสุด 1,500 แท่งต่อ request ข้อมูล BTCUSDT Perpetual ย้อนหลังได้ถึงปี 2019 โดยไม่ต้องจ่ายค่าสมาชิก ข้อดีคือฟรีและ latency ต่ำ ข้อเสียคือโควต้า Rate Limit และ IP-based quota ที่แชร์กับ endpoint อื่น

import requests, time

BASE = "https://fapi.binance.com"

def fetch_binance_klines(symbol: str, interval: str,
                         start_ms: int, end_ms: int,
                         limit: int = 1500):
    url = f"{BASE}/fapi/v1/klines"
    params = {"symbol": symbol, "interval": interval,
              "startTime": start_ms, "endTime": end_ms,
              "limit": limit}
    r = requests.get(url, params=params, timeout=10)
    r.raise_for_status()
    return r.json()  # คืน list ของ [openTime, o, h, l, c, v, ...]

ดึง BTCUSDT 1h