当我们需要进行自动化选股进行操作时,就需要直接操作数据,而不是券商给我们提供的软件(因为每个券商的软件往往有我们的一部分功能, 而我们希望要的是每个券商的一部分功能),市场上A股数据很多很多,最终选择使用富途牛牛的这份数据 ,主要有以下几点:
富途牛牛 API介绍
使用富途牛牛API需要两部分,一个叫做 FutuOpenD,另一个就是python API
需要先安装FutuOpenD,这个程序负责和富途牛牛的服务器进行通信,具体怎样通信的,是否会很快,没有过多研究
我选择安装的是windows版本,个人电脑操作方便一些,同时是支持linux等版本的
运行FutuOpenD后,需要登录个人的富途牛牛账号,这个需要自己注册一个,并且需要开户,提交自己的信息即可,登录进去,左侧的配置都默认即可
windows下安装环境 python
conda create -n py3 pip # 创建py3环境 conda create --name py3.7 python=3.7
conda activate py3 # 激活环境
# conda remove -n py3 --all #删除环境
pip install futu-api # 这行即可
至此开发环境就准备好了
富途牛牛 A股 API选择股票
API接口文档比较完善,而且还有例子,照着写就行了
比如我想写一个市盈率在 1~20, ROE 在 10~40 的过滤条件,如下所示
PE_TTM = SimpleFilter()
PE_TTM.filter_min = 1
PE_TTM.filter_max = 20
PE_TTM.stock_field = StockField.PE_TTM # 1 < 市盈率 < 20
PE_TTM.is_no_filter = False
ROE = FinancialFilter()
ROE.filter_min = 10
ROE.filter_max = 40
ROE.stock_field = StockField.RETURN_ON_EQUITY_RATE # 10% < ROE > 40%
ROE.is_no_filter = False
ROE.sort = SortDir.ASCEND
ROE.quarter = FinancialQuarter.ANNUAL
my_filter_lists = []
my_filter_lists.append(ROE) # ROE
my_filter_lists.append(PE_TTM) # 市盈率
nBegin = 0
last_page = False
ret_list = list()
while not last_page:
nBegin += len(ret_list)
ret, ls = quote_ctx.get_stock_filter(market=Market.SH, filter_list= my_filter_lists,begin=nBegin) # 对香港市场的股票做简单、财务和指标筛选
if ret == RET_OK:
last_page, all_count, ret_list = ls
for item in ret_list:
print(item)
#print('all count = ', len(ret_list))
#print(ret_list)
else:
print('error: ', ls)
可以对很多选项进行过滤,具体查看官网文档富途牛牛 A股 API选择股票,唯一遗憾是没有找到板块信息的过滤字段
没有找到富途牛牛API过滤板块的信息,如果你想排除某些板块,则需要首先获得板块下股票,然后在从结果中过滤掉
一个小例子:过滤掉结果中板块是房地产和金融的股票
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
bad_bk = ['金融','房地产'] # 过滤掉板块
my_filter_lists = []
MARKET_VAL = SimpleFilter()
MARKET_VAL.filter_min = 1000000000 * 2 # 10 亿
MARKET_VAL.filter_max = 1000000000 * 350
MARKET_VAL.stock_field = StockField.MARKET_VAL # 市值
MARKET_VAL.is_no_filter = False
my_filter_lists.append(MARKET_VAL) # 总市值
bad_stock = None
bad_code = [] # 通过 房地产
ret, data = quote_ctx.get_plate_list(Market.SH, Plate.INDUSTRY)
if ret == RET_OK:
for item in bad_bk:
bad_code.append(data[data['plate_name'].str.contains(item)]['code'].values[0])
else:
print('error:', data)
for item in bad_code:
ret, data = quote_ctx.get_plate_stock(item)
if ret == RET_OK:
if bad_stock is None:
bad_stock = data
else:
bad_stock = bad_stock.append(data)
else:
print('error:', data)
#bad_stock.to_csv('test.csv')
bad_code = bad_stock['code'].values.tolist() # 不显示的股票列表
bad_code 列表就是需要排除的房地产和金融板块下的所有股票
其他相关需求,可以查找对应的API, 看看api说明即可进行开发
富途牛牛 A股 API选择股票
本文写于2021/9/1,由于时间关系,官方文档可能变化,请及时查看官方文档,防止被误导,如有问题也可以加入我们的交流群