# 事件合約擺盤推送

on_recv_rsp(self, rsp_pb)

  • 介紹

    事件合約擺盤推送回調,異步處理已訂閱事件合約的實時擺盤數據。 在訂閱了 SubType.ORDER_BOOK 類型的事件合約後,服務端會主動推送擺盤數據,收到推送後會回調到該函數,您需要在派生類中覆蓋 on_recv_rsp。

  • 參數

    參數 類型 說明
    rsp_pb Qot_UpdateEventContractOrderBook_pb2.Response 派生類中不需要直接處理該參數
  • 返回

    參數 類型 說明
    ret RET_CODE 介面調用結果
    data list 當 ret == RET_OK,返回擺盤數據(每只合約一個 dict)
    str 當 ret != RET_OK,返回錯誤描述
    • 擺盤數據格式如下(每個 dict 含以下欄位):
      欄位 類型 說明
      code str 事件合約代碼
      yes_bids list[tuple] YES 買盤 [(price, size), ...]
      yes_asks list[tuple] YES 賣盤 [(price, size), ...]
      no_bids list[tuple] NO 買盤 [(price, size), ...]
      no_asks list[tuple] NO 賣盤 [(price, size), ...]
  • Example

import time
from moomoo import *

class EventContractOrderBookHandler(EventContractOrderBookHandlerBase):
    def on_recv_rsp(self, rsp_pb):
        ret_code, content = super(EventContractOrderBookHandler, self).on_recv_rsp(rsp_pb)
        if ret_code != RET_OK:
            print("EventContractOrderBook error:", content)
            return RET_ERROR, content
        for ob in content:
            print("收到擺盤推送:", ob['code'])
            print("  YES 買盤:", ob['yes_bids'])
            print("  YES 賣盤:", ob['yes_asks'])
            print("  NO 買盤:", ob['no_bids'])
            print("  NO 賣盤:", ob['no_asks'])
        return RET_OK, content

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.set_handler(EventContractOrderBookHandler())  # 註冊事件合約擺盤推送回調
ret, data = quote_ctx.subscribe_event_contract(
    code_list=['EC.KXODIMATCH-26JUL140600INDENG-IND'],
    subtype_list=[SubType.ORDER_BOOK])  # 訂閱事件合約擺盤類型,OpenD 開始持續收到服務器的推送
if ret == RET_OK:
    print(data)
else:
    print('error:', data)
time.sleep(15)  # 設置腳本接收 OpenD 的推送持續時間為15秒
quote_ctx.close()   # 關閉當條連接,OpenD 會在1分鐘後自動取消相應合約相應類型的訂閱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  • Output
收到擺盤推送: EC.KXODIMATCH-26JUL140600INDENG-IND
  YES 買盤: [(0.5, 1030.0), (0.48, 0.01), (0.45, 5.0), (0.43, 1.0), (0.42, 175.0)]
  YES 賣盤: [(0.51, 2633.6), (0.52, 15500.0), (0.53, 3000.0), (0.54, 1000.0), (0.55, 2124.0)]
  NO 買盤: [(0.49, 2633.6), (0.48, 15500.0), (0.47, 3000.0), (0.46, 1000.0), (0.45, 2124.0)]
  NO 賣盤: [(0.5, 1030.0), (0.52, 0.01), (0.55, 5.0), (0.57, 1.0), (0.58, 175.0)]
1
2
3
4
5