交易API¶
一分钟上手¶
如下范例,创建api交易对象,先调用unlock_trade对交易解锁,然后调用place_order下单,以700.0价格,买100股腾讯00700,最后关闭对象。
注意交易对象区分港股美股。
from futu import *
pwd_unlock = '123456'
trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111)
print(trd_ctx.unlock_trade(pwd_unlock))
print(trd_ctx.place_order(price=700.0, qty=100, code="HK.00700", trd_side=TrdSide.BUY))
trd_ctx.close()
接口类对象¶
OpenHKTradeContext、OpenUSTradeContext、OpenHKCCTradeContext(A股通)、OpenCNTradeContext - 交易接口类¶
__init__¶
-
__init__
(host='127.0.0.1', port=11111, is_encrypt=None)¶ 构造函数
Parameters: - host – str FutuOpenD监听的IP地址
- port – int FutuOpenD监听的IP端口
- is_encrypt – bool 是否启用加密。默认为None,表示使用 SysConfig.enable_proto_encrypt 的设置。
from futu import *
quote_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111, is_encrypt=False)
quote_ctx.close()
close¶
-
close
()
关闭上下文对象。默认情况下,futu-api内部创建的线程会阻止进程退出,只有当所有context都close后,进程才能正常退出。但通过SysConfig.set_all_thread_daemon可以设置所有内部线程为daemon线程,这时即使没有调用context的close,进程也可以正常退出。
from futu import *
quote_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111)
quote_ctx.close()
get_acc_list - 获取交易业务账户列表¶
-
get_acc_list
(self)¶ 获取交易业务账户列表。要调用交易接口前,必须先获取此列表,后续交易接口根据不同市场传入不同的交易业务账户ID,传0默认第一个账户
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下: 参数 类型 说明 acc_id int 交易业务账户 trd_env str 交易环境, TrdEnv TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境) acc_type str 账户类型,见 TrdAccType card_num str 卡号,同客户端内的展示 Example: from futu import * trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.get_acc_list()) trd_ctx.close()
unlock_trade - 解锁交易¶
-
unlock_trade
(self, password, password_md5=None, is_unlock=True)¶ 解锁交易。
Parameters: - password – str,交易密码,如果password_md5不为空就使用传入的password_md5解锁,否则使用password转MD5得到password_md5再解锁
- password_md5 – str,交易密码的32位MD5加密16进制字符串(全小写),解锁交易必须要填密码,锁定交易忽略
- is_unlock – bool,解锁或锁定,True解锁,False锁定
Return(ret_code, ret_data): ret == RET_OK时, data为None,如果之前已经解锁过了,data为提示字符串,指示出已经解锁
ret != RET_OK时, data为错误字符串
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) trd_ctx.close()
accinfo_query - 获取账户资金数据¶
-
accinfo_query
(self, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cache=False)¶ 获取账户资金数据。获取账户的资产净值、证券市值、现金、购买力等资金数据。
Parameters: Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下:
参数 类型 说明 power float 购买力,即可使用用于买入的资金 total_assets float 资产净值 cash float 现金 market_val float 证券市值 frozen_cash float 冻结金额 avl_withdrawal_cash float 可提金额 Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) trd_ctx.unlock_trade(pwd_unlock) print(trd_ctx.accinfo_query()) trd_ctx.close()
position_list_query - 获取账户持仓列表¶
-
position_list_query
(self, code='', pl_ratio_min=None, pl_ratio_max=None, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cache=False)¶ 获取账户持仓列表。获取账户的证券持仓列表。
Parameters: - code – str,代码过滤,只返回包含这个代码的数据,没传不过滤,返回所有
- pl_ratio_min – float,过滤盈亏比例下限,高于此比例的会返回,如0.1,返回盈亏比例大于10%的持仓
- pl_ratio_max – float,过滤盈亏比例上限,低于此比例的会返回,如0.2,返回盈亏比例小于20%的持仓
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
- refresh_cache – bool, True表示立即向server重新请求数据,而不是使用OpenD的缓存,此时会受到频率限制 FreqLimit。默认False。特殊情况导致缓存没有及时更新才需要刷新。
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下:
参数 类型 说明 position_side str 持仓方向,PositionSide.LONG(多仓)或PositionSide.SHORT(空仓) code str 代码 stock_name str 名称 qty float 持有数量,2位精度,期权单位是”张”,下同 can_sell_qty float 可卖数量 nominal_price float 市价,3位精度(A股2位) cost_price float 成本价,无精度限制 cost_price_valid bool 成本价是否有效,True有效,False无效 market_val float 市值,3位精度(A股2位) pl_ratio float 盈亏比例,无精度限制(该字段为百分比字段,默认不展示%) pl_ratio_valid bool 盈亏比例是否有效,True有效,False无效 pl_val float 盈亏金额,3位精度(A股2位) pl_val_valid bool 盈亏金额是否有效,True有效,False无效 today_pl_val float 今日盈亏金额,3位精度(A股2位),下同 today_buy_qty float 今日买入总量 today_buy_val float 今日买入总额 today_sell_qty float 今日卖出总量 today_sell_val float 今日卖出总额 Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) trd_ctx.unlock_trade(pwd_unlock) print(trd_ctx.position_list_query()) trd_ctx.close()
place_order - 下单¶
-
place_order
(self, price, qty, code, trd_side, order_type=OrderType.NORMAL, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, remark=None)¶ 下单交易。
注意,由于python api是同步的,但网络收发是异步的,当place_order对应的应答数据包与订单成交推送(TradeDealHandlerBase)或订单状态变化推送(TradeOrderHandlerBase)间隔很短时,就可能出现虽然是place_order的数据包先返回,但推送的回调会先被调用的情况。例如可能先调用了TradeOrderHandlerBase,然后place_order这个接口才返回。
Parameters: - price – float,订单价格,3位精度(A股2位),当订单是市价单或竞价单类型,忽略该参数传值
- qty – float,订单数量,2位精度,期权单位是”张”
- code – str,代码
- trd_side – str,交易方向,参考 TrdSide 类的定义
- order_type – str,订单类型,参考 OrderType 类的定义
- adjust_limit – folat,港股有价位表,订单价格必须在规定的价位上,OpenD会对传入价格自动调整到合法价位上,此参数指定价格调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1%
- trd_env – str,交易环境 TrdEnv , TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
- remark – str,备注,转成utf8后的长度不能超过64字节。后面订单数据都会带上这个备注。用户自己使用,OpenD不做处理,仅作为订单数据存储。
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟下面的 order_list_query (获取订单列表)相同。
如果是OpenHKCCTradeContext,返回数据中order_type仅有OrderType.NORMAL
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) print(trd_ctx.place_order(price=700.0, qty=100, code="HK.00700", trd_side=TrdSide.SELL)) trd_ctx.close()
Note
- 接口限制请参见 下单限制
order_list_query - 获取订单列表¶
-
order_list_query
(self, order_id="", status_filter_list=[], code='', start='', end='', trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cache=False)¶ 获取订单列表。获取账户的交易订单列表。
Parameters: - order_id – str,订单号过滤,只返回此订单号的数据,没传不过滤,返回所有
- status_filter_list – str数组,订单状态过滤,只返回这些状态的订单数据,没传不过滤,返回所有,参考 OrderStatus 类的定义
- code – str,代码过滤,只返回包含这个代码的数据,没传不过滤,返回所有
- start – str,开始时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- end – str,结束时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
- refresh_cache – bool, True表示立即向server重新请求数据,而不是使用OpenD的缓存,此时会受到频率限制 FreqLimit。默认False。特殊情况导致缓存没有及时更新才需要刷新。
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下:
参数 类型 说明 trd_side str 交易方向,参考 TrdSide 类的定义 order_type str 订单类型,参考 OrderType 类的定义。OpenHKCCTradeContext仅返回NORMAL order_status str 订单状态,参考 OrderStatus 类的定义。OpenHKCCTradeContext没有DISABLED order_id str 订单号 code str 代码 stock_name str 名称 qty float 订单数量,2位精度,期权单位是”张” price float 订单价格,3位精度(A股2位) create_time str 创建时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传 updated_time str 最后更新时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传 dealt_qty float 成交数量,2位精度,期权单位是”张” dealt_avg_price float 成交均价,无精度限制 last_err_msg str 最后的错误描述,如果有错误,会有此描述最后一次错误的原因,无错误为空 remark str 备注,详见 place_order 的说明。 Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) print(trd_ctx.order_list_query()) trd_ctx.close()
modify_order - 修改订单¶
-
modify_order
(self, modify_order_op, order_id, qty, price, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 修改订单。修改订单,包括修改订单的价格和数量(即以前的改单)、撤单、失效、生效、删除等。
如果是OpenHKCCTradeContext,将不支持改单。可撤单。删除订单是本地操作。
Parameters: - modify_order_op – str,改单操作类型,参考 ModifyOrderOp 类的定义,有
- order_id – str,订单号
- qty – float,(改单有效)新的订单数量,2位精度,期权单位是”张”
- price – float,(改单有效)新的订单价格,3位精度(A股2位)
- adjust_limit – folat,(改单有效)港股有价位表,订单价格必须在规定的价位上,OpenD会对传入价格自动调整到合法价位上,此参数指定价格调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1%
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下:
参数 类型 说明 trd_env str 交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境) order_id str str,订单号 Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.modify_order(ModifyOrderOp.CANCEL, order_id, 0, 0)) trd_ctx.close()
Note
- 接口限制请参见 改单限制
cancel_all_order - 撤消全部订单¶
-
cancel_all_order
(self, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 撤消全部订单。
Parameters: - trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境),仿真环境不支持该协议。
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
Return(ret_code, ret_data): ret_code为RET_OK时,表示发送请求成功,具体撤单回调消息参考 TradeOrderHandlerBase
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) print(trd_ctx.cancel_all_order()) trd_ctx.close()
Note
- 接口限制请参见 改单限制
- 模拟交易以及A股通暂不支持全部撤单
change_order - 改单(老接口,兼容以前)¶
-
change_order
(self, order_id, price, qty, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 改单(老接口,兼容以前)。改单,即修改订单的价格和数量,是modify_order修改订单的一种操作,为兼容以前,保留此接口,新写代码请使用modify_order。
Parameters: - order_id – str,订单号
- qty – float,(改单有效)新的订单数量,2位精度,期权单位是”张”
- price – float,(改单有效)新的订单价格,3位精度(A股2位)
- adjust_limit – folat,(改单有效)港股有价位表,订单价格必须在规定的价位上,OpenD会对传入价格自动调整到合法价位上,此参数指定价格调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1%
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,传0默认第一个账户
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟下面的modify_order(修改订单)相同。
如果是OpenHKCCTradeContext,将直接返回(RET_ERROR, msg)
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.change_order(order_id, 100.0, 1)) trd_ctx.close()
Note
- 接口限制请参见 改单限制
deal_list_query - 获取成交列表¶
-
deal_list_query
(self, code="", trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cache=False)¶ 获取成交列表。获取账户的交易成交列表。
Parameters: - code – str,代码过滤,只返回包含这个代码的数据,没传不过滤,返回所有
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
- refresh_cache – bool, True表示立即向server重新请求数据,而不是使用OpenD的缓存,此时会受到频率限制 FreqLimit。默认False。特殊情况导致缓存没有及时更新才需要刷新。
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据如下:
参数 类型 说明 trd_side str 交易方向,参考 TrdSide 类的定义 deal_id str 成交号 order_id str 订单号 code str 代码 stock_name str 名称 qty float 成交数量,2位精度,期权单位是”张” price float 成交价格,3位精度(A股2位) create_time str 创建时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传 counter_broker_id int 对手经纪号,港股有效。OpenHKCCTradeContext无此字段 counter_broker_name str 对手经纪名称,港股有效。OpenHKCCTradeContext无此字段 status str 成交状态,见 DealStatus Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.deal_list_query(code='HK.00700')) trd_ctx.close()
history_order_list_query - 获取历史订单列表¶
-
history_order_list_query
(self, status_filter_list=[], code='', start='', end='', trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 获取历史订单列表。获取账户的历史交易订单列表。
Parameters: - status_filter_list – str数组,订单状态过滤,只返回这些状态的订单数据,没传不过滤,返回所有,参考 OrderStatus 类的定义
- code – str,代码过滤,只返回包含这个代码的数据,没传不过滤,返回所有
- start – str,开始时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- end – str,结束时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟上面的 order_list_query (获取订单列表)相同
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.history_order_list_query([OrderStatus.FILLED_ALL, OrderStatus.FILLED_PART], 'HK.00700')) trd_ctx.close()
Note
- 接口限制请参见 获取历史订单列表限制
history_deal_list_query - 获取历史成交列表¶
-
history_deal_list_query
(self, code='', start='', end='', trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 获取历史成交列表。获取账户的历史交易成交列表。
Parameters: - code – str,代码过滤,只返回包含这个代码的数据,没传不过滤,返回所有
- start – str,开始时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- end – str,结束时间,严格按YYYY-MM-DD HH:MM:SS或YYYY-MM-DD HH:MM:SS.MS格式传
- trd_env – str,交易环境 TrdEnv ,TrdEnv.REAL(真实环境)或TrdEnv.SIMULATE(仿真环境)
- acc_id – int,交易业务账户ID,acc_id为ID号时以acc_id为准,传0使用acc_index所对应的账户
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟上面的 deal_list_query (获取成交列表)相同
Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.history_deal_list_query('HK.00700')) trd_ctx.close()
Note
- 接口限制请参见 获取历史成交列表限制
acctradinginfo_query - 查询账户下最大可买卖数量¶
-
acctradinginfo_query
(self, order_type, code, price, order_id=None, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0)¶ 查询账户下最大可买卖数量
Parameters: - order_type – 订单类型,参见 OrderType
- code – 证券代码,例如’HK.00700’
- price – 报价,3位精度
- order_id – 订单号。如果是新下单,则可以传None。如果是改单则要传单号,此时计算最大可买可卖时会包括该订单所消耗的购买力,新下订单需要等待半秒才可使用该接口。
- adjust_limit – 调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1%。默认0表示不调整
- trd_env – 交易环境,参见 TrdEnv
- acc_id – 业务账号,默认0表示第1个
- acc_index – int,交易业务子账户ID列表所对应的下标,默认0,表示第1个业务ID
Return (ret_code, ret_data): ret == RET_OK, data为pd.DataFrame,数据列如下
ret != RET_OK, data为错误信息
参数 类型 说明 max_cash_buy float 不使用融资,仅自己的现金最大可买整手股数 max_cash_and_margin_buy float 使用融资,自己的现金 + 融资资金总共的最大可买整手股数 max_position_sell float 不使用融券(卖空),仅自己的持仓最大可卖整手股数 max_sell_short float 使用融券(卖空),最大可卖空整手股数,不包括多仓 max_buy_back float 卖空后,需要买回的最大整手股数。因为卖空后,必须先买回已卖空的股数,还掉股票,才能再继续买多。 Example: from futu import * pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) print(trd_ctx.unlock_trade(pwd_unlock)) order_id = "12345" print(trd_ctx.acctradinginfo_query(OrderType.NORMAL, 'HK.00700', 400, order_id, 0.01)) trd_ctx.close()
Note
- 接口限制请参见 获取最大交易数量限制
TradeOrderHandlerBase - 响应订单推送基类¶
on_recv_rsp - 响应订单推送¶
-
on_recv_rsp
(self, rsp_pb)¶ 响应订单推送。OpenD会主动推送订单的最新更新数据过来,需要客户端响应处理。
该类与place_order返回的顺序参见 place_order 的说明。
Parameters: rsp_pb – class,订单推送协议pb对象 Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟上面的 order_list_query (获取订单列表)相同 Example: from futu import * from time import sleep class TradeOrderTest(TradeOrderHandlerBase): """ order update push""" def on_recv_rsp(self, rsp_pb): ret, content = super(TradeOrderTest, self).on_recv_rsp(rsp_pb) if ret == RET_OK: print("* TradeOrderTest content={}\n".format(content)) return ret, content pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) trd_ctx.set_handler(TradeOrderTest()) print(trd_ctx.unlock_trade(pwd_unlock)) print(trd_ctx.place_order(price=700.0, qty=100, code="HK.00700", trd_side=TrdSide.SELL)) sleep(15) trd_ctx.close()
TradeDealHandlerBase - 响应成交推送基类¶
on_recv_rsp - 响应成交推送¶
-
on_recv_rsp
(self, rsp_pb) 响应成交推送。OpenD会主动推送新的成交数据过来,需要客户端响应处理
该类与place_order返回的顺序参见 place_order 的说明。
Parameters: rsp_pb – class,成交推送协议pb对象 Return(ret_code, ret_data): ret_code为RET_OK时,ret_data为DataFrame数据,否则为错误原因字符串,DataFrame数据跟上面的 deal_list_query (获取成交列表)相同 Example: from futu import * from time import sleep class TradeDealTest(TradeDealHandlerBase): """ order update push""" def on_recv_rsp(self, rsp_pb): ret, content = super(TradeDealTest, self).on_recv_rsp(rsp_pb) if ret == RET_OK: print("TradeDealTest content={}".format(content)) return ret, content pwd_unlock = '123456' trd_ctx = OpenHKTradeContext(host='127.0.0.1', port=11111) trd_ctx.set_handler(TradeDealTest()) print(trd_ctx.unlock_trade(pwd_unlock)) print(trd_ctx.place_order(price=700.0, qty=100, code="HK.00700", trd_side=TrdSide.SELL)) sleep(15) trd_ctx.close()