บทนำ: ทำไมต้องดูประวัติคำสั่งซื้อบน Binance
เวลาที่เราซื้อขายคริปโตบน Binance แล้วอยากรู้ว่า "ตอนนั้นราคามันเป็นยังไง" หรือ "ทำไมคำสั่งซื้อถึงไม่ได้ราคานั้น" เราสามารถใช้ API ดึงข้อมูลประวัติคำสั่งซื้อ (Historical Orders) และ Order Book ในอดีตมาดูย้อนหลังได้
บทความนี้เหมาะสำหรับคนที่ไม่เคยใช้ API มาก่อนเลย จะสอนตั้งแต่ติดตั้งโปรแกรม สมัคร API Key บน Binance ไปจนถึงเขียนโค้ดดึงข้อมูลมาแสดง ใช้เวลาประมาณ 15-30 นาทีก็ทำได้แล้ว
Order Book คืออะไร ทำไมต้องดูย้อนหลัง
Order Book คือรายการคำสั่งซื้อและคำสั่งขายที่รอการจับคู่อยู่ในขณะนั้น แบ่งเป็น:
- Bid Side (ด้านซื้อ) — คำสั่งที่ต้องการซื้อ ราคาต่ำกว่าจะอยู่ด้านบน
- Ask Side (ด้านขาย) — คำสั่งที่ต้องการขาย ราคาสูงกว่าจะอยู่ด้านบน
การดู Order Book ย้อนหลังช่วยให้เราเข้าใจ:
- ว่าตลาดมีแรงซื้อหรือแรงขายมากกว่ากันตอนนั้น
- ราคาที่เราตั้งคำสั่งซื้อไว้อยู่ตำแหน่งไหนในลำดับ
- ทำไมคำสั่งถูกหรือไม่ถูกจับคู่
- วิเคราะห์พฤติกรรมราคาในอดีตเพื่อปรับปรุงการเทรด
ขั้นตอนที่ 1: สมัคร API Key บน Binance
ก่อนจะเขียนโค้ดอะไรได้ เราต้องมี API Key จาก Binance ก่อน ทำตามนี้:
1.1 สมัครบัญชี Binance
ถ้ายังไม่มีบัญชี ให้ไปสมัครที่ เว็บไซต์ Binance จากนั้นยืนยันตัวตนให้เรียบร้อย
1.2 สร้าง API Key
- ล็อกอินเข้า Binance
- คลิกไอคอนโปรไฟล์ที่มุมขวาบน → เลือก "API Management"
- ตั้งชื่อ API สำหรับตัวเอง เช่น "OrderReplay"
- เลือกระบบ xAPI (รองรับทั้ง Spot และ Futures)
- กดสร้าง API Key
1.3 บันทึกค่าที่ได้
หลังสร้างเสร็จ คุณจะได้ 2 ค่า:
- API Key — ดูได้ตลอดเวลา
- Secret Key — แสดงครั้งเดียวตอนสร้าง ต้องก็อปปี้เก็บไว้ทันที หายแล้วต้องสร้างใหม่
1.4 ตั้งค่าสิทธิ์ API
สำหรับดูประวัติคำสั่งซื้อ ให้เปิดสิทธิ์:
- Enable Spot & Margin Trading
- Enable Reading
ปิดสิทธิ์ Enable Withdrawal ไว้เพื่อความปลอดภัย ไม่ต้องการให้โค้ดถอนเงินได้
หมายเหตุความปลอดภัย: ควรตั้ง IP whitelist ด้วย จำกัดว่าให้ใช้ API ได้จาก IP ไหนบ้างเท่านั้น จะช่วยป้องกันการถูกแฮ็กได้ดีมาก
ขั้นตอนที่ 2: ติดตั้ง Python และไลบรารี
เราจะใช้ Python เขียนโค้ดเพราะอ่านง่าย ใช้งานได้จริง ติดตั้งตามนี้:
2.1 ติดตั้ง Python
ไปที่ python.org/downloads ดาวน์โหลด Python 3.9 ขึ้นไป ติ๊ก Add Python to PATH ด้วย
2.2 ติดตั้งไลบรารีที่ต้องใช้
เปิด Command Prompt (Windows) หรือ Terminal (Mac) พิมพ์คำสั่งนี้:
pip install python-binance requests pandas matplotlib
คำอธิบาย:
- python-binance — ไลบรารีสำหรับเชื่อมต่อ Binance API
- requests — สำหรับส่งคำขอ HTTP
- pandas — สำหรับจัดการข้อมูลตาราง
- matplotlib — สำหรับวาดกราฟ
ขั้นตอนที่ 3: โค้ดดึงประวัติคำสั่งซื้อ (Historical Orders)
โค้ดที่ 1: ดึงประวัติคำสั่งซื้อทั้งหมด
import os
from binance.client import Client
import pandas as pd
ตั้งค่า API Key (แนะนำให้ใช้ Environment Variable แทน)
API_KEY = "YOUR_BINANCE_API_KEY"
API_SECRET = "YOUR_BINANCE_API_SECRET"
เชื่อมต่อ Binance
client = Client(API_KEY, API_SECRET)
ดึงประวัติคำสั่งซื้อทั้งหมดในคู่เทรด BTCUSDT
symbol = "BTCUSDT"
ดึงข้อมูลย้อนหลัง 90 วัน
orders = client.get_all_orders(symbol=symbol)
แปลงเป็น DataFrame เพื่อดูง่ายขึ้น
df = pd.DataFrame(orders)
print(f"พบคำสั่งซื้อทั้งหมด: {len(df)} รายการ")
print(df.head(10))
หลังรันโค้ดนี้ คุณจะเห็นตารางประวัติคำสั่งซื้อมีข้อมูล:
- symbol — คู่เทรด เช่น BTCUSDT
- orderId — เลขออเดอร์
- price — ราคาที่ตั้งคำสั่ง
- qty — จำนวนที่สั่งซื้อ
- time — เวลาที่สั่ง (เป็น Unix Timestamp)
- status — สถานะ (NEW, FILLED, CANCELED)
โค้ดที่ 2: กรองเฉพาะคำสั่งที่ถูกจับคู่แล้ว
# กรองเฉพาะคำสั่งที่ถูกจับคู่แล้ว (FILLED)
filled_orders = [o for o in orders if o['status'] == 'FILLED']
print(f"คำสั่งที่ถูกจับคู่แล้ว: {len(filled_orders)} รายการ")
แสดงรายละเอียดแต่ละคำสั่ง
for order in filled_orders[:5]:
import datetime
timestamp = order['time'] / 1000
dt = datetime.datetime.fromtimestamp(timestamp)
print(f"""
ออเดอร์: #{order['orderId']}
เวลา: {dt}
ราคา: {order['price']} USDT
จำนวน: {order['origQty']} BTC
สถานะ: {order['status']}
""")
ขั้นตอนที่ 4: ดึง Order Book ในอดีต
Binance ไม่มี API ดึง Order Bookย้อนหลังโดยตรง แต่มีวิธีใช้ผ่าน WebSocket และบันทึกเก็บไว้ หรือใช้ข้อมูลจากเว็บรวบรวมข้อมูล (Data Provider)
วิธีที่ 1: ใช้ WebSocket บันทึก Order Book ตอนเกิดเหตุ
import websocket
import json
import csv
from datetime import datetime
สร้างไฟล์บันทึก
csv_file = open('orderbook_snapshot.csv', 'w', newline='')
writer = csv.writer(csv_file)
writer.writerow(['timestamp', 'bid_price', 'bid_qty', 'ask_price', 'ask_qty'])
def on_message(ws, message):
data = json.loads(message)
# ดึงข้อมูล Order Book
bids = data['b'] # bid side (ซื้อ)
asks = data['a'] # ask side (ขาย)
# ดึงราคาที่ดีที่สุด (top of book)
best_bid = bids[0] if bids else None
best_ask = asks[0] if asks else None
if best_bid and best_ask:
timestamp = datetime.now().isoformat()
writer.writerow([
timestamp,
best_bid[0], best_bid[1], # ราคาและจำนวน bid
best_ask[0], best_ask[1] # ราคาและจำนวน ask
])
# แสดงผล
spread = float(best_ask[0]) - float(best_bid[0])
print(f"{timestamp} | Bid: {best_bid[0]} ({best_bid[1]}) | "
f"Ask: {best_ask[0]} ({best_ask[1]}) | Spread: {spread:.2f}")
def on_error(ws, error):
print(f"เกิดข้อผิดพลาด: {error}")
def on_close(ws):
csv_file.close()
print("ปิดการเชื่อมต่อแล้ว")
เชื่อมต่อ WebSocket
stream_url = "wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms"
ws = websocket.WebSocketApp(stream_url, on_message=on_message, on_error=on_error, on_close=on_close)
print("กำลังบันทึก Order Book ของ BTCUSDT...")
ws.run_forever()
รันโค้ดนี้ทิ้งไว้ 5-10 นาที คุณจะได้ไฟล์ orderbook_snapshot.csv ที่บันทึก Order Book ทุก 100 มิลลิวินาที นำไปวิเคราะห์ spread หรือความลึกของตลาดได้
วิธีที่ 2: ใช้ข้อมูลจาก Data Provider (แนะนำสำหรับมือใหม่)
ถ้าอยากได้ข้อมูล Order Book ในอดีตหลายวัน แนะนำใช้บริการดาต้าพูล เช่น:
- CCXT — ไลบรารีรวม API หลายตลาด
- Freqtrade — เครื่องมือ Backtesting ฟรี
# ติดตั้ง CCXT ก่อน: pip install ccxt
import ccxt
import pandas as pd
เชื่อมต่อ Binance ผ่าน CCXT
binance = ccxt.binance()
ดึง Order Book ปัจจุบัน
symbol = 'BTC/USDT'
limit = 20 # ดึง 20 รายการแรก
orderbook = binance.fetch_order_book(symbol, limit)
print(f"ราคา Bid สูงสุด: {orderbook['bids'][0]}")
print(f"ราคา Ask ต่ำสุด: {orderbook['asks'][0]}")
คำนวณ Spread
best_bid = float(orderbook['bids'][0][0])
best_ask = float(orderbook['asks'][0][0])
spread = (best_ask - best_bid) / best_bid * 100
print(f"Spread: {spread:.4f}%")
ขั้นตอนที่ 5: วิเคราะห์ Order Book ด้วยภาพ
หลังจากได้ข้อมูลมาแล้ว มาลองวาดกราฟดูกัน จะเห็นภาพรวมของตลาดชัดเจนขึ้น
import matplotlib.pyplot as plt
import pandas as pd
อ่านไฟล์ที่บันทึกไว้
df = pd.read_csv('orderbook_snapshot.csv')
ดึงเฉพาะ 100 รายการแรก
df = df.head(100)
สร้างกราฟ
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
กราฟ Bid Price
ax1.plot(pd.to_datetime(df['timestamp']), df['bid_price'].astype(float),
label='Bid Price', color='green')
ax1.set_ylabel('ราคา Bid (USDT)')
ax1.set_title('ราคา Bid ย้อนหลัง 100 จุด')
ax1.legend()
ax1.grid(True)
กราฟ Ask Price
ax2.plot(pd.to_datetime(df['timestamp']), df['ask_price'].astype(float),
label='Ask Price', color='red')
ax2.set_ylabel('ราคา Ask (USDT)')
ax2.set_xlabel('เวลา')
ax2.set_title('ราคา Ask ย้อนหลัง 100 จุด')
ax2.legend()
ax2.grid(True)
plt.tight_layout()
plt.savefig('orderbook_analysis.png', dpi=150)
print("บันทึกกราฟเป็น orderbook_analysis.png แล้ว")
กราฟที่ได้จะแสดงการเปลี่ยนแปลงราคา Bid และ Ask ย้อนหลัง ช่วยให้เห็นว่าตลาดเคลื่อนไหวยังไง
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
| ข้อผิดพลาด | สาเหตุ | วิธีแก้ไข |
|---|---|---|
| APIRequestException: -1021 Timestamp for this request is not valid |
เวลาบนเครื่องไม่ตรงกับเซิร์ฟเวอร์ Binance | ติดตั้ง NTP เพื่อ sync เวลา หรือเพิ่ม time_offset ตอนสร้าง Client:
|
| APIError: -2015 Invalid API-key, IP, or permissions for action |
IP ของเราไม่อยู่ใน whitelist หรือ API Key ผิด | ไปที่ API Management ตรวจสอบ IP whitelist เพิ่ม IP ปัจจุบันเข้าไป หรือลบ whitelist ออกชั่วคราว
|
| ReadTimeoutError HTTPSConnectionPool |
เซิร์ฟเวอร์ Binance ตอบสถานะแล้วแต่รอนานเกินไป | เพิ่ม timeout และ retry logic:
|
| WebSocket Connection ไม่รับข้อมูลเลย |
Stream URL ผิด หรือ Internet มีปัญหา | ตรวจสอบ URL ว่าถูกต้อง ใช้ wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms และเพิ่ม reconnect logic:
|
เหมาะกับใคร / ไม่เหมาะกับใคร
| ✅ เหมาะกับใคร | ❌ ไม่เหมาะกับใคร |
|---|---|
|
|
ราคาและ ROI
การใช้ Binance API ดึงข้อมูลฟรีมีข้อจำกัด หากต้องการข้อมูลมากขึ้นหรือเร็วขึ้น มีทางเลือกดังนี้:
| แพลน | ค่าใช้จ่าย | ข้อมูลที่ได้ | เหมาะกับ |
|---|---|---|---|
| Binance API ฟรี | ฟรี | 90 วันย้อนหลัง, Rate Limit ต่ำ | มือใหม่เริ่มศึกษา |
| Binance VIP | $200-2,000/เดือน | ข้อมูลครบถ้วน, Rate Limit สูง | นักเทรดรายใหญ่ |
| HolySheep AI | $0.42/MTok (DeepSeek V3.2) | AI วิเคราะห์ข้อมูล API ให้อัตโนมัติ | ผู้ใช้ทั่วไปถึงมืออาชีพ |
ทำไมต้องเลือก HolySheep
หากคุณต้องการวิเคราะห์ข้อมูล Binance แบบลึกขึ้น หรือใช้ AI ช่วยประมวลผล คุณสามารถใช้ HolySheep AI เป็นเครื่องมือเสริมได้
ข้อดีของ HolySheep AI:
- ราคาถูกมาก — เริ่มต้นเพียง $0.42 ต่อล้าน Tokens กับ DeepSeek V3.2 ประหยัดกว่า 85% เมื่อเทียบกับ OpenAI
- รองรับหลายโมเดล — GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Flash, DeepSeek V3.2
- ความเร็วสูง — ความหน่วงต่ำกว่า 50ms
- รองรับหลายช่องทาง — จ่ายเงินผ่าน WeChat, Alipay หรือบัตรเครดิต
- เครดิตฟรี — รับเครดิตฟรีเมื่อสมัครใหม่
ตัวอย่างโค้ดใช้ HolySheep AI วิเคราะห์ประวัติคำสั่งซื้อ
import requests
import json
ใช้ HolySheep AI วิเคราะห์ประวัติคำสั่งซื้อ
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
BASE_URL = "https://api.holysheep.ai/v1"
ข้อมูลคำสั่งซื้อที่ดึงมา
orders_summary = """
คำสั่งซื้อ BTCUSDT วันที่ 15 มกราคม 2025:
- คำสั่งซื้อ: 12 รายการ
- คำสั่งขาย: 8 รายการ
- ออเดอร์ที่ถูกจับคู่: 15 รายการ
- ออเดอร์ที่ถูกยกเลิก: 5 รายการ
- ราคาเฉลี่ยที่ซื้อ: 42,500 USDT
- ราคาเฉลี่ยที่ขาย: 42,800 USDT
"""
ส่งให้ AI วิเคราะห์
response = requests.post(
f"{BASE_URL}/chat/completions",
headers={
"Authorization": f"B