# 取消訂閲

# 訂閲

subscribe(code_list, subtype_list, is_first_push=True, subscribe_push=True, is_detailed_orderbook=False, extended_time=False, session=Session.NONE)

  • 介紹

    訂閲註冊需要的實時資訊,指定股票和訂閲的數據類型即可。

  • 參數

    參數 類型 説明
    code_list list 需要訂閲的股票代碼列表
    subtype_list list 需要訂閲的數據類型列表
    is_first_push bool 訂閲成功之後是否立即推送一次快取數據
    subscribe_push bool 訂閲後是否推送
    is_detailed_orderbook bool 是否訂閲詳細的擺盤訂單明細
    extended_time bool 是否允許美股盤前盤後數據
    session Session 美股訂閲時段
  • 返回

    參數 類型 説明
    ret RET_CODE 介面呼叫結果
    err_message NoneType 當 ret == RET_OK 時,返回 None
    str 當 ret != RET_OK 時,返回錯誤描述
  • Example

import time
from moomoo import *
class OrderBookTest(OrderBookHandlerBase):
    def on_recv_rsp(self, rsp_pb):
        ret_code, data = super(OrderBookTest,self).on_recv_rsp(rsp_pb)
        if ret_code != RET_OK:
            print("OrderBookTest: error, msg: %s" % data)
            return RET_ERROR, data
        print("OrderBookTest ", data) # OrderBookTest 自己的處理邏輯
        return RET_OK, data
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = OrderBookTest()
quote_ctx.set_handler(handler)  # 設定實時擺盤迴調
quote_ctx.subscribe(['US.AAPL'], [SubType.ORDER_BOOK])  # 訂閲買賣擺盤類型,OpenD 開始持續收到伺服器的推送
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
  • Output
OrderBookTest  {'code': 'US.AAPL', 'name': '蘋果', 'svr_recv_time_bid': '2025-04-07 05:00:52.266', 'svr_recv_time_ask': '2025-04-07 05:00:53.973', 'Bid': [(180.2, 15, 3, {}), (180.19, 1, 1, {}), (180.18, 11, 2, {}), (180.14, 200, 1, {}), (180.13, 3, 2, {}), (180.1, 99, 3, {}), (180.05, 3, 1, {}), (180.03, 400, 1, {}), (180.02, 10, 1, {}), (180.01, 100, 1, {}), (180.0, 441, 24, {})], 'Ask': [(180.3, 100, 1, {}), (180.38, 4, 2, {}), (180.4, 100, 1, {}), (180.42, 200, 1, {}), (180.46, 29, 1, {}), (180.5, 1019, 2, {}), (180.6, 1000, 1, {}), (180.8, 2001, 3, {}), (180.84, 15, 2, {}), (181.0, 2036, 4, {}), (181.2, 2000, 2, {}), (181.3, 3, 1, {}), (181.4, 2021, 3, {}), (181.5, 59, 2, {}), (181.79, 9, 1, {}), (181.8, 20, 1, {}), (181.9, 94, 4, {}), (181.98, 20, 1, {}), (182.0, 150, 7, {})]}
1

# 取消訂閲

unsubscribe(code_list, subtype_list, unsubscribe_all=False)

  • 介紹

    取消訂閲

  • 參數

    參數 類型 説明
    code_list list 取消訂閲的股票代碼列表
    subtype_list list 需要訂閲的數據類型列表
    unsubscribe_all bool 取消所有訂閲
  • Return

    參數 類型 説明
    ret RET_CODE 介面呼叫結果
    err_message NoneType 當 ret == RET_OK, 返回 None
    str 當 ret != RET_OK, 返回錯誤描述
  • Example

from moomoo import *
import time
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)

print('current subscription status :', quote_ctx.query_subscription())  # 查詢初始訂閲狀態
ret_sub, err_message = quote_ctx.subscribe(['US.AAPL'], [SubType.QUOTE, SubType.TICKER], subscribe_push=False, session=Session.None)
# 先訂閲了AAPL全時段 QUOTE 和 TICKER 兩個類型。訂閲成功後 OpenD 將持續收到伺服器的推送,False 代表暫時不需要推送給腳本
if ret_sub == RET_OK:   # 訂閲成功
    print('subscribe successfully!current subscription status :', quote_ctx.query_subscription())  # 訂閲成功後查詢訂閲狀態
    time.sleep(60)  # 訂閲之後至少1分鐘才能取消訂閲
    ret_unsub, err_message_unsub = quote_ctx.unsubscribe(['US.AAPL'], [SubType.QUOTE])
    if ret_unsub == RET_OK:
        print('unsubscribe successfully!current subscription status:', quote_ctx.query_subscription())  # 取消訂閲後查詢訂閲狀態
    else:
        print('unsubscription failed!', err_message_unsub)
else:
    print('subscription failed', err_message)
quote_ctx.close() # 結束後記得關閉當條連線,防止連線條數用盡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • Output
current subscription status : (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
subscribe successfully!current subscription status : (0, {'total_used': 2, 'remain': 998, 'own_used': 2, 'sub_list': {'QUOTE': ['US.AAPL'], 'TICKER': ['US.AAPL']}})
unsubscribe successfully!current subscription status: (0, {'total_used': 1, 'remain': 999, 'own_used': 1, 'sub_list': {'TICKER': ['US.AAPL']}})
1
2
3

# 取消所有訂閲

unsubscribe_all()

  • 介紹

取消所有訂閲

  • 返回

    參數 類型 説明
    ret RET_CODE 介面呼叫結果
    err_message NoneType 當 ret == RET_OK, 返回 None
    str 當 ret != RET_OK, 返回錯誤描述
  • Example

from moomoo import *
import time
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)

print('current subscription status :', quote_ctx.query_subscription())  # 查詢初始訂閲狀態
ret_sub, err_message = quote_ctx.subscribe(['US.AAPL'], [SubType.QUOTE, SubType.TICKER], subscribe_push=False, session=Session.None)
# 先訂閲了AAPL全時段 QUOTE 和 TICKER 兩個類型。訂閲成功後 OpenD 將持續收到伺服器的推送,False 代表暫時不需要推送給腳本
if ret_sub == RET_OK:  # 訂閲成功
    print('subscribe successfully!current subscription status :', quote_ctx.query_subscription())  # 訂閲成功後查詢訂閲狀態
    time.sleep(60)  # 訂閲之後至少1分鐘才能取消訂閲
    ret_unsub, err_message_unsub = quote_ctx.unsubscribe_all()  # 取消所有訂閲
    if ret_unsub == RET_OK:
        print('unsubscribe all successfully!current subscription status:', quote_ctx.query_subscription())  # 取消訂閲後查詢訂閲狀態
    else:
        print('Failed to cancel all subscriptions!', err_message_unsub)
else:
    print('subscription failed', err_message)
quote_ctx.close()  # 結束後記得關閉當條連線,防止連線條數用盡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • Output
current subscription status : (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
subscribe successfully!current subscription status : (0, {'total_used': 2, 'remain': 998, 'own_used': 2, 'sub_list': {'QUOTE': ['US.AAPL'], 'TICKER': ['US.AAPL']}})
unsubscribe all successfully!current subscription status: (0, {'total_used': 0, 'remain': 1000, 'own_used': 0, 'sub_list': {}})
1
2
3

介面限制

  • 支援多種實時數據類型的訂閲,參見 SubType ,每隻股票訂閲一個類型佔用一個額度。
  • 訂閲額度規則請參見 訂閲額度 & 歷史 K 線額度
  • 至少訂閲一分鐘才可以反訂閲。
  • 由於港股 SF 行情擺盤數據量較大,為保證 SF 行情的速度和 OpenD 的處理效能,目前 SF 權限用戶僅限同時訂閲 50 只證券類產品(含 hkex 的正股、窩輪、牛熊)的擺盤、經紀隊列,剩餘訂閲額度仍可用於訂閲其他類型,如:逐筆,買賣經紀等。
  • 港股期權期貨在 LV1 權限下,不支援訂閲逐筆類型。