ในโลกของการเทรดคริปโตเคอร์เรนซี ข้อมูล Order Book คือหัวใจสำคัญที่เทรดเดอร์ระดับมืออาชีพใช้ในการวิเคราะห์แรงซื้อ-แรงขาย ทำความเข้าใจโครงสร้างลึกของ Order Book จะช่วยให้คุณสามารถคาดการณ์การเคลื่อนไหวของราคาได้แม่นยำยิ่งขึ้น ในบทความนี้ผมจะพาคุณไปดูการวิเคราะห์เชิงลึกด้วยโค้ด Python ระดับ Production ที่ใช้งานได้จริง พร้อมการประยุกต์ใช้ AI ในการวิเคราะห์และทำนายแนวโน้มราคา

Order Book คืออะไร และทำไมจึงสำคัญ

Order Book คือรายการคำสั่งซื้อ-ขายที่รอการจับคู่ในตลาด ประกอบด้วยสองฝั่งหลัก คือ Bid (คำสั่งซื้อที่รอจับคู่ในราคาที่ต่ำกว่าราคาตลาด) และ Ask (คำสั่งขายที่รอจับคู่ในราคาที่สูงกว่าราคาตลาด) ความลึก (Depth) ของ Order Book บ่งบอกถึงสภาพคล่องและแรงซื้อ-แรงขายในแต่ละระดับราคา

สถาปัตยกรรมการดึงข้อมูล Order Book

การพัฒนาระบบดึงข้อมูล Order Book แบบ Real-time ต้องคำนึงถึงประสิทธิภาพและความหน่วงในการตอบสนอง ต่อไปนี้คือสถาปัตยกรรมที่ผมใช้งานจริงใน Production

import asyncio
import aiohttp
import time
from dataclasses import dataclass
from typing import List, Dict
import numpy as np
from collections import deque

@dataclass
class OrderBookLevel:
    price: float
    quantity: float
    order_count: int = 0

class OrderBookAnalyzer:
    def __init__(self, symbol: str, depth: int = 20):
        self.symbol = symbol
        self.depth = depth
        self.bids: List[OrderBookLevel] = []
        self.asks: List[OrderBookLevel] = []
        self.history: deque = deque(maxlen=1000)
        self.last_update = 0
        self.latency_ms = 0
        
    async def fetch_orderbook(self, session: aiohttp.ClientSession) -> Dict:
        """ดึงข้อมูล Order Book จาก Exchange"""
        start = time.perf_counter()
        
        # รองรับ Exchange หลายตัว
        if "binance" in self.symbol.lower():
            url = f"https://api.binance.com/api/v3/depth?symbol={self.symbol}&limit={self.depth}"
        elif "coinbase" in self.symbol.lower():
            url = f"https://api.exchange.coinbase.com/products/{self.symbol}/book?level=2"
        else:
            raise ValueError(f"Unsupported exchange for {self.symbol}")
        
        async with session.get(url) as response:
            data = await response.json()
            self.latency_ms = (time.perf_counter() - start) * 1000
            return self._parse_orderbook(data)
    
    def _parse_orderbook(self, data: Dict) -> Dict:
        """Parse และจัดเก็บข้อมูล Order Book"""
        bids = [
            OrderBookLevel(
                price=float(b[0]),
                quantity=float(b[1]),
                order_count=int(b[2]) if len(b) > 2 else 1
            )
            for b in data.get('bids', data.get('bids', []))
        ]
        
        asks = [
            OrderBookLevel(
                price=float(a[0]),
                quantity=float(a[1]),
                order_count=int(a[2]) if len(a) > 2 else 1
            )
            for a in data.get('asks', data.get('asks', []))
        ]
        
        self.bids = sorted(bids, key=lambda x: x.price, reverse=True)
        self.asks = sorted(asks, key=lambda x: x.price)
        
        return {
            'timestamp': time.time