#订阅反订阅

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

介绍

订阅注册需要的实时信息,指定股票和订阅的数据类型即可。

香港市场(含正股、窝轮、牛熊、期权、期货)订阅,需要 LV1 及以上的权限,BMP 权限下不支持订阅。

美股市场(含正股、ETFs)夜盘行情订阅,需要 LV1 及以上的权限,BMP 权限下不支持订阅。

参数

参数 类型 说明 code_list list 需要订阅的股票代码列表 list 中元素类型是 str subtype_list list 需要订阅的数据类型列表 list 中元素类型是 SubType is_first_push bool 订阅成功之后是否立即推送一次缓存数据 True:推送缓存当脚本和 OpenD 之间出现断线重连,重新订阅时若设置为 True,会再次推送断线前的最后一条数据False:不推送缓存。等待服务器的最新推送 subscribe_push bool 订阅后是否推送 订阅后,OpenD 提供了两种取数据的方式,如果您仅使用 获取实时数据 的方式,选择 False 可以节省一部分性能消耗True:推送。如果使用 实时数据回调 的方式,则必须设置为 TrueFalse:不推送。如果仅使用 获取实时数据 的方式,则建议设置为 False is_detailed_orderbook bool 是否订阅详细的摆盘订单明细 仅用于港股 SF 行情权限下订阅港股 ORDER_BOOK 类型 美股美期 LV2 权限下不提供详细摆盘订单明细 extended_time bool 是否允许美股盘前盘后数据 仅用于订阅美股实时 K 线、实时分时、实时逐笔 session Session 美股订阅时段 仅用于订阅美股实时 K 线、实时分时、实时逐笔订阅美股行情不支持入参OVERNIGHT最低OpenD版本:9.2.4207 返回

参数 类型 说明 ret RET_CODE 接口调用结果 err_message NoneType 当 ret == RET_OK 时,返回 None str 当 ret != RET_OK 时,返回错误描述 Example

import time

from futu 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分钟后自动取消相应股票相应类型的订阅

12345678910111213141516Output 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, {})]}

12# 取消订阅 unsubscribe(code_list, subtype_list, unsubscribe_all=False)

介绍

取消订阅

参数

参数 类型 说明 code_list list 取消订阅的股票代码列表 list 中元素类型是 str subtype_list list 需要订阅的数据类型列表 list 中元素类型是 SubType unsubscribe_all bool 取消所有订阅 为 True 时忽略其他参数 Return

参数 类型 说明 ret RET_CODE 接口调用结果 err_message NoneType 当 ret == RET_OK, 返回 None str 当 ret != RET_OK, 返回错误描述 Example

from futu 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.ALL)

# 先订阅了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() # 结束后记得关闭当条连接,防止连接条数用尽

123456789101112131415161718Output 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']}})

123# 取消所有订阅 unsubscribe_all()

介绍 取消所有订阅

返回

参数 类型 说明 ret RET_CODE 接口调用结果 err_message NoneType 当 ret == RET_OK, 返回 None str 当 ret != RET_OK, 返回错误描述 Example

from futu 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() # 结束后记得关闭当条连接,防止连接条数用尽

123456789101112131415161718Output 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': {}})

123

Copyright © 2088 国足世界杯出线形势_世界杯出线 - ybjysq.com All Rights Reserved.
友情链接