ในยุคที่ AI กลายเป็นหัวใจสำคัญของระบบซื้อขายอัตโนมัติ การสร้าง Market Maker ที่ขับเคลื่อนด้วย AI ต้องอาศัยการผสมผสานระหว่าง การวิเคราะห์订单簿แบบเรียลไทม์ และ อัลกอริทึมการกำหนดราคาแบบไดนามิก บทความนี้จะสอนการสร้างระบบตั้งแต่พื้นฐานจนถึง Production-ready พร้อมโค้ดที่รันได้จริง
สรุปคำตอบ: สิ่งที่คุณจะได้จากบทความนี้
- เข้าใจหลักการทำงานของ Order Book Analysis สำหรับ Market Making
- เรียนรู้ Dynamic Pricing Algorithm ที่ปรับตัวตามสภาพตลาด
- จัดการ Inventory อย่างมีประสิทธิภาพด้วย AI
- ตัวอย่างโค้ดที่ใช้งานได้จริงกับ HolySheep AI (Latency <50ms, ประหยัด 85%+ )
Order Book คืออะไร และทำไมมันสำคัญสำหรับ Market Making
Order Book คือบันทึกรายการคำสั่งซื้อ-ขายทั้งหมดในตลาด แสดงให้เห็น ความลึกของตลาด (Market Depth) และ ความไม่สมดุล (Imbalance) ซึ่งเป็นข้อมูลสำคัญสำหรับการกำหนดราคาที่เหมาะสม
โครงสร้างของ Order Book
from dataclasses import dataclass
from typing import List, Dict
from enum import Enum
import heapq
class Side(Enum):
BID = "bid" # คำสั่งซื้อ
ASK = "ask" # คำสั่งขาย
@dataclass
class Order:
price: float
quantity: float
side: Side
timestamp: float
order_id: str
class OrderBook:
def __init__(self, max_levels: int = 10):
self.bids = [] # Max heap (ใช้ negative price)
self.asks = [] # Min heap
self.max_levels = max_levels
self.order_map: Dict[str, Order] = {}
def add_order(self, order: Order):
"""เพิ่มคำสั่งใหม่เข้าสู่ Order Book"""
self.order_map[order.order_id] = order
if order.side == Side.BID:
heapq.heappush(self.bids, (-order.price, order))
else:
heapq.heappush(self.asks, (order.price, order))
def remove_order(self, order_id: str):
"""ลบคำสั่งออกจาก Order Book"""
if order_id in self.order_map:
del self.order_map[order_id]
def get_mid_price(self) -> float:
"""ราคากลาง = (ราคาสูงสุดของ Bid + ราคาต่ำสุดของ Ask) / 2"""
best_bid = self.get_best_bid()
best_ask = self.get_best_ask()
if best_bid and best_ask:
return (best_bid + best_ask) / 2
return 0.0
def get_spread(self) -> float:
"""ส่วนต่างราคา (Spread)"""
best_bid = self.get_best_bid()
best_ask = self.get_best_ask()
if best_bid and best_ask:
return best_ask - best_bid
return float('inf')
def get_imbalance(self) -> float:
"""
คำนวณความไม่สมดุลของตลาด
- ค่าบวก = มีแรงซื้อมากกว่า
- ค่าลบ = มีแรงขายมากกว่า
- ค่าใกล้ 0 = สมดุล
"""
bid_volume = sum(qty for _, (_, qty, _) in
[(i, heapq.heappop(self.bids)) for i in range(min(5, len(self.bids)))])
ask_volume = sum(qty for _, (_, qty, _) in
[(i, heapq.heappop(self.asks)) for i in range(min(5, len(self.asks)))])
total = bid_volume + ask_volume
if total == 0:
return 0.0
return (bid_volume - ask_volume) / total
def get_best_bid(self) -> float:
"""ราคาซื้อสูงสุด"""
return -self.bids[0][0] if self.bids else None
def get_best_ask(self) -> float:
"""ราคาขายต่ำสุด"""
return self.asks[0][0] if self.asks else None
def get_market_depth(self, levels: int = 5) -> Dict[str, List[tuple]]:
"""ดึงความลึกของตลาดหลายระดับ"""
return {
'bids': [(abs(p), q) for p, (_, q, _) in
sorted(self.bids, key=lambda x: x[0])[:levels]],
'asks': [(p, q) for p, (_, q, _) in
sorted(self.asks, key=lambda x: x[0])[:levels]]
}
ตัวอย่างการใช้งาน
book = OrderBook()
book.add_order(Order(99.5, 100, Side.BID, 1000, "order_1"))
book.add_order(Order(100.5, 150, Side.ASK, 1001, "order_2"))
book.add_order(Order(99.0, 200, Side.BID, 1002, "order_3"))
print(f"Mid Price: {book.get_mid_price()}")
print(f"Spread: {book.get_spread()}")
print(f"Market Imbalance: {book.get_imbalance():.2%}")
Dynamic Pricing: กลยุทธ์การกำหนดราคาอัจฉริยะ
การกำหนดราคาที่ดีต้องคำนึงถึงหลายปัจจัย เช่น ความผันผวนของตลาด สภาพคล่อง และความเสี่ยงจาก Inventory ต่อไปนี้คืออัลกอริทึมที่ใช้งานได้จริง
AI-Powered Dynamic Pricing Engine
import asyncio
import aiohttp
import json
from datetime import datetime
from typing import Optional
class AIMarketPricingEngine:
"""เครื่องมือกำหนดราคาที่ขับเคลื่อนด้วย AI"""
def __init__(
self,
api_key: str,
base_url: str = "https://api.holysheep.ai/v1",
model: str = "gpt-4.1"
):
self.api_key = api_key
self.base_url = base_url
self.model = model
# พารามิเตอร์สำหรับการกำหนดราคา
self.base_spread = 0.01 # Spread เริ่มต้น 1%
self.min_spread = 0.002 # Spread ขั้นต่ำ 0.2%
self.max_spread = 0.05 # Spread สูงสุด 5%
# ค่าเฉลี่ยเคลื่อนที่
self.price_history = []
self.lookback_window = 20
async def get_ai_pricing_recommendation(
self,
current_price: float,
order_book_state: dict,
inventory_position: float,
volatility: float
) -> dict:
"""
ขอคำแนะนำราคาจาก AI โดยใช้ HolySheep API
"""
prompt = f"""ในฐานะ Market Maker AI วิเคราะห์สถานการณ์ตลาดต่อไปนี้:
ราคาปัจจุบัน: ${current_price:.2f}
สถานะ Order Book: {json.dumps(order_book_state, indent=2)}
ตำแหน่ง Inventory: {inventory_position:.2%} (บวก=Long, ลบ=Short)
ความผันผวน: {volatility:.2%}
วิเคราะห์และแนะนำ:
1. Bid Price (ราคาที่ควรตั้งซื้อ)
2. Ask Price (ราคาที่ควรตั้งขาย)
3. ขนาดคำสั่งที่เหมาะสม
4. ระดับความเสี่ยง (1-10)
ตอบกลับในรูปแบบ JSON ที่มีคีย์: bid_price, ask_price, order_size, risk_level"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"model": self.model,
"messages": [
{
"role": "system",
"content": "คุณเป็นผู้เชี่ยวชาญด้าน Market Making และการเงินเชิงปริมาณ"
},
{
"role": "user",
"content": prompt
}
],
"temperature": 0.3,
"max_tokens": 500
}
async with aiohttp.ClientSession() as session:
async with session.post(
f"{self.base_url}/chat/completions",
headers=headers,
json=payload
) as response:
if response.status == 200:
result = await response.json()
content = result['choices'][0]['message']['content']
return self._parse_ai_response(content)
else:
# Fallback ไปใช้ deterministic pricing
return self._fallback_pricing(
current_price, volatility, inventory_position
)
def _parse_ai_response(self, content: str) -> dict:
"""แปลงคำตอบของ AI เป็น dict"""
try:
# พยายาม parse JSON จาก response
start = content.find('{')
end = content.rfind('}') + 1
if start != -1 and end != 0:
return json.loads(content[start:end])
except:
pass
return None
def _fallback_pricing(
self,
mid_price: float,
volatility: float,
inventory_bias: float
) -> dict:
"""
การกำหนดราคาแบบ Fallback เมื่อ AI ไม่ตอบ
สูตร: spread = base_spread * (1 + volatility_factor) * inventory_adjustment
"""
# Volatility adjustment: ความผันผวนสูง = spread กว้าง
vol_factor = 1 + (volatility / 0.01) # ปรับตาม vol
# Inventory adjustment: ถ้า long เกิน = ลด ask spread
inv_adjustment = 1 + (inventory_bias * 0.5)
spread = self.base_spread * vol_factor * inv_adjustment
spread = max(self.min_spread, min(spread, self.max_spread))
return {
"bid_price": mid_price * (1 - spread/2),
"ask_price": mid_price * (1 + spread/2),
"order_size": min(100, max(10, 100 * (1 - abs(inventory_bias)))),
"risk_level": int(min(10, max(1, abs(inventory_bias) * 10)))
}
ตัวอย่างการใช้งาน
async def main():
engine = AIMarketPricingEngine(
api_key="YOUR_HOLYSHEEP_API_KEY", # ใส่ API Key ของคุณ
model="gpt-4.1"
)
recommendation = await engine.get_ai_pricing_recommendation(
current_price=100.0,
order_book_state={
"bid_depth": 1000,
"ask_depth": 800,
"imbalance": 0.15
},
inventory_position=0.3,
volatility=0.02
)
print(f"AI Recommendation: {recommendation}")
asyncio.run(main())
เปรียบเทียบ AI API Providers สำหรับ Market Making
| Provider | ราคา (ระบุ/MTok) | ความหน่วง (Latency) | รุ่นโมเดล | วิธีชำระเงิน | เหมาะกับ |
|---|---|---|---|---|---|
| HolySheep AI |
GPT-4.1: $8 Claude Sonnet 4.5: $15 Gemini 2.5 Flash: $2.50 DeepSeek V3.2: $0.42 |
<50ms |
GPT-4.1, Claude 4.5 Gemini 2.5, DeepSeek V3.2 |
WeChat, Alipay | ผู้เริ่มต้น - มืออาชีพ |
| OpenAI API |
GPT-4o: $15 GPT-4o-mini: $0.75 |
~200-500ms | GPT-4o, GPT-4o-mini | บัตรเครดิต | องค์กรใหญ่ |
| Anthropic API |
Claude 3.5 Sonnet: $9 Claude 3.5 Haiku: $1.25 |
~150-400ms | Claude 3.5 Sonnet, Haiku | บัตรเครดิต | แอปพลิเคชันที่ซับซ้อน |
| Google AI |
Gemini 1.5 Pro: $7 Gemini 1.5 Flash: $0.70 |
~100-300ms | Gemini 1.5 Pro/Flash | บัตรเครดิต | แอปพลิเคชัน Google |
ทำไมต้องเลือก HolySheep AI? ด้วยอัตราแลกเปลี่ยน ¥1=$1 และความหน่วงต่ำกว่า 50ms ทำให้ HolySheep AI เหมาะอย่างยิ่งสำหรับระบบ Market Making ที่ต้องการความเร็วและประหยัดค่าใช้จ่าย
Inventory Management: การจัดการสินค้าคงคลังแบบมืออาชีพ
การจัดการ Inventory ที่ไม่ดีจะทำให้ Market Maker ขาดทุน ต่อไปนี้คือระบบที่ช่วยควบคุมความเสี่ยง
from enum import Enum
from typing import Deque
from collections import deque
import numpy as np
class RiskLevel(Enum):
SAFE = "safe"
CAUTION = "caution"
DANGER = "danger"
CRITICAL = "critical"
class InventoryManager:
"""ระบบจัดการ Inventory สำหรับ Market Maker"""
def __init__(
self,
max_inventory: float = 1000,
target_inventory: float = 0,
inventory_limit_pct: float = 0.8
):
self.max_inventory = max_inventory
self.target_inventory = target_inventory
self.inventory_limit_pct = inventory_limit_pct
# ติดตามสถานะปัจจุบัน
self.current_inventory = 0.0
self.inventory_history: Deque[float] = deque(maxlen=100)
# สถิติ
self.total_pnl = 0.0
self.realized_pnl = 0.0
self.unrealized_pnl = 0.0
# ค่าเฉลี่ยเคลื่อนที่
self.avg_inventory = 0.0
self.inventory_std = 0.0
@property
def inventory_ratio(self) -> float:
"""สัดส่วน Inventory ปัจจุบันต่อ Maximum"""
return abs(self.current_inventory) / self.max_inventory
@property
def is_long(self) -> bool:
"""ตำแหน่ง Long?"""
return self.current_inventory > 0
@property
def is_short(self) -> bool:
"""ตำแหน่ง Short?"""
return self.current_inventory < 0
def add_position(
self,
quantity: float,
price: float,
side: Side,
current_market_price: float
) -> dict:
"""
เพิ่มตำแหน่งใหม่เข้าสู่ Portfolio
Args:
quantity: จำนวน
price: ราคาที่ซื้อ/ขาย
side: ฝั่งของคำสั่ง
current_market_price: ราคาตลาดปัจจุบัน
Returns:
dict ที่มีสถานะและคำแนะนำ
"""
# คำนวณ inventory ใหม่
if side == Side.BID:
new_inventory = self.current_inventory + quantity
else:
new_inventory = self.current_inventory - quantity
# ตรวจสอบขีดจำกัด
if abs(new_inventory) > self.max_inventory * self.inventory_limit_pct:
return {
"accepted": False,
"reason": "เกินขีดจำกัด Inventory",
"current_inventory": self.current_inventory,
"limit": self.max_inventory * self.inventory_limit_pct
}
# อัพเดท inventory
old_inventory = self.current_inventory
self.current_inventory = new_inventory
self.inventory_history.append(new_inventory)
# คำนวณ P&L
self._update_pnl(old_inventory, quantity, price, current_market_price, side)
return {
"accepted": True,
"new_inventory": self.current_inventory,
"inventory_ratio": self.inventory_ratio,
"pnl": self.total_pnl,
"risk_level": self.get_risk_level()
}
def _update_pnl(
self,
old_inv: float,
qty: float,
price: float,
mkt_price: float,
side: Side
):
"""อัพเดท Profit & Loss"""
if side == Side.BID:
# ซื้อ = เพิ่ม inventory = ได้ asset
# Unrealized P&L = (ราคาตลาด - ราคาซื้อ) * จำนวน
self.unrealized_pnl = (mkt_price - price) * qty
else:
# ขาย = ลด inventory = short position
self.unrealized_pnl = (price - mkt_price) * qty
self.total_pnl = self.realized_pnl + self.unrealized_pnl
def get_risk_level(self) -> RiskLevel:
"""ประเมินระดับความเสี่ยง"""
ratio = self.inventory_ratio
if ratio >= 0.9:
return RiskLevel.CRITICAL
elif ratio >= 0.7:
return RiskLevel.DANGER
elif ratio >= 0.5:
return RiskLevel.CAUTION
else:
return RiskLevel.SAFE
def get_rebalancing_signal(self) -> Optional[str]:
"""
ส่งสัญญาณ Rebalancing ตาม Inventory
Returns:
"buy" ถ้าต้องการลด Short
"sell" ถ้าต้องการลด Long
None ถ้าไม่ต้อง rebalance
"""
target = self.target_inventory
diff = self.current_inventory - target
if diff > self.max_inventory * 0.2:
return "sell" # ขายเพื่อลด position
elif diff < -self.max_inventory * 0.2:
return "buy" # ซื้อเพื่อลด position
return None
def calculate_optimal_spread(
self,
base_spread: float,
volatility: float
) -> float:
"""
คำนวณ Spread ที่เหมาะสมตาม Inventory
หลักการ:
- Long Inventory + ราคาลด = Spread กว้างขึ้น
- Short Inventory + ราคาขึ้น = Spread กว้างขึ้น
"""
inventory_skew = self.current_inventory / self.max_inventory
# Volatility adjustment
vol_adjustment = 1 + (volatility * 10)
# Inventory adjustment
inv_adjustment = 1 + (inventory_skew * 0.5)
adjusted_spread = base_spread * vol_adjustment * inv_adjustment
# จำกัด spread สูงสุด
return min(adjusted_spread, base_spread * 3)
def get_summary(self) -> dict:
"""สรุปสถานะทั้งหมด"""
self.avg_inventory = np.mean(self.inventory_history) if self.inventory_history else 0
self.inventory_std = np.std(self.inventory_history) if self.inventory_history else 0
return {
"current_inventory": self.current_inventory,
"inventory_ratio": f"{self.inventory_ratio:.1%}",
"risk_level": self.get_risk_level().value,
"total_pnl": self.total_pnl,
"realized_pnl": self.realized_pnl,
"unrealized_pnl": self.unrealized_pnl,
"avg_inventory": self.avg_inventory,
"rebalancing_signal": self.get_rebalancing_signal()
}
ตัวอย่างการใช้งาน
manager = InventoryManager(max_inventory=1000)
ซื้อ 100 หน่วย ที่ราคา 50
result1 = manager.add_position(100, 50, Side.BID, 50)
print(f"ซื้อ 100: {result1}")
ซื้อ 200 หน่วย ที่ราคา 52
result2 = manager.add_position(200, 52, Side.BID, 52)
print(f"ซื้อ 200: {result2}")
ราคาตลาดเปลี่ยนเป็น 51
result3 = manager.add_position(0, 0, Side.BID, 51)
print(f"ราคาตลาด 51: {manager.get_summary()}")
คำนวณ spread ที่เหมาะสม
optimal_spread = manager.calculate_optimal_spread(0.01, 0.02)
print(f"Optimal Spread: {optimal_spread:.4f}")
Integration: รวมทุกส่วนเข้าด้วยกัน
ต่อไปนี้คือระบบ Market Maker ที่สมบูรณ์ที่รวม Order Book, Dynamic Pricing และ Inventory Management เข้าด้วยกัน
import asyncio
import logging
from datetime import datetime
from typing import Optional
Setup Logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class AIMarketMaker:
"""
ระบบ Market Maker ที่ขับเคลื่อนด้วย AI
องค์ประกอบ:
1. OrderBook - ติดตามคำสั่งในตลาด
2. PricingEngine - กำหนดราคาอัจฉริยะ
3. InventoryManager - จัดการความเสี่ยง
"""
def __init__(
self,
api_key: str,
base_url: str = "https://api.holysheep.ai/v1",
max_position: float = 1000,
target_spread: float = 0.01
):
# องค์ประกอบหลัก
self.order_book = OrderBook(max_levels=20)
self.pricing_engine = AIMarketPricingEngine(
api_key=api_key,
base_url=base_url
)
self.inventory_manager = InventoryManager(
max_inventory=max_position
)
# พารามิเตอร์