Deribit คืออะไร และทำไมต้องดึงข้อมูล Orderbook?
Deribit เป็นตลาดซื้อขายสัญญาออปชัน (Options) และฟิวเจอร์สคริปโตที่ใหญ่ที่สุดในโลก โดยเฉพาะ Bitcoin Options ตลาดนี้เปิดให้บริการมาตั้งแต่ปี 2016 และมีปริมาณการซื้อขายสูงมาก สำหรับนักเทรดหรือนักพัฒนาที่ต้องการวิเคราะห์ข้อมูลราคา การดึง Orderbook หรือ "บัญชีคำสั่งซื้อ-ขาย" ถือเป็นพื้นฐานที่สำคัญมาก เพราะจะทำให้เราเห็นว่าในตลาดมีคำสั่งซื้อและขายรออยู่ที่ระดับราคาไหนบ้าง
ปัญหาคือ Deribit เองไม่ได้มีบริการ API สำหรับดึงข้อมูลประวัติย้อนหลัง (Historical Data) อย่างเป็นทางการ ดังนั้นเราจึงต้องพึ่งพาผู้ให้บริการข้อมูลภายนอกอย่าง Tardis ซึ่งเก็บข้อมูลเหล่านี้ไว้ให้เราสามารถเข้าถึงได้
API คืออะไร? อธิบายแบบเข้าใจง่ายสำหรับมือใหม่
หลายคนที่ไม่เคยเขียนโค้ดมาก่อนอาจสงสัยว่า API (Application Programming Interface) คืออะไร ลองนึกภาพง่ายๆ ว่า API เปรียบเสมือน "พนักงานต้อนรับ" ที่คอยรับคำขอจากเราแล้วไปหยิบข้อมูลที่ต้องการมาให้
เมื่อเราต้องการข้อมูล เราจะส่ง "คำขอ" (Request) ไปยัง API ซึ่งจะมีรูปแบบดังนี้:
GET https://api.tardis.dev/v1/derivatives/deribit/option/orderbook_snapshots
?symbol=BTC-28MAR25-95000-P
&from=2025-03-28T00:00:00Z
&to=2025-03-28T01:00:00Z
&api_key=YOUR_TARDIS_API_KEY
จากนั้น API จะตอบกลับมาเป็น ข้อมูล JSON ที่มีโครงสร้างเรียบร้อย เราสามารถนำข้อมูลนี้ไปใช้ในโปรแกรมหรือเว็บไซต์ของเราได้เลย
ขั้นตอนที่ 1: สมัครบัญชี Tardis
ก่อนจะดึงข้อมูลได้ เราต้องมี API Key จาก Tardis ก่อน ซึ่งขั้นตอนง่ายมาก:
- เข้าไปที่เว็บไซต์ Tardis Documentation
- คลิกปุ่ม Sign Up เพื่อสมัครสมาชิก
- ยืนยันอีเมลและเข้าสู่ระบบ
- ไปที่หน้า Dashboard เพื่อสร้าง API Key ใหม่
หมายเหตุสำคัญ: หน้าจอ Dashboard จะแสดง API Key ของคุณ ควรคัดลอกและเก็บรักษาไว้อย่างปลอดภัย อย่าแชร์ให้คนอื่นเห็นเด็ดขาด เพราะใครก็ตามที่มี Key นี้จะสามารถใช้บริการแทนคุณได้
ขั้นตอนที่ 2: ทดสอบดึงข้อมูล Orderbook Snapshot
มาเริ่มดึงข้อมูลจริงกันเลย! Tardis มี Endpoint สำหรับ Orderbook Snapshot ดังนี้:
https://api.tardis.dev/v1/derivatives/deribit/option/orderbook_snapshots
สำหรับการทดสอบ เราสามารถใช้โปรแกรม cURL (มีมากับ macOS และ Linux อยู่แล้ว) หรือ Postman ก็ได้ ตัวอย่างคำสั่ง:
curl -X GET "https://api.tardis.dev/v1/derivatives/deribit/option/orderbook_snapshots?symbol=BTC-28MAR25-95000-P&from=2025-03-28T00:00:00Z&to=2025-03-28T01:00:00Z" \
-H "X-API-Key: YOUR_TARDIS_API_KEY"
ในคำสั่งข้างต้น:
- symbol = ชื่อสัญญาออปชันที่ต้องการ (เช่น BTC-28MAR25-95000-P หมายถึง Put Option ของ BTC ที่ Strike $95,000 วันหมดอายุ 28 มีนา)
- from = วันเวลาเริ่มต้น (รูปแบบ ISO 8601)
- to = วันเวลาสิ้นสุด
- X-API-Key = Key ที่ได้จากการสมัคร
ขั้นตอนที่ 3: ใช้ Python ดึงข้อมูลมาเก็บไว้
หากต้องการเขียนโปรแกรมให้ทำงานอัตโนมัติ Python เป็นตัวเลือกที่ดีมากเพราะอ่านง่าย โค้ดตัวอย่างด้านล่างนี้จะดึงข้อมูล Orderbook มาเก็บไว้ในไฟล์ CSV:
import requests
import pandas as pd
from datetime import datetime, timedelta
กำหนดค่าต่างๆ
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1/derivatives/deribit/option/orderbook_snapshots"
SYMBOL = "BTC-28MAR25-95000-P"
กำหนดช่วงเวลา
from_date = "2025-03-28T00:00:00Z"
to_date = "2025-03-28T01:00:00Z"
สร้าง URL สำหรับคำขอ
params = {
"symbol": SYMBOL,
"from": from_date,
"to": to_date
}
headers = {
"X-API-Key": API_KEY
}
ส่งคำขอไปยัง Tardis API
response = requests.get(BASE_URL, params=params, headers=headers)
ตรวจสอบว่าสำเร็จหรือไม่
if response.status_code == 200:
data = response.json()
# แปลงข้อมูลเป็น DataFrame
df = pd.DataFrame(data)
# เก็บไว้ในไฟล์ CSV
df.to_csv(f"orderbook_{SYMBOL}.csv", index=False)
print(f"ดึงข้อมูลสำเร็จ! มี {len(data)} รายการ")
else:
print(f"เกิดข้อผิดพลาด: {response.status_code}")
print(response.text)
เมื่อรันโค้ดนี้ คุณจะได้ไฟล์ CSV ชื่อ orderbook_BTC-28MAR25-95000-P.csv ที่มีข้อมูล Orderbook ทั้งหมดในช่วงเวลาที่กำหนด
โครงสร้างข้อมูล Orderbook Snapshot
ข้อมูลที่ได้กลับมาจะมีโครงสร้างดังนี้ (แต่ละ Snapshot คือภาพสแน็ปช็อต ณ เวลาหนึ่ง):
{
"timestamp": "2025-03-28T00:15:32.123456Z",
"symbol": "BTC-28MAR25-95000-P",
"bids": [
{"price": 1200.5, "amount": 5.2},
{"price": 1198.0, "amount": 12.1}
],
"asks": [
{"price": 1205.0, "amount": 3.8},
{"price": 1210.5, "amount": 8.4}
]
}
ในส่วนนี้:
- timestamp = เวลาที่บันทึกข้อมูล
- symbol = ชื่อสัญญา
- bids = รายการคำสั่งซื้อ (คนที่ต้องการซื้อ) เรียงจากราคาสูงไปต่ำ
- asks = รายการคำสั่งขาย (คนที่ต้องการขาย) เรียงจากราคาต่ำไปสูง
- price = ราคาที่ต้องการซื้อ/ขาย
- amount = จำนวนสัญญาที่ต้องการ
วิธีดึงข้อมูลหลายสัญญาพร้อมกัน
หากต้องการดึงข้อมูลหลายสัญญาพร้อมกัน สามารถใช้ Loop ใน Python ทำได้ดังนี้:
import requests
import pandas as pd
from datetime import datetime
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1/derivatives/deribit/option/orderbook_snapshots"
รายการสัญญาที่ต้องการดึง
SYMBOLS = [
"BTC-28MAR25-95000-P",
"BTC-28MAR25-96000-P",
"BTC-28MAR25-97000-P",
"BTC-28MAR25-98000-P"
]
from_date = "2025-03-28T00:00:00Z"
to_date = "2025-03-28T01:00:00Z"
all_data = []
for symbol in SYMBOLS:
params = {
"symbol": symbol,
"from": from_date,
"to": to_date
}
headers = {"X-API-Key": API_KEY}
response = requests.get(BASE_URL, params=params, headers=headers)
if response.status_code == 200:
data = response.json()
all_data.extend(data)
print(f"✓ ดึง {symbol} สำเร็จ: {len(data)} รายการ")
else:
print(f"✗ {symbol} ล้มเหลว: {response.status_code}")
เก็บทุกสัญญาลงไฟล์เดียว
df = pd.DataFrame(all_data)
df.to_csv("all_orderbooks.csv", index=False)
print(f"\nรวมทั้งหมด: {len(all_data)} รายการ")
เหมาะกับใคร / ไม่เหมาะกับใคร
| เหมาะกับใคร | ไม่เหมาะกับใคร |
|---|---|
| นักพัฒนา Python/JavaScript ที่ต้องการสร้างระบบเทรดอัตโนมัติ | ผู้ที่ไม่มีพื้นฐานการเขียนโค้ดเลยและไม่ต้องการเรียนรู้ |
| นักวิจัยที่ต้องการข้อมูลย้อนหลังเพื่อทดสอบกลยุทธ์ | ผู้ที่ต้องการข้อมูล Real-time แบบเรียลไทม์ (Tardis เป็น Historical Data เท่านั้น) |
| Quants และนักเทรดที่ต้องการวิเคราะห์ Orderbook Depth | ผู้ที่ต้องการฟรีทั้งหมด (Tardis มีค่าใช้จ่ายสำหรับข้อมูลเยอะ) |
| บริษัทที่ต้องการสร้างรายงานวิเคราะห์ตลาดออปชัน | ผู้ที่ต้องการดึงข้อมูล Spot (หุ้น/คริปโตธรรมดา) เพราะ Tardis เน้น Derivatives |
ราคาและ ROI
| บริการ | ราคา/เดือน | ฟรีมีอะไรบ้าง | เหมาะกับใคร |
|---|---|---|---|
| Tardis | เริ่มต้น $49/เดือน | Free Tier: 1,000 API calls/วัน | ผู้ที่ต้องการข้อมูลหลาย Exchange |
| HolySheep AI | เริ่มต้น $8/ล้าน Tokens | เครดิตฟรีเมื่อลงทะเบียน | ผู้ที่ต้องการใช้ LLM วิเคราะห์ข้อมูลที่ดึงมา |
| Deribit API (เอง) | ฟรี แต่ไม่มี Historical | Real-time เท่านั้น | ผู้ที่ต้องการดึงแค่ข้อมูลปัจจุบัน |
ทำไมต้องเลือก HolySheep
หลังจากดึงข้อมูล Orderbook มาแล้ว ขั้นตอนถัดไปคือการวิเคราะห์ข้อมูลเหล่านั้น ซึ่งต้องใช้ AI หรือ LLM (Large Language Model) ช่วยประมวลผล สมัครที่นี่ เพื่อรับเครดิตฟรีเมื่อลงทะเบียน
HolySheep AI เป็นแพลตฟอร์ม API ที่รวม LLM หลายตัวไว้ด้วยกัน มีจุดเด่นดังนี้:
- ประหยัด 85%+ — อัตราแลกเปลี่ยน ¥1=$1 ทำให้ค่าใช้จ่ายถูกลงมากเมื่อเทียบกับผู้ให้บริการอื่น
- ชำระเงินง่าย — รองรับ WeChat และ Alipay สำหรับผู้ใช้ในประเทศจีน
- เร็วมาก — Latency ต่ำกว่า 50ms เหมาะสำหรับงานที่ต้องการความเร็ว
- หลากหลายโมเดล — เลือกใช้ได้ตามความต้องการและงบประมาณ
| โมเดล | ราคา ($/ล้าน Tokens) | เหมาะกับงาน |
|---|---|---|
| GPT-4.1 | $8.00 | งานที่ต้องการความแม่นยำสูงสุด |
| Claude Sonnet 4.5 | $15.00 | งานวิเคราะห์ข้อมูลซับซ้อน |
| Gemini 2.5 Flash | $2.50 | งานทั่วไป ราคาถูก |
| DeepSeek V3.2 | $0.42 | งานที่ต้องประหยัดมากที่สุด |
ตัวอย่าง: ใช้ DeepSeek วิเคราะห์ Orderbook ที่ดึงมา
import requests
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_URL = "https://api.holysheep.ai/v1/chat/completions"
อ่านข้อมูลจากไฟล์ CSV ที่ดึงมา
with open("all_orderbooks.csv", "r") as f:
orderbook_data = f.read()
สร้าง Prompt สำหรับ AI
prompt = f"""คุณคือนักวิเคราะห์ตลาดออปชัน
วิเคราะห์ข้อมูล Orderbook ต่อไปนี้และให้ความเห็น:
1. ความลึกของตลาด (Market Depth)
2. สัญญาณที่น่าสนใจ
3. คำแนะนำสำหรับนักเทรด
ข้อมูล:
{orderbook_data[:2000]}"""
payload = {
"model": "deepseek-v3.2",
"messages": [
{"role": "user", "content": prompt}
]
}
headers = {
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(HOLYSHEEP_URL, json=payload, headers=headers)
if response.status_code == 200:
result = response.json()
print(result["choices"][0]["message"]["content"])
else:
print(f"ข้อผิดพลาด: {response.status_code}")
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
1. ข้อผิดพลาด 401 Unauthorized
สาเหตุ: API Key ไม่ถูกต้องหรือหมดอายุ
# ❌ วิธีที่ผิด - Key ไม่ถูกต้อง
headers = {"X-API-Key": "invalid_key_123"}
✅ วิธีที่ถูก - ตรวจสอบ Key อย่างระมัดระวัง
API_KEY = "your_actual_api_key_here" # ควรเก็บไว้ในตัวแปรสภาพแวดล้อม
headers = {"X-API-Key": os.environ.get("TARDIS_API_KEY")}
2. ข้อผิดพลาด 429 Rate Limit Exceeded
สาเหตุ: ส่งคำขอบ่อยเกินไป เกินโควต้าที่กำหนด
import time
import requests
❌ วิธีที่ผิด - ส่งคำขอทีละมากๆ โดยไม่หยุดพัก
for symbol in symbols:
response = requests.get(url) # จะโดน Rate Limit แน่นอน
✅ วิธีที่ถูก - ใส่ delay ระหว่างคำขอ
for symbol in symbols:
response = requests.get(url)
if response.status_code == 429:
print("รอ 60 วินาที...")
time.sleep(60) # รอ 1 นาทีก่อนลองใหม่
time.sleep(1) # หน่วงเวลา 1 วินาทีระหว่างแต่ละคำขอ
3. ข้อผิดพลาด 400 Bad Request - Invalid Date Format
สาเหตุ: รูปแบบวันเวลาไม่ถูกต้อง
from datetime import datetime, timezone
❌ วิธีที่ผิด - รูปแบบไม่ถูกต้อง
from_date = "2025-03-28 00:00:00" # ขาด 'T' และ 'Z'
❌ วิธีที่ผิดอีกแบบ - ใช้ timezone ที่ไม่ตรงกับ UTC
from_date = "2025-03-28T00:00:00+07:00" # เป็น +7 ไม่ใช่ UTC
✅ วิธีที่ถูก - ISO 8601 format ที่ถูกต้อง
from_date = "2025-03-28T00:00:00Z" # Z = UTC
to_date = "2025-03-28T23:59:59Z"
หรือสร้างจาก Python datetime
now = datetime.now(timezone.utc)
from_date = now.isoformat().replace("+00:00", "Z")
4. ข้อมูลว่างเปล่า (Empty Response)
สาเหตุ: ช่วงเวลาที่ระบุไม่มีข้อมูล หรือ Symbol ไม่มีอยู่จริง
# ❌ วิธีที่ผิด - ไม่ตรวจสอบว่าข้อมูลว่างหรือไม่
data = response.json()
df = pd.DataFrame(data) # จะสร้าง DataFrame �
แหล่งข้อมูลที่เกี่ยวข้อง