หากคุณกำลังสนใจการวิเคราะห์กราฟราคาคริปโตย้อนหลัง หรือต้องการนำข้อมูลประวัติการซื้อขายมาสร้างระบบเทรดอัตโนมัติ บทความนี้จะพาคุณเรียนรู้วิธีใช้ Tardis.dev เพื่อดึงข้อมูลเหล่านั้นมาอย่างเป็นขั้นตอน สอนตั้งแต่ไม่ต้องมีพื้นฐานการเขียนโค้ดมาก่อนก็ทำได้
Tardis.dev คืออะไร ใช้ทำอะไร
Tardis.dev เป็นบริการที่รวบรวมข้อมูลการซื้อขายคริปโตจากตลาดต่างๆ ทั่วโลกมาไว้ในที่เดียว ช่วยให้นักพัฒนาและนักวิเคราะห์สามารถเข้าถึงข้อมูลประวัติราคา ปริมาณการซื้อขาย และข้อมูล Order Book ย้อนหลังได้อย่างสะดวกผ่าน API
สิ่งที่คุณจะได้จากบทความนี้:
- เข้าใจหลักการทำงานของ Tardis.dev API
- สามารถดึงข้อมูลกราฟราคาย้อนหลังได้ด้วยตัวเอง
- นำข้อมูลไปใช้วิเคราะห์หรือสร้างระบบเทรด
- แก้ไขปัญหาที่พบบ่อยได้
เตรียมอะไรบ้างก่อนเริ่มต้น
ก่อนจะเริ่มดึงข้อมูล คุณต้องเตรียมเครื่องมือ 2 อย่างดังนี้:
1. ติดตั้ง Python
Python คือภาษาโปรแกรมที่ใช้กันอย่างแพร่หลายในการวิเคราะห์ข้อมูล ให้คุณดาวน์โหลดและติดตั้งจากเว็บไซต์ python.org โดยเลือกเวอร์ชันล่าสุดที่รองรับระบบปฏิบัติการของคุณ
ขั้นตอนการติดตั้ง:
- เข้าไปที่ python.org/downloads
- คลิกปุ่มดาวน์โหลด Python
- รันไฟล์ติดตั้งและทำเครื่องหมายถูกที่ "Add Python to PATH"
- คลิก Install Now
2. สมัครบัญชี Tardis.dev
ไปที่เว็บไซต์ tardis.dev แล้วคลิกปุ่ม Sign Up เพื่อสร้างบัญชีผู้ใช้ หลังจากยืนยันอีเมลแล้ว คุณจะได้รับ API Key ที่ใช้ในการเข้าถึงข้อมูล คัดลอก API Key เก็บไว้ในที่ปลอดภัย
วิธีหา API Key:
- ล็อกอินเข้าสู่ระบบ tardis.dev
- ไปที่หน้า Dashboard
- ค้นหาหมวด API Credentials
- คัดลอก Key ที่แสดง
เริ่มเขียนโค้ดดึงข้อมูลครั้งแรก
ให้คุณเปิดโปรแกรม Command Prompt หรือ Terminal แล้วพิมพ์คำสั่งติดตั้งไลบรารีที่จำเป็น:
pip install requests
จากนั้นสร้างไฟล์ใหม่ชื่อ get_crypto_data.py แล้วเขียนโค้ดดังนี้:
import requests
ตั้งค่าข้อมูลการเชื่อมต่อ
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
เลือกข้อมูลที่ต้องการ
exchange = "binance" # ตลาดที่ต้องการ
symbol = "btc-usdt" # คู่เทรด
channel = "trades" # ประเภทข้อมูล (trades = ข้อมูลการซื้อขาย)
สร้าง URL สำหรับเรียก API
url = f"{BASE_URL}/exchanges/{exchange}/{channel}"
params = {
"symbol": symbol,
"limit": 100 # จำนวนข้อมูลที่ต้องการ
}
ส่งคำขอไปยัง API
headers = {
"Authorization": f"Bearer {API_KEY}"
}
response = requests.get(url, headers=headers, params=params)
แสดงผลข้อมูล
if response.status_code == 200:
data = response.json()
print("ดึงข้อมูลสำเร็จ!")
print(f"จำนวนรายการ: {len(data)}")
for trade in data[:5]: # แสดง 5 รายการแรก
print(f"ราคา: {trade['price']}, ปริมาณ: {trade['amount']}")
else:
print(f"เกิดข้อผิดพลาด: {response.status_code}")
print(response.text)
รันโค้ดโดยพิมพ์คำสั่ง:
python get_crypto_data.py
หากทุกอย่างถูกต้อง คุณจะเห็นข้อมูลการซื้อขาย BTC/USDT 5 รายการแรกปรากฏบนหน้าจอ
ดึงข้อมูล Order Book ย้อนหลัง
Order Book คือข้อมูลคำสั่งซื้อและคำสั่งขายที่รอการจับคู่ ซึ่งมีประโยชน์มากสำหรับการวิเคราะห์ความลึกของตลาด ให้สร้างไฟล์ใหม่ชื่อ get_orderbook.py:
import requests
import time
ตั้งค่าข้อมูล
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
exchange = "binance"
symbol = "eth-usdt"
ดึงข้อมูล Order Book ล่าสุด
url = f"{BASE_URL}/exchanges/{exchange}/orderbook_snapshot"
params = {
"symbol": symbol,
"limit": 10 # จำนวนระดับราคาที่ต้องการ
}
headers = {
"Authorization": f"Bearer {API_KEY}"
}
print("กำลังดึงข้อมูล Order Book...")
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
print("\n=== คำสั่งซื้อ (Bids) ===")
for bid in data.get("bids", [])[:5]:
print(f"ราคา: {bid[0]}, ปริมาณ: {bid[1]}")
print("\n=== คำสั่งขาย (Asks) ===")
for ask in data.get("asks", [])[:5]:
print(f"ราคา: {ask[0]}, ปริมาณ: {ask[1]}")
else:
print(f"ข้อผิดพลาด: {response.status_code}")
print(response.text)
รันด้วยคำสั่ง python get_orderbook.py คุณจะเห็นรายการคำสั่งซื้อและขายของ ETH/USDT ที่รอการจับคู่
ดึงข้อมูลราคาย้อนหลังหลายวัน
สำหรับการดึงข้อมูลย้อนหลังหลายวัน คุณต้องระบุช่วงเวลาในการค้นหา ให้สร้างไฟล์ get_historical.py:
import requests
from datetime import datetime, timedelta
ตั้งค่า
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
exchange = "binance"
symbol = "bnb-usdt"
กำหนดช่วงเวลา (7 วันย้อนหลัง)
end_date = datetime.now()
start_date = end_date - timedelta(days=7)
แปลงเป็น timestamp
start_ts = int(start_date.timestamp() * 1000)
end_ts = int(end_date.timestamp() * 1000)
ดึงข้อมูล trades
url = f"{BASE_URL}/exchanges/{exchange}/trades"
params = {
"symbol": symbol,
"from": start_ts,
"to": end_ts,
"limit": 1000
}
headers = {
"Authorization": f"Bearer {API_KEY}"
}
print(f"กำลังดึงข้อมูล {symbol} ตั้งแต่ {start_date.date()} ถึง {end_date.date()}")
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
trades = response.json()
print(f"\nดึงข้อมูลได้ {len(trades)} รายการ")
# คำนวณสถิติ
if trades:
prices = [float(t['price']) for t in trades]
high = max(prices)
low = min(prices)
avg = sum(prices) / len(prices)
print(f"\n=== สถิติราคา ===")
print(f"สูงสุด: {high:.2f} USDT")
print(f"ต่ำสุด: {low:.2f} USDT")
print(f"เฉลี่ย: {avg:.2f} USDT")
else:
print(f"ข้อผิดพลาด: {response.status_code}")
print(response.text)
โค้ดนี้จะดึงข้อมูลการซื้อขาย BNB/USDT ในช่วง 7 วันย้อนหลัง แล้วคำนวณราคาสูงสุด ต่ำสุด และเฉลี่ยให้อัตโนมัติ
ตารางเปรียบเทียบประเภทข้อมูลที่รองรับ
| ประเภทข้อมูล | รายละเอียด | ใช้งานเหมาะกับ |
|---|---|---|
| trades | ข้อมูลการซื้อขายที่เกิดขึ้นจริง | วิเคราะห์ปริมาณซื้อขาย หาแนวโน้ม |
| orderbook_snapshot | ภาพรวมคำสั่งซื้อขาย ณ ขณะนั้น | ดูแรงซื้อแรงขาย ระดับแนวรับแนวต้าน |
| orderbook | ข้อมูลการเปลี่ยนแปลง Order Book | ติดตามการเคลื่อนไหวของคำสั่งในตลาด |
| candles | ข้อมูลกราฟแท่งเทียน | สร้างกราฟ วิเคราะห์ทางเทคนิค |
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
กรณีที่ 1: ได้รับข้อผิดพลาด 401 Unauthorized
สาเหตุ: API Key ไม่ถูกต้องหรือหมดอายุ
# วิธีแก้ไข: ตรวจสอบ API Key
import os
API_KEY = os.environ.get("TARDIS_API_KEY") # อ่านจาก Environment Variable
หรือตรวจสอบว่า Key ไม่ว่าง
if not API_KEY or API_KEY == "YOUR_TARDIS_API_KEY":
print("กรุณาตั้งค่า API Key ที่ถูกต้อง")
exit(1)
ทดสอบ Key โดยเรียกข้อมูลง่ายๆ
test_url = "https://api.tardis.dev/v1/status"
response = requests.get(test_url, headers={"Authorization": f"Bearer {API_KEY}"})
if response.status_code == 401:
print("API Key ไม่ถูกต้อง กรุณาตรวจสอบที่ https://tardis.dev/dashboard")
elif response.status_code == 200:
print("API Key ถูกต้อง พร้อมใช้งาน")
else:
print(f"ข้อผิดพลาดอื่น: {response.status_code}")
วิธีแก้ไข:
- ไปที่ Dashboard ของ Tardis.dev แล้วคัดลอก API Key ใหม่
- อย่าแชร์ API Key กับผู้อื่น
- ตรวจสอบว่าไม่มีช่องว่างหรือตัวอักษรพิเศษติดมาด้วย
กรณีที่ 2: ได้รับข้อผิดพลาด 429 Rate Limit
สาเหตุ: ส่งคำขอมากเกินจำนวนที่อนุญาตในเวลาที่กำหนด
import time
import requests
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
def safe_api_call(url, headers, params, max_retries=3):
"""เรียก API อย่างปลอดภัย พร้อมรอเมื่อถูกจำกัด"""
for attempt in range(max_retries):
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# รอ 60 วินาทีแล้วลองใหม่
wait_time = 60
print(f"ถูกจำกัดการใช้งาน รอ {wait_time} วินาที...")
time.sleep(wait_time)
else:
print(f"ข้อผิดพลาด: {response.status_code}")
return None
print("ล้มเหลวหลังจากลอง 3 ครั้ง")
return None
วิธีใช้งาน
headers = {"Authorization": f"Bearer {API_KEY}"}
result = safe_api_call(
f"{BASE_URL}/exchanges/binance/trades",
headers,
{"symbol": "btc-usdt", "limit": 100}
)
วิธีแก้ไข:
- เพิ่มคำสั่ง time.sleep() เพื่อหยุดระหว่างการเรียก API
- ลดจำนวนคำขอต่อวินาที
- พิจารณาใช้แพ็กเกจที่มีราคาสูงขึ้นเพื่อรับ Rate Limit ที่สูงกว่า
กรณีที่ 3: ได้รับข้อมูลว่างเปล่า
สาเหตุ: ระบุช่วงเวลาหรือสัญลักษณ์ผิดพลาด
import requests
from datetime import datetime
API_KEY = "YOUR_TARDIS_API_KEY"
BASE_URL = "https://api.tardis.dev/v1"
def search_available_symbols(exchange):
"""ค้นหาสัญลักษณ์ที่มีให้ใช้งาน"""
url = f"{BASE_URL}/exchanges/{exchange}/available_channels"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
print("ช่องทางที่รองรับ:", list(data.keys()))
return data
return None
def get_symbols_for_trades(exchange):
"""ดูสัญลักษณ์ที่รองรับข้อมูล trades"""
url = f"{BASE_URL}/exchanges/{exchange}/trades"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(url, headers=headers)
# ลองดึงโดยไม่ระบุ symbol
if response.status_code == 200:
print("รองรับ trades channel")
# ลองแสดงรายการ symbol ที่พบ
response = requests.get(
url,
headers=headers,
params={"limit": 1}
)
print("สามารถเรียก trades ได้")
else:
print(f"ไม่รองรับ: {response.text}")
ตรวจสอบ
print("=== ตรวจสอบ Exchange ===")
symbols = search_available_symbols("binance")
print(f"สัญลักษณ์ที่รองรับ:", symbols)
วิธีแก้ไข:
- ตรวจสอบว่าสะกดสัญลักษณ์ถูกต้อง เช่น btc-usdt ไม่ใช่ btc_usdt
- ดูว่า Exchange ที่เลือกมีข้อมูลในช่วงเวลาที่ต้องการหรือไม่
- ตรวจสอบรายชื่อ Exchange และ Symbol ที่รองรับจากเอกสารของ Tardis.dev
เคล็ดลับเพิ่มเติมสำหรับการใช้งาน
1. เก็บ API Key ให้ปลอดภัย — อย่าเก็บ API Key ไว้ในโค้ดโดยตรง ใช้ Environment Variable แทน
2. เริ่มจากข้อมูลน้อยๆ — ทดสอบด้วย limit=10 ก่อน เมื่อมั่นใจว่าถูกต้องแล้วค่อยดึงข้อมูลมากขึ้น
3. บันทึกข้อมูลลงไฟล์ — เพื่อไม่ต้องดึงซ้ำๆ ทุกครั้ง
import json
บันทึกข้อมูลลงไฟล์
def save_data(data, filename):
with open(filename, 'w') as f:
json.dump(data, f, indent=2)
print(f"บันทึก {len(data)} รายการลง {filename}")
ใช้งาน
if response.status_code == 200:
data = response.json()
save_data(data, 'crypto_trades.json')
4. ตรวจสอบข้อมูลก่อนใช้งาน — ข้อมูลบางส่วนอาจมีค่าว่า�