香港WebSocketフィードにおける取引の判別

リアルタイムの市場データは動きが速いです。香港の株式取引をストリーミングすると、さまざまな種類の約定(プリント)が表示されます。すべての取引が同じものを表しているわけではありません。投資家の注文もあれば、システムの自動マッチングや単元未満株(odd-lot)の取引もあります。

これらの取引を迅速に分類する必要があります。

問題点

標準的なデータフィールドでは、十分な判断ができないことがよくあります。取引種別(trade type)フィールドは信頼できない場合が多いのです。これを解決するには、次の3つのルールを使用してください。

  • 出来高チェック: ほとんどの香港株は100株単位で取引されます。100株未満の取引はすべて単元未満株(odd lot)です。
  • 時間的クラスタリング: 自動マッチングされた取引は、短時間に集中して発生します。ミリ秒単位で多くの約定が確認されます。単元未満株はこのパターンに従いません。
  • 取引相手のチェック: 買い手と売り手を確認します。両方がSYSのようなシステムアカウントである場合、それは自動マッチングです。

実装

このロジックをデータストリームに組み込むことができます。

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://dev.to/emily19980210/differentiating-auto-matched-and-odd-lot-trades-in-hong-kong-stock-websocket-feeds-3bgg

オプションの学習コミュニティ: https://t.me/GyaanSetuAi