บทนำ: ทำไมต้องดูประวัติคำสั่งซื้อบน Binance

เวลาที่เราซื้อขายคริปโตบน Binance แล้วอยากรู้ว่า "ตอนนั้นราคามันเป็นยังไง" หรือ "ทำไมคำสั่งซื้อถึงไม่ได้ราคานั้น" เราสามารถใช้ API ดึงข้อมูลประวัติคำสั่งซื้อ (Historical Orders) และ Order Book ในอดีตมาดูย้อนหลังได้

บทความนี้เหมาะสำหรับคนที่ไม่เคยใช้ API มาก่อนเลย จะสอนตั้งแต่ติดตั้งโปรแกรม สมัคร API Key บน Binance ไปจนถึงเขียนโค้ดดึงข้อมูลมาแสดง ใช้เวลาประมาณ 15-30 นาทีก็ทำได้แล้ว

Order Book คืออะไร ทำไมต้องดูย้อนหลัง

Order Book คือรายการคำสั่งซื้อและคำสั่งขายที่รอการจับคู่อยู่ในขณะนั้น แบ่งเป็น:

การดู Order Book ย้อนหลังช่วยให้เราเข้าใจ:

ขั้นตอนที่ 1: สมัคร API Key บน Binance

ก่อนจะเขียนโค้ดอะไรได้ เราต้องมี API Key จาก Binance ก่อน ทำตามนี้:

1.1 สมัครบัญชี Binance

ถ้ายังไม่มีบัญชี ให้ไปสมัครที่ เว็บไซต์ Binance จากนั้นยืนยันตัวตนให้เรียบร้อย

1.2 สร้าง API Key

  1. ล็อกอินเข้า Binance
  2. คลิกไอคอนโปรไฟล์ที่มุมขวาบน → เลือก "API Management"
  3. ตั้งชื่อ API สำหรับตัวเอง เช่น "OrderReplay"
  4. เลือกระบบ xAPI (รองรับทั้ง Spot และ Futures)
  5. กดสร้าง API Key

1.3 บันทึกค่าที่ได้

หลังสร้างเสร็จ คุณจะได้ 2 ค่า:

1.4 ตั้งค่าสิทธิ์ API

สำหรับดูประวัติคำสั่งซื้อ ให้เปิดสิทธิ์:

ปิดสิทธิ์ 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

คำอธิบาย:

ขั้นตอนที่ 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))

หลังรันโค้ดนี้ คุณจะเห็นตารางประวัติคำสั่งซื้อมีข้อมูล:

โค้ดที่ 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 ก่อน: 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:
client = Client(API_KEY, API_SECRET, 
                requests_params={"timeout": 30})
APIError: -2015
Invalid API-key, IP, or permissions for action
IP ของเราไม่อยู่ใน whitelist หรือ API Key ผิด ไปที่ API Management ตรวจสอบ IP whitelist เพิ่ม IP ปัจจุบันเข้าไป หรือลบ whitelist ออกชั่วคราว
# ตรวจสอบ IP ปัจจุบัน
import requests
ip = requests.get('https://api.ipify.org').text
print(f"IP ปัจจุบัน: {ip}")
ReadTimeoutError
HTTPSConnectionPool
เซิร์ฟเวอร์ Binance ตอบสถานะแล้วแต่รอนานเกินไป เพิ่ม timeout และ retry logic:
from binance.exceptions import BinanceAPIException
import time

def fetch_with_retry(func, max_retries=3):
    for i in range(max_retries):
        try:
            return func()
        except Exception as e:
            if i == max_retries - 1:
                raise e
            print(f"รอ 5 วินาทีแล้วลองใหม่ ({i+1}/{max_retries})")
            time.sleep(5)

ใช้งาน

orders = fetch_with_retry(lambda: client.get_all_orders(symbol="BTCUSDT"))
WebSocket Connection
ไม่รับข้อมูลเลย
Stream URL ผิด หรือ Internet มีปัญหา ตรวจสอบ URL ว่าถูกต้อง ใช้ wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms และเพิ่ม reconnect logic:
import websocket
import time

def run_websocket():
    while True:
        try:
            ws.run_forever()
        except Exception as e:
            print(f"เชื่อมต่อใหม่ใน 5 วินาที: {e}")
            time.sleep(5)

รัน WebSocket แบบ auto-reconnect

run_websocket()

เหมาะกับใคร / ไม่เหมาะกับใคร

✅ เหมาะกับใคร ❌ ไม่เหมาะกับใคร
  • นักเทรดที่ต้องการวิเคราะห์คำสั่งซื้อย้อนหลัง
  • ผู้พัฒนาบอทเทรดอัตโนมัติ
  • คนที่อยากศึกษาพฤติกรรมราคาด้วยตัวเอง
  • นักวิจัยด้านการเงินที่ต้องการข้อมูลตลาด
  • คนที่ต้องการทำ arbitrage แบบเรียลไทม์ (ต้องใช้ API แบบมีค่าใช้จ่าย)
  • ผู้ที่ไม่มีความรู้เรื่องความปลอดภัย API เลย (เสี่ยงเรื่องการถูกแฮ็ก)
  • คนที่ต้องการข้อมูลย้อนหลังมากกว่า 90 วัน (Binance ฟรีให้แค่ 90 วัน)

ราคาและ 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:

ตัวอย่างโค้ดใช้ 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