qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据。qstock致力于为用户提供更加简洁和规整化的金融市场数据接口,其中可视化模块为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。
读者直接在cmd或anaconda prompt上输入“pip install qstock ”进行安装,或输入“pip install -upgrade qstock”进行更新。
qstock是免费开源金融量化库,已在pypi官网和GitHub上发布,更新至1.3.8版本,修改了之前realtime_data接口200的限制,修正某些数据报错的接口,可以正常使用问财功能(要把pywencai升级到最新,使用pip install --upgrade pywencai),然后需要下载安装node.js(Node.js — Download Node.js®),安装好后打开node.js,在界面输入“npm install jsdom"。添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。
PyPI:https://pypi.org/project/qstock/1.3.7/
关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:
【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘
下面为大家介绍qstock各模块的具体调用方式和应用举例。
#导入qstock模块
import qstock as qs
获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):
#获取沪深A股最新行情指标
df=qs.realtime_data()
#查看前几行
df.head()
#获取期货最新行情指标
df=qs.realtime_data('期货')
#查看前几行
df.head()
#获取概念板块最新行情指标
df=qs.realtime_data('概念板块')
#查看前几行
df.head()
#获取ETF最新行情指标
df=qs.realtime_data('ETF')
#查看前几行
df.head()
qs.realtime_data(code=['中国平安','300684','锂电池ETF','BK0679','上证指数'])
intraday_data(code) - code可以为股票或债券或期货或基金代码简称或代码,如晓程科技或300139,返回股票、期货、债券等的最新交易日成交情况
#股票日内交易数据
df=qs.intraday_data('中国平安')
df.head()
#基金日内交易数据
df=qs.intraday_data('有色50ETF')
df.head()
stock_snapshot(code): - 获取沪深市场股票最新行情快照,code:股票代码
qs.stock_snapshot('中国平安')
获取交易日实时盘口异动数据,相当于盯盘小精灵。 realtime_change(flag=None): - flag:盘口异动类型,默认输出全部类型的异动情况。可选:['火箭发射', '快速反弹','加速下跌', '高台跳水', '大笔买入', '大笔卖出', '封涨停板','封跌停板', '打开跌停板','打开涨停板','有大买盘','有大卖盘', '竞价上涨', '竞价下跌','高开5日线','低开5日线', '向上缺口','向下缺口', '60日新高','60日新低','60日大幅上涨', '60日大幅下跌'] 上述异动类型分别可使用1-22数字代替。
df=qs.realtime_change('60日新高')
#查看前几行
df.head()
#异动类型:火箭发射
df=qs.realtime_change(1)
#查看前几行
df.head()
获取单只或多只证券(股票、基金、债券、期货)的历史K线数据。可以根据realtime_data实时行情接口获取相应金融市场交易标的的代码或简称,用于获取其历史K线数据。 - get_data(code_list, start='19000101', end=None, freq='d', fqt=1)
获取股票、指数、债券、期货、基金等历史K线行情。参数说明: - code_list输入股票list列表,如code_list=['中国平安','贵州茅台','工业富联'] ,返回多只股票多期时间的面板数据 - start和end为起始和结束日期,年月日 - freq:时间频率,默认日,1 : 分钟;5 : 5 分钟;15 : 15 分钟;30 : 30 分钟; 60 : 60 分钟;101或'D'或'd':日;102或‘w’或'W':周; 103或'm'或'M': 月 注意1分钟只能获取最近5个交易日一分钟数据 - fqt:复权类型,0:不复权,1:前复权;2:后复权,默认前复权
#默认日频率、前复权所有历史数据
#open:开盘价,high:最高价,low:最低价,close:收盘价
#vol:成交量,turnover:成交金额,turnover_rate:换手率
#在notebook上输入"qs.get_data?"可查看数据接口的相应参数
df=qs.get_data('601318')
df.tail()
#个股code_list可以输入代码或简称或多个股票的list
#获取中国平安2022年9月28日至今的5分钟数据,默认前复权
df=qs.get_data('中国平安',start='20220928',freq=5)
df.tail()
#获取苹果公司股票数据
df=qs.get_data('AAPL')
df.tail()
df=qs.get_data('棕榈油2210')
df.tail()
注意上证指数代码'000001'与平安银行股票代码相同, 为避免代码相同引起的混乱,获取指数数据,要输入指数的中文简称或拼音缩写。 如'sh'代表'上证指数','sz'代表'深证综指','cyb'代表‘创业板指','zxb'代表'中小100'(原来的中小板指数),'hs300'代表'沪深300','sz50'代表 '上证50','zz500'代表'中证500'等等
code_list=['sh','sz','cyb','zxb','hs300','sz50','zz500']
df=qs.get_data(code_list)
df
#全球指数可参见:https://quote.eastmoney.com/center/qqzs.html
global_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)
获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe
code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']
code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()
起始和结束日期默认为None,表示最新,日期格式'2021-08-21'
df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s]
获取沪深市场指定股票前十大股东信息 - code : 股票代码 - n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df
df=qs.stock_holder_num('20220930')
#df
#大股东
df=qs.stock_holder_change()
df.head()
获取新浪财经机构持股一览表 - quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度
df=qs.institute_hold('20222')
#df
获取公司主营业务构成 - code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()
df=qs.financial_statement('业绩报表',date='20220930')
#df.head()
df=qs.financial_statement('yjyg')
#df.head()
#注意参数设置有个小bug,目前调用会报错,将在新版本中修正!
df=qs.financial_statement('yjkb')
#df.head()
df=qs.financial_statement('资产负债表')
#查看前几行
#df.head()
df=qs.financial_statement('利润表')
#查看前几行
#df.head()
df=qs.financial_statement('现金流量表')
#查看前几行
#df.head()
code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标
code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df
获取个股历史报告期所有财务分析指标
code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()
df=qs.eps_forecast()
#df.head()
获取常见指数的成分股
#上证50成份股
df=qs.index_member('sz50')
#查看前几行数据
#df.head()
#沪深300成分股
#qs.index_member('hs300')
获取同花顺概念板块名称、成分股、和行情数据
flag='概念板块' or '行业板块'
#行业板块名称
name_list=qs.ths_index_name('行业')
#查看5个
name_list[:5]
['种植业与林业', '养殖业', '农产品加工', '农业服务', '煤炭开采加工']
#概念板块名称
name_list=qs.ths_index_name('概念')
#查看5个
name_list[:5]
['信创', '有机硅概念', '空气能热泵', '先进封装(Chiplet)', '减速器']
获取同花顺概念板块成分股 注意,同花顺数据接口不太稳定,如报错过一段时间再试。 - ths_index_member(code=None)
code:输入板块行业或概念代码或简称
#比如种植业与林业成分股
df=qs.ths_index_member('种植业与林业')
#查看前几行
#df.head()
#比如有机硅概念
df=qs.ths_index_member('有机硅概念')
#查看前几行
#df.head()
获取同花顺概念或行业板块指数行情数据(开盘、最高、最低、收盘和成交量) - ths_index_data(code=None)
code:输入板块行业或概念代码或简称
df=qs.ths_index_data('有机硅概念')
#df.head()
code : 股票、债券代码
获取单只股票最新交易日的日内分钟级单子流入流出数据
#注意要在交易日交易时段才能获取到相应数据
df=qs.intraday_money('中国平安')
#df.head()
code : 股票、债券代码
获取股票、债券、期货等的历史单子流入流出数据
df=qs.hist_money('中国平安')
#df.tail()
stock可以为股票简称或代码,如晓程科技或300139 ndays为时间周期或list,如3日、5日、10日等
#默认ndays=[3, 5, 10, 20]
df=qs.stock_money('中国平安')
#df
df=qs.stock_money('中国平安',[10,30,60])
#df.tail()
获取同花顺个股、行业、概念资金流数据 - ths_money(flag=None,n=None): - flag:'个股','概念','行业' - n=1,3,5,10,20分别表示n日资金累计净额
#个股20日资金流数据
df=qs.ths_money('个股',n=20)
#df.tail()
#行业板块10日资金流数据
df=qs.ths_money('行业',n=10)
#df.tail()
#概念板块5日资金流数据
df=qs.ths_money('概念',n=5)
#df.tail()
north_money(flag=None,n=1)
flag=None,默认返回北上资金总体每日净流入数据
#北向资金每日净流入数据
df=qs.north_money()
#df.tail()
#北向资金增持行业板块5日排名
df=qs.north_money('行业',5)
#df.tail()
#北向资金增持概念板块
df=qs.north_money('概念',5)
#df.tail()
#北向资金增持个股情况
#有个小bug,列名没有对应起来,该函数调用将报错,将在新版本中修正。
df=qs.north_money('个股',5)
#df.tail()
获取宏观经济常见指标 - macro_data(flag=None)
flag:lpr:贷款基准利率;ms:货币供应量;cpi:消费者物价指数; ppi:工业品出厂价格指数;pmi:采购经理人指数 默认返回gdp数据
对应数据也可以使用相应接口,如qs.cpi()、qs.gdp()、qs.ms()、qs.ppi()、qs.pmi()、qs.lpr()可以分别获取CPI、GDP、货币供应量、PPI、PMI数据。
df=qs.macro_data('gdp')
#df
df=qs.macro_data('cpi')
#df
df=qs.macro_data('ppi')
#df
df=qs.macro_data('pmi')
#df
df=qs.macro_data('ms')
#df
df=qs.macro_data('lpr')
#df
同业拆借利率 - ib_rate(market='sh',fc=None): - market:同业拆借市场简称,各个市场英文缩写为: {'sh':'上海银行同业拆借市场','ch':'中国银行同业拆借市场','l':'伦敦银行同业拆借市场', 'eu':'欧洲银行同业拆借市场','hk':'香港银行同业拆借市场','s':'新加坡银行同业拆借市场'} - fc:外币币种,输入币种的英文简称,"CNY"(人民币):,"GBP"(英镑),"EUR"(欧元) ,"USD"(美元) ,"HKD"(港币) ,"SGD"(星元) 香港市场,fc可选:'HKD','USD','CNY';新加坡市场,fc可选:'SGD','USD';伦敦市场,fc可选:'GBP','USD','EUR','JPY';
#默认输出上海银行同业拆借市场利率
#或输入market='sh'
df=qs.ib_rate()
df
df=qs.ib_rate(market='ch')
df
#伦敦简称l,注意是英文字母‘l’(London的首字母小写),不是数字1!
#币种可选GBP'英镑',USD'美元',EUR'欧元',JPY'日元'
df=qs.ib_rate(market='l',fc='GBP')
df
#伦敦美元
df=qs.ib_rate('l','USD')
df
#伦敦欧元
df=qs.ib_rate('l','EUR')
df
#伦敦日元
df=qs.ib_rate('l','JPY')
#df
#欧元
df=qs.ib_rate('eu')
df
#香港市场美元
df=qs.ib_rate('hk','USD')
df
#香港市场港币
df=qs.ib_rate('hk','HKD')
df
#香港市场人民币
df=qs.ib_rate('hk','CNY')
df
#新加坡美元利率
df=qs.ib_rate('s','usd')
df
```python
$ claude mcp add qstock \
-- python -m otcore.mcp_server <graph>