# 基础功能
# 设置接口信息
set_client_info(client_id, client_ver)
介绍
设置调用接口信息, 非必调接口
参数
- client_id: client 的标识
- client_ver: client 的版本号
- Example
from futu import *
SysConfig.set_client_info("MyFutuAPI", 0)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close()
1
2
3
4
2
3
4
# 设置协议格式
set_proto_fmt(proto_fmt)
介绍
设置通讯协议 body 格式, 目前支持 Protobuf|Json 两种格式,默认 ProtoBuf, 非必调接口
参数
- proto_fmt: 协议格式,参见ProtoFMT
from futu import *
SysConfig.set_proto_fmt(ProtoFMT.Protobuf)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close()
1
2
3
4
2
3
4
- Example
# 对所有连接设置协议加密
enable_proto_encrypt(is_encrypt)
介绍
对所有连接的请求和返回内容加密。如需了解协议加密流程,详见 这里。
参数
参数 类型 说明 is_encrypt bool 是否启用加密
- Example
from futu import * SysConfig.enable_proto_encrypt(is_encrypt = True) SysConfig.set_init_rsa_file("conn_key.txt") # rsa 私钥文件路径 quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111) quote_ctx.close()
1
2
3
4
5
# 设置私钥路径
set_init_rsa_file(file)
介绍
设置 RSA 私钥文件路径。如需了解协议加密流程,详见 这里。
参数
参数 类型 说明 file str 私钥文件路径 Example
from futu import *
SysConfig.enable_proto_encrypt(is_encrypt = True)
SysConfig.set_init_rsa_file("conn_key.txt") # rsa 私钥文件路径
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close()
1
2
3
4
5
2
3
4
5
# 设置线程模式
set_all_thread_daemon(all_daemon)
介绍
是否设置所有内部创建的线程为 daemon 线程。
- 若设置为 daemon 线程:主线程退出后,则进程也退出。
例如:使用实时回调接口时,需要自己保证主线程存活,否则主线程退出后,进程也退出,您将不会再接收到推送数据。 - 若设置为非 daemon 线程:主线程退出后,进程不会退出。
例如:在创建行情或交易对象后,若不调用 close() 关闭连接,即使主线程退出,进程不会退出。
- 若设置为 daemon 线程:主线程退出后,则进程也退出。
参数
参数 类型 说明 all_daemon bool 是否设置为 daemon 线程 Example
from futu import *
SysConfig.set_all_thread_daemon(True)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
# 不调用 quote_ctx.close(),进程也会退出
1
2
3
4
2
3
4
# 设置回调
set_handler(handler)
介绍
设置异步回调处理对象
参数
- handler: 回调处理对象
类 说明 SysNotifyHandlerBase OpenD 通知处理基类 StockQuoteHandlerBase 报价处理基类 OrderBookHandlerBase 摆盘处理基类 CurKlineHandlerBase 实时 K 线处理基类 TickerHandlerBase 逐笔处理基类 RTDataHandlerBase 分时数据处理基类 BrokerHandlerBase 经济队列处理基类 PriceReminderHandlerBase 到价提醒处理基类 TradeOrderHandlerBase 订单处理基类 TradeDealHandlerBase 成交处理基类
- handler: 回调处理对象
- Example
import time
from futu import *
class OrderBookTest(OrderBookHandlerBase):
def on_recv_rsp(self, rsp_str):
ret_code, data = super(OrderBookTest,self).on_recv_rsp(rsp_str)
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(['HK.00700'], [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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取连接 ID
get_sync_conn_id()
介绍
获取连接 ID,连接初始化成功后才会有值
返回
- conn_id: 连接 ID
- Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.get_sync_conn_id()
quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽
1
2
3
4
2
3
4
# 事件通知回调
SysNotifyHandlerBase
介绍
通知 OpenD 一些重要消息,类似连接断开等
协议 ID
1003
返回
参数 类型 说明 ret RET_CODE 接口调用结果 data tuple 当 ret == RET_OK 时,返回 事件通知数据 str 当 ret != RET_OK,返回错误描述 事件通知数据 的格式如下:
参数 类型 说明 notify_type SysNotifyType 通知类型 sub_type ProgramStatusType 子类型。当 notify_type == SysNotifyType.PROGRAM_STATUS 时,sub_type 返回程序状态类型 GtwEventType 子类型。当 notify_type == SysNotifyType.GTW_EVENT 时,sub_type 返回 OpenD 事件通知类型 0 当 notify_type != SysNotifyType.PROGRAM_STATUS 且 notify_type != SysNotifyType.GTW_EVENT 时,sub_type 返回 0 msg dict 事件信息。当 notify_type == SysNotifyType.CONN_STATUS 时,msg 返回 连接状态事件信息 字典 事件信息。当 notify_type == SysNotifyType.QOT_RIGHT 时,msg 返回 行情权限事件信息 字典 - 连接状态事件信息 字典结构如下(连接状态类型为 bool,True 表示连接正常,False 表示连接断开):
{ 'qot_logined': bool1, 'trd_logined': bool2, }
1
2
3
4 - 行情权限事件信息 字典结构如下(点击了解 行情权限):
{ 'hk_qot_right': value1, 'hk_option_qot_right': value2, 'hk_future_qot_right': value3, 'us_qot_right': value4, 'us_option_qot_right': value5, 'us_future_qot_right': value6, // 已废弃 'cn_qot_right': value7, 'us_index_qot_right': value8, 'us_otc_qot_right': value9, 'sg_future_qot_right': value10, 'jp_future_qot_right': value11, 'us_future_qot_right_cme': value12, 'us_future_qot_right_cbot': value13, 'us_future_qot_right_nymex': value14, 'us_future_qot_right_comex': value15, 'us_future_qot_right_cboe': value16, }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 连接状态事件信息 字典结构如下(连接状态类型为 bool,True 表示连接正常,False 表示连接断开):
- Example
import time
from futu import *
class SysNotifyTest(SysNotifyHandlerBase):
def on_recv_rsp(self, rsp_str):
ret_code, data = super(SysNotifyTest, self).on_recv_rsp(rsp_str)
notify_type, sub_type, msg = data
if ret_code != RET_OK:
logger.debug("SysNotifyTest: error, msg: {}".format(msg))
return RET_ERROR, data
if notify_type == SysNotifyType.GTW_EVENT: # OpenD 事件通知
print("GTW_EVENT, type: {} msg: {}".format(sub_type, msg))
elif notify_type == SysNotifyType.PROGRAM_STATUS: # 程序状态变化通知
print("PROGRAM_STATUS, type: {} msg: {}".format(sub_type, msg))
elif notify_type == SysNotifyType.CONN_STATUS: ## 连接状态变化通知
print("CONN_STATUS, qot: {}".format(msg['qot_logined']))
print("CONN_STATUS, trd: {}".format(msg['trd_logined']))
elif notify_type == SysNotifyType.QOT_RIGHT: # 行情权限变化通知
print("QOT_RIGHT, hk: {}".format(msg['hk_qot_right']))
print("QOT_RIGHT, hk_option: {}".format(msg['hk_option_qot_right']))
print("QOT_RIGHT, hk_future: {}".format(msg['hk_future_qot_right']))
print("QOT_RIGHT, us: {}".format(msg['us_qot_right']))
print("QOT_RIGHT, us_option: {}".format(msg['us_option_qot_right']))
print("QOT_RIGHT, cn: {}".format(msg['cn_qot_right']))
print("QOT_RIGHT, us_index: {}".format(msg['us_index_qot_right']))
print("QOT_RIGHT, us_otc: {}".format(msg['us_otc_qot_right']))
print("QOT_RIGHT, sg_future: {}".format(msg['sg_future_qot_right']))
print("QOT_RIGHT, jp_future: {}".format(msg['jp_future_qot_right']))
print("QOT_RIGHT, us_future_cme: {}".format(msg['us_future_qot_right_cme']))
print("QOT_RIGHT, us_future_cbot: {}".format(msg['us_future_qot_right_cbot']))
print("QOT_RIGHT, us_future_nymex: {}".format(msg['us_future_qot_right_nymex']))
print("QOT_RIGHT, us_future_comex: {}".format(msg['us_future_qot_right_comex']))
print("QOT_RIGHT, us_future_cboe: {}".format(msg['us_future_qot_right_cboe']))
return RET_OK, data
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = SysNotifyTest()
quote_ctx.set_handler(handler) # 设置回调
time.sleep(15) # 设置脚本接收 OpenD 的推送持续时间为15秒
quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽`
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42