行情API

一分钟上手

如下范例,创建api行情对象,调用get_market_snapshot获取港股腾讯00700的报价快照数据,最后关闭对象

from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_market_snapshot('HK.00700'))
quote_ctx.close()

接口类对象

OpenQuoteContext - 行情上下文

__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 = OpenQuoteContext(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 = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.close()

start

start()

启动异步接收推送数据

stop

stop()

停止异步接收推送数据

set_handler

set_handler(self, handler)

设置异步回调处理对象

Parameters:

handler

回调处理对象,必须是以下类的子类实例

类名 说明
SysNotifyHandlerBase OpenD通知处理基类
StockQuoteHandlerBase 报价处理基类
OrderBookHandlerBase 摆盘处理基类
CurKlineHandlerBase 实时k线处理基类
TickerHandlerBase 逐笔处理基类
RTDataHandlerBase 分时数据处理基类
BrokerHandlerBase 经济队列处理基类

Return ret:

RET_OK: 设置成功

其它: 设置失败

get_trading_days

get_trading_days(self, market, start=None, end=None)

获取交易日

Parameters:
  • market – 市场类型,Market
  • start – 起始日期。例如‘2018-01-01’。
  • end

    结束日期。例如‘2018-01-01’。 start和end的组合如下:

    start类型 end类型 说明
    str str start和end分别为指定的日期
    None str start为end往前365天
    str None end为start往后365天
    None None end为当前日期,start为end往前365天
Returns:

(ret_code, content)

成功时返回(RET_OK, content),content为字典列表,失败时返回(RET_ERROR, content),其中content是错误描述字符串

参数 类型 说明
time str 时间
trade_date_type str 标志是一天、上午半天、下午半天,参见 TradeDateType

[{'time': '2018-12-22', 'trade_date_type': 'WHOLE'},
 {'time': '2018-12-23', 'trade_date_type': 'WHOLE'},
 {'time': '2018-12-24', 'trade_date_type': 'MORNING'}]
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_trading_days(Market.HK, start='2018-01-01', end='2018-01-10'))
quote_ctx.close()

get_stock_basicinfo

get_stock_basicinfo(self, market, stock_type=SecurityType.STOCK, code_list=None)

获取指定市场中特定类型的股票基本信息

Parameters:
  • market – 市场类型 Market
  • stock_type – 股票类型,参见 SecurityType,但不支持SecurityType.DRVT
  • code_list – 如果不为None,应该是股票code的iterable类型,将只返回指定的股票信息
Returns:

(ret_code, content)

ret_code 等于RET_OK时, content为Pandas.DataFrame数据, 否则为错误原因字符串, 数据列格式如下

参数 类型 说明
code str 股票代码
name str 名字
lot_size int 每手数量
stock_type str 股票类型,参见 SecurityType
stock_child_type str 窝轮子类型,参见 WrtType
stock_owner str 涡轮所属正股的代码,或期权标的股的代码
option_type str 期权类型,查看 OptionType
strike_time str 期权行权日(港股A股默认是北京时间)
strike_price float 期权行权价
suspension bool 期权是否停牌(True表示停牌)
listing_date str 上市时间
stock_id int 股票id
delisting bool 是否退市

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_stock_basicinfo(Market.HK, SecurityType.WARRANT))
print(quote_ctx.get_stock_basicinfo(Market.US, SecurityType.STOCK, 'US.AAPL'))
quote_ctx.close()

Note

  • 当传入程序无法识别的股票时(包括很久之前退市的股票和不存在的股票),仍然返回股票信息,用静态信息标志来该股票不存在。统一处理为:code正常显示,name显示为“未知股票”,delisting显示为“true”,其他字段均为默认值(整型默认是0,字符串默认是空字符串)。
  • 跟其他的行情接口不同,其他接口遇到程序无法识别的股票时,会拒绝请求并返回错误描述“未知股票”。

get_multiple_history_kline

get_multiple_history_kline(self, codelist, start=None, end=None, ktype=KLType.K_DAY, autype=AuType.QFQ)

获取多只股票的本地历史k线数据

Parameters:
  • codelist – 股票代码列表,list或str。例如:[‘HK.00700’, ‘HK.00001’],’HK.00700,SZ.399001’
  • start – 起始时间,,例如‘2017-06-20’
  • end – 结束时间,例如‘2017-07-20’
  • ktype – k线类型,参见 KLType
  • autype – 复权类型,参见 AuType
Returns:

成功时返回(RET_OK, [data]),data是DataFrame数据, 数据列格式如下

参数 类型 说明
code str 股票代码
time_key str k线时间(港股A股默认是北京时间)
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
pe_ratio float 市盈率
turnover_rate float 换手率(该字段为百分比字段,默认不展示%)
volume int 成交量
turnover float 成交额
change_rate float 涨跌幅(该字段为百分比字段,默认不展示%)
last_close float 昨收价

失败时返回(RET_ERROR, data),其中data是错误描述字符串

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_multiple_history_kline(['HK.00700'], '2017-06-20', '2017-06-25', KLType.K_DAY, AuType.QFQ))
quote_ctx.close()

get_history_kline

get_history_kline(self, code, start=None, end=None, ktype=KLType.K_DAY, autype=AuType.QFQ, fields=[KL_FIELD.ALL])

得到本地历史k线,需先参照帮助文档下载k线

Parameters:
  • code – 股票代码
  • start – 开始时间,例如‘2017-06-20’。
  • end

    结束时间,例如‘2017-06-30’。 start和end的组合如下:

    start类型 end类型 说明
    str str start和end分别为指定的日期
    None str start为end往前365天
    str None end为start往后365天
    None None end为当前日期,start为end往前365天
  • ktype – k线类型, 参见 KLType 定义
  • autype – 复权类型, 参见 AuType 定义
  • fields – 需返回的字段列表,参见 KL_FIELD 定义 KL_FIELD.ALL KL_FIELD.OPEN ....
Returns:

(ret, data)

ret == RET_OK 返回pd Dataframe数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
time_key str k线时间(港股A股默认是北京时间)
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
pe_ratio float 市盈率
turnover_rate float 换手率(该字段为百分比字段,默认不展示%)
volume int 成交量
turnover float 成交额
change_rate float 涨跌幅(该字段为百分比字段,默认不展示%)
last_close float 昨收价

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_history_kline('HK.00700', start='2017-06-20', end='2017-06-22'))
quote_ctx.close()

request_history_kline

request_history_kline(self, code, start=None, end=None, ktype=KLType.K_DAY, autype=AuType.QFQ, fields=[KL_FIELD.ALL], max_count=1000, page_req_key=None)

获取k线,不需要事先下载k线数据。

Parameters:
  • code – 股票代码
  • start – 开始时间,例如‘2017-06-20’
  • end

    结束时间,例如‘2017-07-20’。 start和end的组合如下:

    start类型 end类型 说明
    str str start和end分别为指定的日期
    None str start为end往前365天
    str None end为start往后365天
    None None end为当前日期,start为end往前365天
  • ktype – k线类型, 参见 KLType 定义
  • autype – 复权类型, 参见 AuType 定义
  • fields – 需返回的字段列表,参见 KL_FIELD 定义 KL_FIELD.ALL KL_FIELD.OPEN ....
  • max_count – 本次请求最大返回的数据点个数,传None表示返回start和end之间所有的数据。
  • page_req_key – 分页请求的key。如果start和end之间的数据点多于max_count,那么后续请求时,要传入上次调用返回的page_req_key。初始请求时应该传None。
Returns:

(ret, data, page_req_key)

ret == RET_OK 返回pd dataframe数据,data.DataFrame数据, 数据列格式如下。page_req_key在分页请求时(即max_count>0)可能返回,并且需要在后续的请求中传入。如果没有更多数据,page_req_key返回None。

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
time_key str k线时间(港股A股默认是北京时间)
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
pe_ratio float 市盈率(该字段为比例字段,默认不展示%)
turnover_rate float 换手率
volume int 成交量
turnover float 成交额
change_rate float 涨跌幅
last_close float 昨收价

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data, page_req_key = quote_ctx.request_history_kline('HK.00700', start='2017-06-20', end='2018-06-22', max_count=50) #请求开头50个数据
print(ret, data)
ret, data, page_req_key = quote_ctx.request_history_kline('HK.00700', start='2017-06-20', end='2018-06-22', max_count=50, page_req_key=page_req_key) #请求下50个数据
print(ret, data)
quote_ctx.close()

get_autype_list

get_autype_list(self, code_list)

获取给定股票列表的复权因子

Parameters:code_list – 股票列表,例如[‘HK.00700’]
Returns:(ret, data)

ret == RET_OK 返回pd dataframe数据,data.DataFrame数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
ex_div_date str 除权除息日
split_ratio float 拆合股比例(该字段为比例字段,展示为小数表示)例如,对于5股合1股为5.0,对于1股拆5股为0.2
per_cash_div float 每股派现
per_share_div_ratio float 每股送股比例(该字段为比例字段,展示为小数表示)
per_share_trans_ratio float 每股转增股比例(该字段为比例字段,展示为小数表示)
allotment_ratio float 每股配股比例(该字段为比例字段,展示为小数表示)
allotment_price float 配股价
stk_spo_ratio float 增发比例(该字段为比例字段,展示为小数表示)
stk_spo_price float 增发价格
forward_adj_factorA float 前复权因子A
forward_adj_factorB float 前复权因子B
backward_adj_factorA float 后复权因子A
backward_adj_factorB float 后复权因子B
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_autype_list(["HK.00700"]))
quote_ctx.close()

get_market_snapshot

get_market_snapshot(self, code_list)

获取市场快照

param code_list:
 

股票列表,股票个数限制参考 OpenAPI用户等级权限

return:

(ret, data)

ret == RET_OK ,返回pd dataframe数据,data.DataFrame数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
update_time str 更新时间(yyyy-MM-dd HH:mm:ss)(港股A股默认是北京时间)
last_price float 最新价格
open_price float 今日开盘价
high_price float 最高价格
low_price float 最低价格
prev_close_price float 昨收盘价格
volume int 成交数量
turnover float 成交金额
turnover_rate float 换手率(该字段为百分比字段,默认不展示%)
suspension bool 是否停牌(True表示停牌)
listing_date str 上市日期 (yyyy-MM-dd)
equity_valid bool 是否正股(为true时以下正股相关字段才有合法数值)
issued_shares int 发行股本
total_market_val float 总市值
net_asset int 资产净值
net_profit int 净利润
earning_per_share float 每股盈利
outstanding_shares int 流通股本
net_asset_per_share float 每股净资产
circular_market_val float 流通市值
ey_ratio float 收益率(该字段为比例字段,默认不展示%)
pe_ratio float 市盈率(该字段为比例字段,默认不展示%)
pb_ratio float 市净率(该字段为比例字段,默认不展示%)
pe_ttm_ratio float 市盈率TTM(该字段为比例字段,默认不展示%)
dividend_ttm float 股息TTM,派息
dividend_ratio_ttm float 股息率TTM(该字段为百分比字段,默认不展示%)
dividend_lfy float 股息LFY,上一年度派息
dividend_lfy_ratio float 股息率LFY(该字段为百分比字段,默认不展示%)
stock_owner str 涡轮所属正股的代码或期权的标的股代码
wrt_valid bool 是否是窝轮(为true时以下涡轮相关的字段才有合法数据)
wrt_conversion_ratio float 换股比率
wrt_type str 窝轮类型,参见 WrtType
wrt_strike_price float 行使价格
wrt_maturity_date str 格式化窝轮到期时间
wrt_end_trade str 格式化窝轮最后交易时间
wrt_leverage float 杠杆比率(倍)
wrt_ipop float 价内/价外(该字段为百分比字段,默认不展示%)
wrt_break_even_point float 打和点
wrt_conversion_price float 换股价
wrt_price_recovery_ratio float 正股距收回价(该字段为百分比字段,默认不展示%)
wrt_score float 窝轮综合评分
wrt_code str 窝轮对应的正股(此字段已废除,修改为stock_owner)
wrt_recovery_price float 窝轮收回价
wrt_street_vol float 窝轮街货量
wrt_issue_vol float 窝轮发行量
wrt_street_ratio float 窝轮街货占比(该字段为百分比字段,默认不展示%)
wrt_delta float 窝轮对冲值
wrt_implied_volatility float 窝轮引伸波幅
wrt_premium float 窝轮溢价(该字段为百分比字段,默认不展示%)
wrt_upper_strike_price float 上限价,仅界内证支持该字段
wrt_lower_strike_price float 下限价,仅界内证支持该字段
wrt_inline_price_status str 界内界外, 参见 PriceType ,仅界内证支持该字段
lot_size int 每手股数
price_spread float 当前向上的摆盘价差,亦即摆盘数据的卖档的相邻档位的报价差
ask_price float 卖价
bid_price float 买价
ask_vol float 卖量
bid_vol float 买量
enable_margin bool 是否可融资,如果为true,后两个字段才有意义
mortgage_ratio float 股票抵押率(该字段为百分比字段,默认不展示%)
long_margin_initial_ratio float 融资初始保证金率(该字段为百分比字段,默认不展示%)
enable_short_sell bool 是否可卖空,如果为true,后三个字段才有意义
short_sell_rate float 卖空参考利率(该字段为百分比字段,默认不展示%)
short_available_volume int 剩余可卖空数量
short_margin_initial_ratio float 卖空(融券)初始保证金率(该字段为百分比字段,默认不展示%)
option_valid bool 是否是期权(为true时以下期权相关的字段才有合法数值)
option_type str 期权类型,参见 OptionType
strike_time str 期权行权日(港股A股默认是北京时间)
option_strike_price float 行权价
option_contract_size int 每份合约数
option_open_interest int 未平仓合约数
option_implied_volatility float 隐含波动率
option_premium float 溢价
option_delta float 希腊值 Delta
option_gamma float 希腊值 Gamma
option_vega float 希腊值 Vega
option_theta float 希腊值 Theta
option_rho float 希腊值 Rho
amplitude float 振幅(该字段为百分比字段,默认不展示%)
avg_price float 平均价
bid_ask_ratio float 委比(该字段为百分比字段,默认不展示%)
volume_ratio float 量比
highest52weeks_price float 52周最高价
lowest52weeks_price float 52周最低价
highest_history_price float 历史最高价
lowest_history_price float 历史最低价
plate_valid bool 是否为板块类型(为true时以下板块类型字段才有合法数值)
plate_raise_count int 板块类型上涨支数
plate_fall_count int 板块类型下跌支数
plate_equal_count int 板块类型平盘支数
index_valid bool 是否有指数类型(为true时以下指数类型字段才有合法数值)
index_raise_count int 指数类型上涨支数
index_fall_count int 指数类型下跌支数
index_equal_count int 指数类型平盘支数
after_volume int 盘后成交量,目前仅科创板支持该数据
after_turnover double 盘后成交额,目前仅科创板支持该数据
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_market_snapshot(['SH.600000', 'HK.00700']))
quote_ctx.close()

Note

get_rt_data

get_rt_data(self, code)

获取指定股票的分时数据

Parameters:

code – 股票代码,例如,HK.00700,US.AAPL

Return (ret, data):
 

ret == RET_OK 返回pd Dataframe数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
time str 时间(yyyy-MM-dd HH:mm:ss)(港股A股默认是北京时间)
is_blank bool 数据状态;正常数据为False,伪造数据为True
opened_mins int 零点到当前多少分钟
cur_price float 当前价格
last_close float 昨天收盘的价格
avg_price float 平均价格(对于期权,该字段为None)
volume float 成交量
turnover float 成交金额
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.subscribe(['HK.00700'], [SubType.RT_DATA])
print(quote_ctx.get_rt_data('HK.00700'))
quote_ctx.close()

get_plate_stock

get_plate_stock(self, plate_code, sort_field=SortField.CODE, ascend=True)

获取特定板块下的股票列表

Parameters:
  • plate_code – 板块代码,string,例如,“SH.BK0001”,“SH.BK0002”,先利用获取子板块列表函数获取子板块代码
  • sort_field – 排序字段,SortField,根据哪些字段排序 SortField
  • ascend – 排序方向,bool,True升序,False降序
Return (ret, data):
 

ret == RET_OK 返回pd dataframe数据,data.DataFrame数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
lot_size int 每手股数
stock_name str 股票名称
stock_type str 股票类型,参见 SecurityType
list_time str 上市时间(港股A股默认是北京时间)
stock_id int 股票id
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_plate_stock('HK.BK1001'))
quote_ctx.close()

Note

  • 该接口也可用于获取指数成份股, 如获取上证指数成份股:

  • 接口限制请参见 获取板块下的股票限制
    from futu import *
    quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
    print(quote_ctx.get_plate_stock('SH.000001'))
    quote_ctx.close()
    
  • 部分常用的板块或指数代码如下:

    代码 说明
    HK.HSI Constituent 恒指成份股
    HK.HSCEI Stock 国指成份股
    HK.Motherboard 港股主板
    HK.GEM 港股创业板
    HK.BK1910 所有港股
    HK.BK1911 主板H股
    HK.BK1912 创业板H股
    HK.Fund 港股基金
    HK.BK1600 富途热门(港)
    SH.3000000 上海主板
    SH.BK0901 上证B股
    SH.BK0902 深证B股
    SH.3000002 沪深指数
    SH.3000005 沪深全部A股
    SH.BK0600 富途热门(沪深)
    SH.BK0992 科创板
    SZ.3000001 深证主板
    SZ.3000003 中小企业板块
    SZ.3000004 深证创业板
    US.USAALL 所有美股

get_plate_list

get_plate_list(self, market, plate_class)

获取板块集合下的子板块列表

Parameters:
  • market – 市场标识,注意这里不区分沪和深,输入沪或者深都会返回沪深市场的子板块(这个是和客户端保持一致的)参见 Market
  • plate_class – 板块分类,参见 Plate
Return (ret, data):
 

ret == RET_OK 返回pd Dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
plate_name str 板块名字
plate_id str 板块id
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_plate_list(Market.HK, Plate.ALL))
quote_ctx.close()

Note

get_broker_queue

get_broker_queue(self, code)

获取股票的经纪队列

Parameters:code – 股票代码
Returns:(ret, bid_frame_table, ask_frame_table)或(ret, err_message, err_message)

ret == RET_OK,bid_frame_table,ask_frame_table 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

bid_frame_table 经纪买盘数据

参数 类型 说明
code str 股票代码
bid_broker_id int 经纪买盘id
bid_broker_name str 经纪买盘名称
bid_broker_pos int 经纪档位

ask_frame_table 经纪卖盘数据

参数 类型 说明
code str 股票代码
ask_broker_id int 经纪卖盘id
ask_broker_name str 经纪卖盘名称
ask_broker_pos int 经纪档位
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.subscribe(['HK.00700'], [SubType.BROKER])
print(quote_ctx.get_broker_queue('HK.00700'))
quote_ctx.close()

subscribe

subscribe(self, code_list, subtype_list, is_first_push=True, subscribe_push=True)

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

Parameters:
  • code_list – 需要订阅的股票代码列表
  • subtype_list – 需要订阅的数据类型列表,参见 SubType
  • is_first_push – 订阅成功之后是否马上推送一次数据
  • subscribe_push – 订阅后推送
Returns:

(ret, err_message)

ret == RET_OK err_message为None

ret != RET_OK err_message为错误描述字符串

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.subscribe(['HK.00700'], [SubType.QUOTE]))
quote_ctx.close()

Note

unsubscribe

unsubscribe(self, code_list, subtype_list, unsubscribe_all=False)

取消订阅

Parameters:
  • code_list – 取消订阅的股票代码列表
  • subtype_list – 取消订阅的类型,参见 SubType
  • unsubscribe_all – 取消所有订阅,为True时忽略其他参数,或可使用 unsubscribe_all 接口
Returns:

(ret, err_message)

ret == RET_OK err_message为None

ret != RET_OK err_message为错误描述字符串

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.unsubscribe(['HK.00700'], [SubType.QUOTE]))
quote_ctx.close()

Note

unsubscribe_all

unsubscribe_all(self)

取消所有订阅

Returns:(ret, err_message)

ret == RET_OK err_message为None

ret != RET_OK err_message为错误描述字符串

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.unsubscribe_all())
quote_ctx.close()

Note

query_subscription

query_subscription(self, is_all_conn=True)

查询已订阅的实时信息

Parameters:is_all_conn – 是否返回所有连接的订阅状态,不传或者传False只返回当前连接数据
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回 定阅信息的字典数据 ,格式如下:

{
    'total_used': 4,    # 所有连接已使用的定阅额度
    'own_used': 0,       # 当前连接已使用的定阅额度
    'remain': 496,       #  剩余的定阅额度
    'sub_list':          #  每种定阅类型对应的股票列表
    {
        'BROKER': ['HK.00700', 'HK.02318'],
        'RT_DATA': ['HK.00700', 'HK.02318']
    }
}
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.query_subscription())
quote_ctx.close()

get_global_state

get_global_state(self)

获取全局状态

Returns:(ret, data)

ret == RET_OK data为包含全局状态的字典,含义如下

ret != RET_OK data为错误描述字符串

key value类型 说明
market_sz str 深圳市场状态,参见 MarketState
market_sh str 上海市场状态,参见 MarketState
market_hk str 香港市场状态,参见 MarketState
market_hkfuture str 香港期货市场状态,参见 MarketState
market_us str 美国市场状态,参见 MarketState
server_ver str FutuOpenD版本号
trd_logined bool True:已登录交易服务器,False: 未登录交易服务器
qot_logined bool True:已登录行情服务器,False: 未登录行情服务器
timestamp str 当前格林威治时间戳(秒)
local_timestamp float FutuOpenD运行机器的当前时间戳(秒)
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_global_state())
quote_ctx.close()

get_stock_quote

get_stock_quote(self, code_list)

获取订阅股票报价的实时数据,有订阅要求限制

Parameters:code_list – 股票代码列表,必须确保code_list中的股票均订阅成功后才能够执行
Returns:(ret, data)

ret == RET_OK 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
data_date str 日期
data_time str 时间(港股A股默认是北京时间)
last_price float 最新价格
open_price float 今日开盘价
high_price float 最高价格
low_price float 最低价格
prev_close_price float 昨收盘价格
volume int 成交数量
turnover float 成交金额
turnover_rate float 换手率(该字段为百分比字段,默认不展示%)
amplitude int 振幅(该字段为百分比字段,默认不展示%)
suspension bool 是否停牌(True表示停牌)
listing_date str 上市日期 (yyyy-MM-dd)
price_spread float 当前向上的价差,亦即摆盘数据的卖档的相邻档位的报价差
dark_status str 暗盘交易状态,见 DarkStatus
strike_price float 行权价
contract_size int 每份合约数
open_interest int 未平仓合约数
implied_volatility float 隐含波动率(该字段为百分比字段,默认不展示%)
premium float 溢价(该字段为百分比字段,默认不展示%)
delta float 希腊值 Delta
gamma float 希腊值 Gamma
vega float 希腊值 Vega
theta float 希腊值 Theta
rho float 希腊值 Rho
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
code_list = ['US.AAPL210115C185000']
print(quote_ctx.subscribe(code_list, [SubType.QUOTE]))
print(quote_ctx.get_stock_quote(code_list))
quote_ctx.close()

get_rt_ticker

get_rt_ticker(self, code, num=500)

获取指定股票的实时逐笔。取最近num个逐笔

Parameters:
  • code – 股票代码
  • num – 最近ticker个数,最多可获取1000个
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
sequence int 逐笔序号
time str 成交时间(港股A股默认是北京时间)
price float 成交价格
volume int 成交数量(股数)
turnover float 成交金额
ticker_direction str 逐笔方向
type str 逐笔类型,参见 TickerType

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.subscribe(['HK.00700'], [SubType.TICKER])
print(quote_ctx.get_rt_ticker('HK.00700', 10))
quote_ctx.close()

Note

get_cur_kline

get_cur_kline(self, code, num, ktype=SubType.K_DAY, autype=AuType.QFQ)

实时获取指定股票最近num个K线数据

Parameters:
  • code – 股票代码
  • num – k线数据个数,最多1000根
  • ktype – k线类型,参见 KLType
  • autype – 复权类型,参见 AuType
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
time_key str 时间(港股A股默认是北京时间)
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
volume int 成交量
turnover float 成交额
pe_ratio float 市盈率
turnover_rate float 换手率(该字段为百分比字段,展示为小数表示)

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.subscribe(['HK.00700'], [SubType.K_DAY])
print(quote_ctx.get_cur_kline('HK.00700', 10, SubType.K_DAY, AuType.QFQ))
quote_ctx.close()

Note

get_order_book

get_order_book(self, code)

获取实时摆盘数据

Parameters:code – 股票代码
Returns:(ret, data)

ret == RET_OK 返回字典,数据格式如下:

{
'code': 股票代码
'svr_recv_time_bid': 富途服务器从交易所收到数据的时间(for bid) 部分数据的接收时间为零,例如服务器重启或第一次推送的缓存数据。
'svr_recv_time_ask': 富途服务器从交易所收到数据的时间(for ask)
'Ask': [ (ask_price1, ask_volume1,order_num), (ask_price2, ask_volume2, order_num),…]
'Bid': [ (bid_price1, bid_volume1, order_num), (bid_price2, bid_volume2, order_num),…]
}
‘Ask’:卖盘
‘Bid’: 买盘
每个元组的含义是(委托价格,委托数量,委托订单数)

ret != RET_OK 返回错误字符串

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
quote_ctx.subscribe(['HK.00700'], [SubType.ORDER_BOOK])
print(quote_ctx.get_order_book('HK.00700'))
quote_ctx.close()

get_multi_points_history_kline

get_multi_points_history_kline(self, code_list, dates, fields, ktype=KLType.K_DAY, autype=AuType.QFQ, no_data_mode=KLNoDataMode.FORWARD)

从本地历史K线中获取多支股票多个时间点的指定数据列

Parameters:
  • code_list – 单个或多个股票 ‘HK.00700’ or [‘HK.00700’, ‘HK.00001’]
  • dates – 单个或多个日期 ‘2017-01-01’ or [‘2017-01-01’, ‘2017-01-02’],最多5个时间点
  • fields – 单个或多个数据列 KL_FIELD.ALL or [KL_FIELD.DATE_TIME, KL_FIELD.OPEN]
  • ktype – K线类型 KLType
  • autype – 复权类型 AuType
  • no_data_mode – 指定时间为非交易日时,对应的k线数据取值模式,参见 KLNoDataMode
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,固定表头包括’code’(代码) ‘time_point’(指定的日期) ‘data_status’ (KLDataStatus)。数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
time_point str 请求的时间(港股A股默认是北京时间)
data_status str 数据点是否有效,参见 KLDataStatus
time_key str k线时间(港股A股默认是北京时间)
open float 开盘价
close float 收盘价
high float 最高价
low float 最低价
pe_ratio float 市盈率
turnover_rate float 换手率(该字段为百分比字段,默认不展示%)
volume int 成交量
turnover float 成交额
change_rate float 涨跌幅(该字段为百分比字段,默认不展示%)
last_close float 昨收价

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_multi_points_history_kline(['HK.00700'], ['2017-06-20', '2017-06-25'], KL_FIELD.ALL, KLType.K_DAY, AuType.QFQ))
quote_ctx.close()

get_referencestock_list

get_referencestock_list(self, code, reference_type)

获取证券的关联数据

Parameters:
  • code – 证券id,str,例如HK.00700
  • reference_type – 要获得的相关数据,参见 SecurityReferenceType 。例如WARRANT,表示获取正股相关的涡轮
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 证券代码
lot_size int 每手数量
stock_type str 证券类型,参见 SecurityType
stock_name str 证券名字
list_time str 上市时间(港股A股默认是北京时间)
wrt_valid bool 是否是窝轮,如果为True,下面wrt开头的字段有效
wrt_type str 窝轮类型,参见 WrtType
wrt_code str 所属正股

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_referencestock_list('HK.00700', SecurityReferenceType.WARRANT))
quote_ctx.close()

get_owner_plate

get_owner_plate(self, code_list)

获取单支或多支股票的所属板块信息列表

Parameters:code_list – 股票代码列表,仅支持正股、指数。list或str。例如:[‘HK.00700’, ‘HK.00001’]或者’HK.00700,HK.00001’,最多可传入200只股票
Returns:(ret, data)

ret == RET_OK 返回pd dataframe数据,data.DataFrame数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 证券代码
plate_code str 板块代码
plate_name str 板块名字
plate_type str 板块类型(行业板块或概念板块),查看 Plate
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
code_list = ['HK.00700', 'HK.00001']
print(quote_ctx.get_owner_plate(code_list))
quote_ctx.close()

Note

get_holding_change_list

get_holding_change_list(self, code, holder_type, start, end=None)

获取大股东持股变动列表,只提供美股数据,并最多只返回前100个

Parameters:
  • code – 股票代码. 例如:’US.AAPL’
  • holder_type – 持有者类别,查看 StockHolder
  • start – 开始时间. 例如:‘2016-10-01’
  • end

    结束时间,例如:‘2017-10-01’。 start与end的组合如下:

    start类型 end类型 说明
    str str start和end分别为指定的日期
    None str start为end往前365天
    str None end为start往后365天
    None None end为当前日期,start为end往前365天
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,data.DataFrame数据, 数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
holder_name str 高管名称
holding_qty float 持股数
holding_ratio float 持股比例(该字段为百分比字段,默认不展示%)
change_qty float 变动数
change_ratio float 变动比例(该字段为百分比字段,默认不展示%。是相对于自身的比例,而不是总的。如总股本1万股,持有100股,持股百分比是1%,卖掉50股,变动比例是50%,而不是0.5%)
time str 发布时间(美股的时间默认是美东)
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_holding_change_list('US.AAPL', StockHolder.INSTITUTE, '2018-10-01'))
quote_ctx.close()

Note

get_option_chain

get_option_chain(self, code, start, end=None, option_type=OptionType.ALL, option_cond_type=OptionCondType.ALL)

通过标的股查询期权

Parameters:
  • code – 股票代码,例如:’HK.02318’
  • start – 开始日期,该日期指到期日,例如‘2017-08-01’
  • end

    结束日期(包括这一天),该日期指到期日,例如‘2017-08-30’。 注意,时间范围最多30天。 start和end的组合如下:

    start类型 end类型 说明
    str str start和end分别为指定的日期
    None str start为end往前30天
    str None end为start往后30天
    None None start为当前日期,end往后30天
  • option_type – 期权类型,,默认全部,全部/看涨/看跌,查看 OptionType
  • option_cond_type – 默认全部,全部/价内/价外,查看 OptionCondType
Returns:

(ret, data)

ret == RET_OK 返回pd dataframe数据,数据列格式如下

ret != RET_OK 返回错误字符串

参数 类型 说明
code str 股票代码
name str 名字
lot_size int 每手数量
stock_type str 股票类型,参见 SecurityType
option_type str 期权类型,查看 OptionType
stock_owner str 标的股
strike_time str 行权日(港股A股默认是北京时间)
strike_price float 行权价
suspension bool 是否停牌(True表示停牌)
stock_id int 股票id

from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_option_chain('US.AAPL', '2018-08-01', '2018-08-18', OptionType.ALL, OptionCondType.OUTSIDE))
quote_ctx.close()

Note

get_history_kl_quota

get_history_kl_quota(self, get_detail=False)

获取已使用过的额度,即当前周期内已经下载过多少只股票

Parameters:get_detail

是否返回详细拉取过的历史纪录

参数 类型 说明
code str 拉取的股票代码
request_time str 最后一次拉取的时间字符串
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回(used_quota, remain_quota, detail_list)

参数 类型 说明
used_quota int32 已使用过的额度,即当前周期内已经下载过多少只股票
remain_quota int32 剩余额度,30天后额度会恢复
detail_list dict list get_detail为True时返回,每只拉取过的股票的下载时间
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_history_kl_quota())
quote_ctx.close()

get_rehab

get_rehab(self, code)

获取给定股票的复权因子

Parameters:code – 需要查询的股票代码.
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回pd dataframe数据

参数 类型 说明
ex_div_date str 除权除息日
split_ratio float 拆合股比例(该字段为比例字段,展示为小数表示)例如,对于5股合1股为5.0,对于1股拆5股为0.2
per_cash_div float 每股派现
per_share_div_ratio float 每股送股比例(该字段为比例字段,展示为小数表示)
per_share_trans_ratio float 每股转增股比例(该字段为比例字段,展示为小数表示)
allotment_ratio float 每股配股比例(该字段为比例字段,展示为小数表示)
allotment_price float 配股价
stk_spo_ratio float 增发比例(该字段为比例字段,展示为小数表示)
stk_spo_price float 增发价格
forward_adj_factorA float 前复权因子A
forward_adj_factorB float 前复权因子B
backward_adj_factorA float 后复权因子A
backward_adj_factorB float 后复权因子B
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_rehab("HK.00700"))
quote_ctx.close()

Note

get_warrant

get_warrant(self, stock_owner='', req=None)

通过标的股查询涡轮

Parameters:
  • stock_owner – 所属正股的股票代码,例如:’HK.00700’,会去找腾讯的涡轮,注意有些股票没有对应涡轮牛熊。
  • req – 请求参数组合,from futu.quote.quote_get_warrant import Request
参数 类型 说明
begin int 数据起始点
num int 请求数据个数,最大200
sort_field SortField 根据哪个字段排序 SortField
ascend bool 升序True, 降序False
type_list list 窝轮类型过滤列表 参见 WrtType
issuer_list list 发行人过滤列表 参见 Issuer
maturity_time_min str 到期日, 到期日范围的开始时间
maturity_time_max str 到期日范围的结束时间
ipo_period str 上市日 参见 IpoPeriod
price_type str 价内/价外(该字段为百分比字段,默认不展示%)参见 PriceType , 界内证暂不支持界内外筛选
status str 窝轮状态 参见 WarrantStatus
cur_price_min double 最新价过滤起点
cur_price_max double 最新价过滤终点
strike_price_min double 行使价过滤起点
strike_price_max double 行使价过滤终点
street_min double 街货占比, 过滤起点(该字段为百分比字段,默认不展示%)
street_max double 街货占比, 过滤终点(该字段为百分比字段,默认不展示%)
conversion_min double 换股比率过滤起点
conversion_max double 换股比率过滤终点
vol_min unsigned int 成交量过滤起点
vol_max unsigned int 成交量过滤终点
premium_min double 溢价, 过滤起点(该字段为百分比字段,默认不展示%)
premium_max double 溢价, 过滤终点(该字段为百分比字段,默认不展示%)
leverage_ratio_min double 杠杆比率过滤起点
leverage_ratio_max double 杠杆比率过滤终点
delta_min double 对冲值过滤起点, 仅认购认沽支持该字段过滤
delta_max double 对冲值过滤终点, 仅认购认沽支持该字段过滤
implied_min double 引伸波幅过滤起点, 仅认购认沽支持该字段过滤
implied_max double 引伸波幅过滤终点, 仅认购认沽支持该字段过滤
recovery_price_min double 收回价过滤起点, 仅牛熊证支持该字段过滤
recovery_price_max double 收回价过滤终点, 仅牛熊证支持该字段过滤
price_recovery_ratio_min double 正股距收回价, 过滤起点, 仅牛熊证支持该字段过滤(该字段为百分比字段,默认不展示%)
price_recovery_ratio_max double 正股距收回价, 过滤终点, 仅牛熊证支持该字段过滤(该字段为百分比字段,默认不展示%)
return:

(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回(warrant_data_list,last_page, all_count)

warrant_data_list pd dataframe数据,数据列格式如下:

last_page 是否是最后一页

all_count 列表总数量

参数 类型 说明
stock str 涡轮代码
stock_owner str 所属正股
type str 窝轮类型 参见 WrtType
issuer Issuer 发行人 参见 Issuer
maturity_time str 到期日
maturity_timestamp double 到期日时间戳
list_time str 上市时间
list_timestamp double 上市时间戳
last_trade_time str 最后交易日
last_trade_timestamp double 最后交易日时间戳
recovery_price double 收回价,仅牛熊证支持该字段
conversion_ratio double 换股比率
lot_size int 每手数量
strike_price double 行使价
last_close_price double 昨收价
name str 名称
cur_price double 当前价
price_change_val double 涨跌额
status str 窝轮状态 参见 WarrantStatus
bid_price double 买入价
ask_price double 卖出价
bid_vol int 买量
ask_vol int 卖量
volume unsigned int 成交量
turnover double 成交额
score double 综合评分
premium double 溢价(该字段为百分比字段,默认不展示%)
break_even_point double 打和点
leverage double 杠杆比率(倍)
ipop double 价内/价外(该字段为百分比字段,默认不展示%)
price_recovery_ratio double 正股距收回价,仅牛熊证支持该字段(该字段为百分比字段,默认不展示%)
conversion_price double 换股价
street_rate double 街货占比(该字段为百分比字段,默认不展示%)
street_vol int 街货量
amplitude double 振幅(该字段为百分比字段,默认不展示%)
issue_size int 发行量
high_price double 最高价
low_price double 最低价
implied_volatility double 引伸波幅,仅认购认沽支持该字段
delta double 对冲值,仅认购认沽支持该字段
effective_leverage double 有效杠杆
upper_strike_price double 上限价,仅界内证支持该字段
lower_strike_price double 下限价,仅界内证支持该字段
inline_price_status str 界内界外 参见 PriceType ,仅界内证支持该字段
Example:
from futu import *
from futu.quote.quote_get_warrant import Request
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
req=Request()
req.sort_field=SortField.TURNOVER
print(quote_ctx.get_warrant("HK.00700",req))
quote_ctx.close()

Note

get_capital_flow

get_capital_flow(self, code)

获取个股资金流向

Parameters:code – 需要查询的股票代码.
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回pd dataframe数据

参数 类型 说明
in_flow double 净流入的资金额度
capital_flow_item_time string 开始时间字符串,以分钟为单位
last_valid_time string 数据最后有效时间字符串
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_capital_flow("HK.00700"))
quote_ctx.close()

Note

get_capital_distribution

get_capital_distribution(self, code)

获取个股资金分布

Parameters:code – 需要查询的股票代码.
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回pd dataframe数据

参数 类型 说明
capital_in_big double 流入资金额度,大单
capital_in_mid double 流入资金额度,中单
capital_in_small double 流入资金额度,小单
capital_out_big double 流出资金额度,大单
capital_out_mid double 流出资金额度,中单
capital_out_small double 流出资金额度,小单
update_time str 更新时间字符串
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_capital_distribution("HK.00700"))
quote_ctx.close()

Note

get_user_security

get_user_security(self, group_name)

获取指定分组的自选股列表(不支持系统分组)

Parameters:group_name – 需要查询的自选股分组名称.
Returns:(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回pd dataframe数据

参数 类型 说明
code str 股票代码
name str 名字
lot_size int 每手数量
stock_type str 股票类型,参见 SecurityType
stock_child_type str 窝轮子类型,参见 WrtType
stock_owner str 涡轮所属正股的代码,或期权标的股的代码
option_type str 期权类型,查看 OptionType
strike_time str 期权行权日(港股A股默认是北京时间)
strike_price float 期权行权价
suspension bool 期权是否停牌(True表示停牌)
listing_date str 上市时间
stock_id int 股票id
delisting bool 是否退市
Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.get_user_security("MyGroup"))
quote_ctx.close()

Note

modify_user_security

modify_user_security(self, group_name, op, code_list)

修改指定分组的自选股列表(不支持系统分组)

Parameters:
  • group_name – 需要修改的自选股分组名称.
  • op – 操作枚举值.查看 ModifyUserSecurity
  • code_list – 股票列表,[‘HK.00700’,’HK.00701’]
Returns:

(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK ‘success’

Example:
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
print(quote_ctx.modify_user_security("MyGroup", ModifyUserSecurityOp.ADD, ['HK.00700']))
quote_ctx.close()

Note

get_stock_filter

get_stock_filter(self, market, filter_list, plate_code=None, begin=0, num=200)

获取条件选股

Parameters:
  • market – 市场标识,注意这里不区分沪和深,输入沪或者深都会返回沪深市场的股票(这个是和客户端保持一致的)参见 Market
  • filter_list

    简单属性筛选条件的枚举值,筛选条件是SimpleFilter类型数据的list对象field,对象field的相关参数如下:

    参数 类型 说明
    stock_field str StockField 简单属性,取值见 StockField
    filter_min double 区间下限,闭区间
    filter_max double 区间上限,闭区间
    is_no_filter bool 该字段是否需要筛选。
    sort str SortDir 排序方向,默认不排序,取值见 SortDir
  • plate_code – 板块代码,string,例如,“SH.BK0001”,“SH.BK0002”,先利用获取子板块列表函数获取子板块代码。支持的板块代码详情请查看下面的Note。
  • begin – 数据起始点
  • num – 请求数据个数,最大200
Returns:

(ret, data)

ret != RET_OK 返回错误字符串

ret == RET_OK 返回(last_page, all_count, stock_list)。对于不支持的板块,返回的数据是(True, 0, [])。

last_page 是否是最后一页

all_count 列表总数量

stock_list 返回的是SimpleFilter类型数据的list对象ret_list,对象ret_list中stock_code和stock_name默认都会返回,同时filter_list中设置的字段也会返回。返回的数据列字段如下:

参数 类型 说明
stock_code str 股票代码
stock_name str 股票名字
cur_price double 最新价
cur_price_to_highest_52weeks_ratio float (现价 - 52周最高)/52周最高,对应PC端离52周高点百分比
cur_price_to_lowest_52weeks_ratio float (现价 - 52周最低)/52周最低,对应PC端离52周低点百分比
high_price_to_highest_52weeks_ratio float (今日最高 - 52周最高)/52周最高
low_price_to_lowest_52weeks_ratio float (今日最低 - 52周最低)/52周最低
volume_ratio float 量比
bid_ask_ratio float 委比
lot_price double 每手价格
market_val float 市值
pe_annual float 市盈率
pe_ttm float 市盈率TTM
pb_rate float 市净率
Example:
from futu import *
from futu.quote.quote_stockfilter_info import SimpleFilter
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
field = SimpleFilter()
field.filter_min = 100
field.filter_max = 1000
field.stock_field = StockField.CUR_PRICE
field.is_no_filter = False
field.sort = SortDir.ASCEND

ret, ls = quote_ctx.get_stock_filter(StockMarket.HK, [field])
if ret == RET_OK:
    last_page, all_count, ret_list = ls
    print(len(ret_list), all_count, ret_list)
else:
    print('error: ', ls)

Note

  • 接口限制请参见 获取条件选股

  • 条件选股支持的板块或指数代码如下:

    代码 说明
    HK.Motherboard 港股主板
    HK.GEM 港股创业板
    HK.BK1911 主板H股
    HK.BK1912 创业板H股
    US.NYSE 纽交所
    US.AMEX 美交所
    US.NASDAQ 纳斯达克
    SH.3000000 上海主板
    SZ.3000001 深证主板
    SZ.3000004 深证创业板
  • 利用获取子板块列表函数get_plate_list获取子板块代码,条件选股支持的板块分别为1.港股的行业板块和概念板块。2.美股的行业板块。3.沪深的行业板块,概念板块和地域板块。


SysNotifyHandlerBase - OpenD通知回调

通知OpenD一些重要消息,类似连接断开等。

from futu import *

class SysNotifyTest(SysNotifyHandlerBase):
    def on_recv_rsp(self, rsp_str):
        ret_code, data = super(SysNotifyTest, self).on_recv_rsp(rsp_pb)
        notify_type, sub_type, msg = data
        if ret_code != RET_OK:
            logger.debug("SysNotifyTest: error, msg: {}".format(msg))
            return RET_ERROR, data
        print(msg)
        return RET_OK, data

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = SysNotifyTest()
quote_ctx.set_handler(handler)

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到OpenD通知推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:ret_code, notify_type, sub_type, msg
参数 类型 说明
notify_type str 通知类型,见 SysNotifyType
sub_type str 消息类型,不同的notify_type,取值也不同,见下表
msg str, dict 消息描述,不同的notify_type,取值也不同,见下表
notify_type sub_type msg
SysNotifyType.NONE None None
SysNotifyType.GTW_EVENT str, 取值见 GtwEventType str,通知描述信息
SysNotifyType.PROGRAM_STATUS str, 取值见 ProgramStatusType str,通知描述信息
SysNotifyType.CONN_STATUS None
{‘qot_logined’: bool, 是否已登录行情连接
‘trd_logined’: bool} 是否已登录交易连接
SysNotifyType.QOT_RIGHT None
{‘hk_qot_right’: str, 港股行情权限
‘cn_qot_right’: str, A股行情权限
‘us_qot_right’: str, 美股行情权限
SysNotifyType.API_LEVEL None str, API用户等级

StockQuoteHandlerBase - 实时报价回调

异步处理推送的订阅股票的报价。

import time
from futu import *

class StockQuoteTest(StockQuoteHandlerBase):
    def on_recv_rsp(self, rsp_str):
        ret_code, data = super(StockQuoteTest,self).on_recv_rsp(rsp_str)
        if ret_code != RET_OK:
            print("StockQuoteTest: error, msg: %s" % data)
            return RET_ERROR, data

        print("StockQuoteTest ", data) # StockQuoteTest自己的处理逻辑

        return RET_OK, data

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = StockQuoteTest()
quote_ctx.set_handler(handler)
quote_ctx.subscribe(['HK.00700'], [SubType.QUOTE])
time.sleep(15)
quote_ctx.close()

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实时报价推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:参见 get_stock_quote 的返回值

OrderBookHandlerBase - 实时摆盘回调

异步处理推送的实时摆盘。

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])
time.sleep(15)
quote_ctx.close()

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实摆盘数据推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:参见 get_order_book 的返回值

CurKlineHandlerBase - 实时k线推送回调

异步处理推送的k线数据。

import time
from futu import *

class CurKlineTest(CurKlineHandlerBase):
    def on_recv_rsp(self, rsp_str):
        ret_code, data = super(CurKlineTest,self).on_recv_rsp(rsp_str)
        if ret_code != RET_OK:
            print("CurKlineTest: error, msg: %s" % data)
            return RET_ERROR, data

        print("CurKlineTest ", data) # CurKlineTest自己的处理逻辑

        return RET_OK, data

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = CurKlineTest()
quote_ctx.set_handler(handler)
quote_ctx.subscribe(['HK.00700'], [SubType.K_1M])
time.sleep(15)
quote_ctx.close()

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实时k线数据推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:参见 get_cur_kline 的返回值,推送回调比 get_cur_kline 少了市盈率和换手率字段

TickerHandlerBase - 实时逐笔推送回调

异步处理推送的逐笔数据。

import time
from futu import *

class TickerTest(TickerHandlerBase):
        def on_recv_rsp(self, rsp_str):
                ret_code, data = super(TickerTest,self).on_recv_rsp(rsp_str)
                if ret_code != RET_OK:
                        print("CurKlineTest: error, msg: %s" % data)
                        return RET_ERROR, data

                print("TickerTest ", data) # TickerTest自己的处理逻辑

                return RET_OK, data

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = TickerTest()
quote_ctx.set_handler(handler)
quote_ctx.subscribe(['HK.00700'], [SubType.TICKER])
time.sleep(15)
quote_ctx.close()

Note

  • 行情连接断开重连后,OpenD拉取断开期间的逐笔数据(最多50根)并推送,可通过push_data_type字段区分

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实时逐笔数据推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:参见 get_rt_ticker 的返回值,回调比get_rt_ticker多返回一个字段:push_data_type,该字段指明数据来源,参见 PushDataType

RTDataHandlerBase - 实时分时推送回调

异步处理推送的分时数据。

import time
from futu import *

class RTDataTest(RTDataHandlerBase):
        def on_recv_rsp(self, rsp_str):
                ret_code, data = super(RTDataTest,self).on_recv_rsp(rsp_str)
                if ret_code != RET_OK:
                        print("RTDataTest: error, msg: %s" % data)
                        return RET_ERROR, data

                print("RTDataTest ", data) # RTDataTest自己的处理逻辑

                return RET_OK, data

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = RTDataTest()
quote_ctx.set_handler(handler)
quote_ctx.subscribe(['HK.00700'], [SubType.RT_DATA])
time.sleep(15)
quote_ctx.close()

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实时逐笔数据推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:参见 get_rt_data 的返回值

BrokerHandlerBase - 实时经纪推送回调

异步处理推送的经纪数据。

class BrokerTest(BrokerHandlerBase):
    def on_recv_rsp(self, rsp_str):
        ret_code, err_or_stock_code, data = super(BrokerTest, self).on_recv_rsp(rsp_str)
        if ret_code != RET_OK:
            print("BrokerTest: error, msg: {}".format(err_or_stock_code))
            return RET_ERROR, data

        print("BrokerTest: stock: {} data: {} ".format(err_or_stock_code, data))  # BrokerTest自己的处理逻辑

        return RET_OK, data


quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
handler = BrokerTest()
quote_ctx.set_handler(handler)
quote_ctx.subscribe(['HK.00700'], [SubType.BROKER])
time.sleep(15)
quote_ctx.close()

on_recv_rsp

on_recv_rsp(self, rsp_pb)

在收到实时经纪数据推送后会回调到该函数,使用者需要在派生类中覆盖此方法

注意该回调是在独立子线程中

Parameters:rsp_pb – 派生类中不需要直接处理该参数
Returns:成功时返回(RET_OK, stock_code, [bid_frame_table, ask_frame_table]), 相关frame table含义见 get_broker_queue 的返回值说明

失败时返回(RET_ERROR, ERR_MSG, None)