qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据。qstock致力于为用户提供更加简洁和规整化的金融市场数据接口。可视化模块基于plotly.express和pyecharts包,为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。
qstock目前在pypi官网上发布,开源第一版本为1.1.0,目前更新至1.3.1。读者直接通过“pip install qstock ”安装,通过’pip install –upgrade qstock’进行更新。
GitHub地址:https://github.com/tkfy920/qstock。
目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上上获取qstock-vip-1.3.1.tar.gz (强化版)安装包,将安装包放在工作路径下输入’pip install qstock-vip-1.3.1.tar.gz’进行离线安装。
更新后的最新版本qstock 1.3.1,所有接口函数(包括可视化plot、选股stock)均可通过qstock调用,即先导入import qstock as qs,然后使用qs.xxx,xxx为对应接口函数,如qs.kline(df)画K线图,qs.get_data(‘代码’)获取数据。
qstock 相关教程:
import qstock as qs
limit_pool(flag='u',date=None)
参数说明
flag='u'代表涨停板,'d'代表跌停,'s'代表强势股
date:日期如'20220916'
涨停股
获取2022年11月04日涨停板数据
df=qs.limit_pool('u','20221104')
#查看前几行
df.head()
跌停股
获取2022年11月04日跌停板数据
df=qs.limit_pool('d','20221104')
#查看前几行
df.head()
强势股
获取东方财富强势股列表
df=qs.limit_pool('s','20221104')
df
ths_pool(ta=None)
参数说明:
ta:输入技术形态选股,可选:"创月新高", "半年新高", "一年新高", "历史新高","创月新低", "半年新低", "一年新低", "历史新低",'连续上涨','持续放量','量价齐升','强势股',f'u{n}',f'd{n}',n=10、20、30、60、90、250、500,突破n日均线;如'u20'代表向上突破20日均线,'d10':跌破10日均线;'险资举牌'。
注意,同花顺数据接口不太稳定,建议隔几秒再访问一次,如出现报错:No tables found,可能因访问过于频繁被禁,请稍后再试。后续新版本就不断改进数据接口。
创新高/低股票池
ta="创月新高", "半年新高", "一年新高", "历史新高","创月新低", "半年新低", "一年新低", "历史新低"。如果返回空值代表没有股票满足该要求。
#"创月新高", "半年新高", "一年新高", "历史新高"
df=qs.ths_pool('一年新高')
df
最近一年来市场大多数个股处于下跌趋势,因此当ta="半年新高", "一年新高", "历史新高"时,返回空值,表明找不到满足条件的个股。
#"一年新低"
df=qs.ths_pool('半年新低')
df
连续上涨
#连续上涨个股
df=qs.ths_pool('连续上涨')
df
量价齐升
import qstock as qs
df=qs.ths_pool('量价齐升')
df
突破n日均线
f'u{n}',f'd{n}',n=10、20、30、60、90、250、500,突破n日均线;
如'u20'代表向上突破20日均线,'d10':跌破10日均线。
#向上突破20日均线
qs.ths_pool('u20')
获取同花顺和东方财富热门概念板块,通过阶段动量排名进行选股,追踪短线热点。
注意,同花顺数据接口不太稳定,建议隔几秒再访问一次,如出现数据获取卡死或报错:No tables found,可能因访问过于频繁被禁,请稍后再试。后续新版本就不断改进数据接口。
#获取同花顺概念板块收盘价数据
ths_price=qs.ths_index_price('概念')
价格数据
ths_price
#概念板块[1,5,20,60,120]日收益率排名,c=2代表以第三列即20日收益率排名
qs.ret_rank(ths_price,w_list=[1,5,20,60,120],c=3)[:10]
#计算对应周期收益率
ths_rets=qs.ret_date(ths_price,w_list=[1,5,20,60,120])
qs.ret_top(ths_rets,10)
w_data=qs.ret_top_list(qs.ret_top(ths_rets,20))
qs.chart_wordcloud(w_data,title=None)
热点板块成分股
import qstock as qs
#获取氟化工概念板块成分股
member_df=qs.ths_index_member('白酒概念')
#查看前几行数据
member_df.head()
member_price=qs.get_price(list(member_df['代码']),start='2021-01-01')
member_price
#默认按最后一列排名
qs.ret_rank(member_price,w_list=[3,5,10,20,30])
东方财富热门板块
import qstock as qs
code_list=list(qs.realtime_data('概念')['名称'])
#排除涨停概念(买不到)
del_code=['昨日连板_含一字','昨日涨停_含一字','昨日涨停','昨日连板']
for code in del_code:
code_list.remove(code)
print(len(code_list))
389
all_price=qs.get_price(code_list,start='20220101')
all_price.tail()
#概念板块[1,5,20,60,120]日收益率排名,c=2代表以第三列即20日收益率排名
qs.ret_rank(all_price,w_list=[1,5,20,60,120],c=3)[:10]
计算板块收益率
all_rets=qs.ret_date(all_price,w_list=[1,5,20,60,120])
#分别按[1,5,20,60,120]收益率排序前10
qs.ret_top(all_rets,10)
w_data=qs.ret_top_list(qs.ret_top(all_rets,50))
qs.chart_wordcloud(w_data,title=None)