𝗗𝗶𝗳𝗳𝗲𝗿𝗲𝗻𝘁𝗶𝗮𝘁𝗶𝗻𝗴 𝗧𝗿𝗮𝗱𝗲𝘀 𝗶𝗻 𝗛𝗼𝗻𝗴 𝗞𝗼𝗻𝗴 𝗪𝗲𝗯𝗦𝗼𝗰𝗸𝗲𝘁 𝗙𝗲𝗲𝗱𝘀
ข้อมูลตลาดแบบเรียลไทม์นั้นเคลื่อนที่อย่างรวดเร็ว เมื่อคุณสตรีมข้อมูลการซื้อขายหุ้นฮ่องกง คุณจะเห็นรายการซื้อขาย (prints) ที่หลากหลาย ไม่ใช่ทุกการซื้อขายที่จะมีความหมายเหมือนกัน บางรายการคือคำสั่งซื้อขายของนักลงทุน ในขณะที่บางรายการเป็นการจับคู่โดยอัตโนมัติของระบบ (system auto-matches) หรือรายการซื้อขายจำนวนเศษ (odd-lot transactions)
คุณจำเป็นต้องจำแนกประเภทการซื้อขายเหล่านี้อย่างรวดเร็ว
The Problem
ฟิลด์ข้อมูลมาตรฐานมักไม่สามารถช่วยได้ ฟิลด์ประเภทการซื้อขาย (trade type) มักจะไม่น่าเชื่อถือ เพื่อแก้ไขปัญหานี้ ให้ใช้กฎสามข้อดังนี้:
- การตรวจสอบปริมาณ (Volume check): หุ้นฮ่องกงส่วนใหญ่ซื้อขายกันเป็นล็อตละ 100 หุ้น การซื้อขายใดก็ตามที่ต่ำกว่า 100 หุ้นจะถือเป็น odd lot
- การเกาะกลุ่มของเวลา (Time clustering): การซื้อขายที่จับคู่โดยอัตโนมัติจะเกิดขึ้นอย่างรวดเร็วเป็นช่วงๆ คุณจะเห็นรายการที่จับคู่สำเร็จ (fills) จำนวนมากภายในเวลาเพียงไม่กี่มิลลิวินาที ส่วน odd lot จะไม่มีรูปแบบเช่นนี้
- การตรวจสอบคู่สัญญา (Counterparty check): ตรวจสอบผู้ซื้อและผู้ขาย หากทั้งคู่เป็นบัญชีระบบ เช่น SYS แสดงว่าเป็นรายการ auto-match
Implementation
คุณสามารถเขียนโค้ดตรรกะนี้ลงใน data stream ของคุณได้
from websocket import create_connection
import json
API_TOKEN = 'your_api_token'
ws_url = f"wss://ws.alltick.co/stock?token={API_TOKEN}"
ws = create_connection(ws_url)
subscribe_msg = {
"action": "subscribe",
"symbol": "00700.HK",
"type": "transaction"
}
ws.send(json.dumps(subscribe_msg))
def check_auto_match(tick):
return tick.get('buyer') == 'SYS' and tick.get('seller') == 'SYS'
while True:
data = ws.recv()
tick = json.loads(data)
volume = tick.get('volume', 0)
if volume < 100:
tick['tag'] = 'odd_lot'
elif check_auto_match(tick):
tick['tag'] = 'auto_match'
else:
tick['tag'] = 'normal'
print(tick['time'], tick['price'], tick['volume'], tick['tag'])
การคัดแยกการซื้อขายเหล่านี้จะช่วยให้คุณเห็นความเคลื่อนไหวที่แท้จริงของตลาด
ชุมชนแห่งการเรียนรู้เพิ่มเติม: https://t.me/GyaanSetuAi