Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - leotpp/qstock: qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。 · GitHub
Skip to content

Repository files navigation

简介

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.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。

PyPI:https://pypi.org/project/qstock/1.3.5/

关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章:

【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘

下面为大家介绍qstock各模块的具体调用方式和应用举例。

#导入qstock模块importqstockasqs

数据模块

行情交易数据接口

实时行情数据

获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None):

  • market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情
  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']

某市场所有标的最新行情

#获取沪深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()

个股最新行情指标

  • code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富']
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线

获取单只或多只证券(股票、基金、债券、期货)的历史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()

获取期货历史K线数据

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.htmlglobal_indexs=['道琼斯','标普500','纳斯达克','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
qs.get_data(global_indexs)

多只证券的历史价格数据

获取单只或多只证券(股票、基金、债券、期货)的收盘价格dataframe

  • get_price(code_list, start='19000101', end='20500101', freq='d', fqt=1)

code_list输入股票list列表 如code_list=['中国平安','贵州茅台','工业富联']

code_list=['中国平安','300684','锂电池ETF','BK0679','上证指数']
df=qs.get_price(code_list)
df.tail()

股票龙虎榜数据

  • stock_billboard(start=None, end=None)

起始和结束日期默认为None,表示最新,日期格式'2021-08-21'

df=qs.stock_billboard('20220901','20221011')
df
4it [00:01, 3.98it/s] 

基本面数据

股东持股情况

股票前十大股东信息

  • stock_holder_top10(code, n=2)

获取沪深市场指定股票前十大股东信息

  • code : 股票代码
  • n :最新 n个季度前10大流通股东公开信息
df=qs.stock_holder_top10('中国平安', n=2)
#df

沪深个股股东数量

  • stock_holder_num(date=None) 获取沪深A股市场公开的股东数目变化情况
  • date : 默认最新的报告期, 指定某季度如'2022-03-31','2022-06-30','2022-09-30','2022-12-31'
df=qs.stock_holder_num('20220930')
#df

大股东增减持变动明细

#大股东df=qs.stock_holder_change()
df.head()

机构持股

  • institute_hold(quarter = "20221")

获取新浪财经机构持股一览表

  • quarter: 如'20221表示2022年一季度, 其中的 1 表示一季报; "20193", 其中的 3 表示三季报;
#2022年2季度df=qs.institute_hold('20222')
#df

主营业务

  • main_business(code= "000001")

获取公司主营业务构成

  • code: 股票代码或股票简称
df=qs.main_business('丰元股份')
#df.head()

财务报表

  • financial_statement(flag='业绩报表',date=None):
  • flag:报表类型,默认输出业绩报表; '业绩报表'或'yjbb':返回年报季报财务指标; '业绩快报'或'yjkb':返回市场最新业绩快报; '业绩预告'或'yjyg':返回市场最新业绩预告; '资产负债表'或'zcfz':返回最新资产负债指标; '利润表'或'lrb':返回最新利润表指标; '现金流量表'或'xjll':返回最新现金流量表指标.
  • date:报表日期,如‘20220630’,‘20220331’,默认当前最新季报(或半年报或年报)

业绩报表

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()

财务指标

个股基本财务指标

  • stock_basics(code_list)

code_list:代码或简称,可以输入单只或多只个股的list
如:单只个股:code_list='中国平安';
多只个股code_list=['晓程科技','中国平安','西部建设']
返回:代码、名称、净利润、总市值、流通市值、所处行业、市盈率、市净率、ROE、毛利率和净利率指标

code_list=['300139','中国平安','西部建设','贵州茅台','丰元股份','002432']
df=qs.stock_basics(code_list)
#df

个股详细财务指标

  • stock_indicator(code):

获取个股历史报告期所有财务分析指标

code: 股票代码或简称
df=qs.stock_indicator('中国平安')
#df.head()

每股收益预测

df=qs.eps_forecast()
#df.head()

指数成分股

获取常见指数的成分股

  • index_member(code)
    code : 指数名称或者指数代码
#上证50成份股df=qs.index_member('sz50')
#查看前几行数据#df.head()
#沪深300成分股#qs.index_member('hs300')

概念板块数据

获取同花顺概念板块名称、成分股、和行情数据

获取同花顺概念板块名称

  • ths_index_name(flag='概念')

    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()

资金流数据

日内资金流数据

  • intraday_money(code)

code : 股票、债券代码

获取单只股票最新交易日的日内分钟级单子流入流出数据

#注意要在交易日交易时段才能获取到相应数据df=qs.intraday_money('中国平安')
#df.head()

历史资金流向数据

  • hist_money(code)

code : 股票、债券代码

获取股票、债券、期货等的历史单子流入流出数据

df=qs.hist_money('中国平安')
#df.tail()

个股n日资金流

  • stock_money(code, ndays=[3, 5, 10, 20])

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,默认返回北上资金总体每日净流入数据

  • flag='行业',代表北向资金增持行业板块排行

  • flag='概念',代表北向资金增持概念板块排行

  • flag='个股',代表北向资金增持个股情况

  • n: 代表n日排名,n可选1、3、5、10、‘M’,‘Q','Y' 即 {'1':"今日", '3':"3日",'5':"5日", '10':"10日",'M':"月", 'Q':"季", 'Y':"年"}

北向资金每日净流入

#北向资金每日净流入数据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数据。

GDP数据

df=qs.macro_data('gdp')
#df

CPI物价指数

df=qs.macro_data('cpi')
#df

PPI工业品出厂价格指数

df=qs.macro_data('ppi')
#df

pmi采购经理人指数

df=qs.macro_data('pmi')
#df

货币供应量

df=qs.macro_data('ms')
#df

贷款基准利率LPR

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
#新加坡星元利率df=qs.ib_rate('s','SGD')
df

财经新闻数据

新闻资讯数据

  • news_data(news_type=None,start=None,end=None,code=None):

  • news_type:新闻类型:cctv'或'新闻联播'; 'js'或'金十数据';'stock' 或'个股新闻' 不输入参数,默认输出财联社电报新闻数据。

  • start:起始日期,如'20220930',不输入默认当前最新日期

  • end:结束日期,如'20221001',不输入默认当前最新日期

  • stock:个股代码,个股新闻时需输入该参数

财联社电报新闻数据

#默认参数输出财联社电报新闻数据df=qs.news_data()
df.tail()

市场快讯数据

df=qs.news_data('js')
df.tail()

新闻联播文字

#参数start起始日期,end结束日期,使用默认参数输出最新日期新闻联播df=qs.news_data('cctv',start='20221016',end='20221016')
#df.head()
#也可以使用新闻联播数据接口获取,start和end默认为最新日期df=qs.news_cctv(start='20221016',end='20221016')
df.head()

个股新闻

#使用新闻统一接口df=qs.news_data('个股',code='天瑞仪器')
df.head()
#使用个股新闻接口df=qs.stock_news('天瑞仪器')
df.head()
importqstockasqsfromqstockimportplot

K线图

普通K线图

  • kline(df, mas=5, mal=20, notebook=True,title="股票K线图")

参数说明:

  • df:数据,包含open,high,low,close,volume列名的dataframe
  • mas:短期均线,默认5日均线
  • mal:长期均线,默认20日均线
  • notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True
  • title:图形标题
#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)frompyecharts.globalsimportCurrentConfig, NotebookTypeCurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1000.31it/s]
#使用默认参数plot.kline(df)

修正K线图

  • HA_kline(df)

参数df与前面普通k线图线图。

也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)

树状图

  • treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])

参数说明:

  • data:dataframe数据格式
  • label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业', '股票名称'] 其中,'行业', '股票名称'必须是data里的存在的列名
  • weight:data里存在的列,用来显示权重
  • value:data里存在的列,用来显示数值
  • color:设置展示的颜色
#获取东方财富行业板块实时涨跌幅数据data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)
#获取东方财富概念板块实时涨跌幅数据data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)

ichimoku云图

  • plot_ichimoku(df, t=9, k=26, l=30, s=52):

参数说明:

  • df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式
  • t:Tenkan-sen:转折线计算周期,默认9个交易日
  • k:Kijun-sen:基准线计算周期,默认26
  • l:Chikou Span:滞后跨度或延迟线计算周期,默认30天
  • s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日

Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)

基本图形

折线图

  • line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True):

参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。

普通折线图

#获取中国平安前复权价格数据code='中国平安'df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')

股价分位点折线图

  • stock_line(data=None, x=None, y=None, notebook=True, title=None)

参数与前面画图函数相同

plot.stock_line(df.close)

对比折线图

df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'plot.line(df[['close','ma20']],title=title)
#个股资金流plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
'澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')

柱状图

  • bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')

参数说明: 'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标, barmode='group'表示对比条形图,默认。为'relative', 如qs.bar(dd['总市值'],log_x=True,orientation='h')。

#计算收益率data=index_data.copy().dropna()
rets=data/data.shift(1)-1rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambdax: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'plot.bar(rets,title=title)

基于pyecharts画柱状图

  • chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_bar(rets,title=title,zoom=True)

纵向柱状图

  • chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe

plot.chart_inv_bar(rets,title=title,zoom=True)

散点图

  • scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)

参数说明: color根据不同类型显示不同颜色; size根据值大小显示散点图的大小; trend='ols'添加回归拟合线; marginal_x='violin',添加小提琴图; marginal_y= 'box',添加箱线图。

data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')
data=qs.get_data('晓程科技')
#计算收益率data['ret']=data.close/data.close.shift(1)-1data['weight']=data['ret'].abs()
#对换手率分类data.loc[data.turnover_rate>20,'rr']='crazy'data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'data.loc[data.turnover_rate<5,'rr']='low'data.dropna(inplace=True)
#plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')

饼图

  • pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)

data为dataframe数据,value; hole数值0-1,显示中间空心; legend=True显示图例,默认不显示。

实例:个股主营业务占比可视化

code='晓程科技'df=qs.main_business(code)
c1=df['报告期']=='2022中期'c2=df['分类方向']=='按产品分'df=df[c1&c2]
df
#plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

基于pyecharts画饼图

  • chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)

参数与前面相同

plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')

统计分布图

直方图

  • hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group', histnorm=None)

histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。

#1:'percent',2:'probability',3:'density',4:'probability density'code='晓程科技'data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')

概率密度图

  • hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7)):

直方图默认统计的是观测数,可以进行统计变化,设置stat参数。 stat可选参数:count:观测数(默认); frequency:频数;density:密度;probability:概率; kde=True表示添加核密度曲线。

其他参数与前面相同

stat可选参数count:观测数(默认);frequency:频数;density密度;probability:概率plot.hist_kde(data.close,stat='probability')

箱线图

  • box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)

参数与前面相类似。

index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())
#获取面板数据dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')
plot.box(dd,y='name',x='close',color='name',orientation='h')

小提琴图

  • violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)
plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')
plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')
plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')

热力图

  • chart_heatmap(x, y, v, title=None, notebook=True)
sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambdax: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) foriinrange(2011,2022)]
y=[str(i)+'月'foriinrange(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] foriinrange(11) forjinrange(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')
plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')

地图

  • chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)
df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambdas:s[:-2] ifs.endswith('板块') elses)
df.head()
#地域板块最新价格指数plot.chart_map(df,x='名称',y='最新')

词云图

txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式txt_list=''.join(list(txt.content.apply(lambdas:str(s))))
#使用jieba处理分词并转为词云格式数据c_data=plot.cloud_data(txt_list)
#画词云图plot.chart_wordcloud(c_data)

About

qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略backtest)模块。 qstock将为用户提供简洁的数据接口和规整化后的金融市场数据。可视化模块为用户提供基于web的交互图形的简单接口; 选股模块提供了同花顺的选股数据和自定义选股,包括RPS、MM趋势、财务指标、资金流模型等; 回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 关注“Python金融量化“微信公众号,获取更多应用信息。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages