一、聚宽数据
1、聚宽数据
1.在聚宽数据这个页面可以看到聚宽平台集成好的各大类数据,如下图,点击可以查看详情与用法
2.但实际上可能有些数据要在API文档里才比较容易能找到,比如龙虎榜数据等。这时用ctrl+f进行网页搜索可以快速搜索需要的数据。
二、几种常用数据的取用方法
1、获取指数成分股
- 成分股指数是指从指数所涵盖的全部股票中选取一部分较有代表性的股票作为指数样本,称为指数的成份股,计算时只把所选取的成份股纳入指数计算范围。
- 深圳证券交易所成分股指数,就是从深圳证券交易所全部上市股票中选取40种,计算得出的一个综合性成份股指数。通过这个指数,可以近似地反映出全部上市股票的价格走势。
- 上海证券交易所的上证180指数是上海证券交易所的上证成份股指数。
- 比较常见的指数有上证指数、深证综指、创业板指、沪深300指数、中证500指数、上证50指数等。可以在数据-指数数据-指数列表中找到聚宽支持的指数及其指数代码。同样要善用ctrl+f进行搜索。
- 获取指数成分股需要用到的API为get_index_stocks
-
get_index_stocks(index_symbol, date=None)
获取一个指数给定日期在平台可交易的成分股列表,请点击指数列表查看指数信息
参数
- index_symbol: 指数代码
- date: 查询日期, 一个字符串(格式类似\'2015-10-15\')或者datetime.date/datetime.datetime对象, 可以是None, 使用默认日期. 这个默认日期在回测和研究模块上有点差别:
- 回测模块: 默认值会随着回测日期变化而变化, 等于context.current_dt
- 研究模块: 默认是今天
返回 返回股票代码的list
示例
# 获取所有沪深300的股票
stocks = get_index_stocks(\'000300.XSHG\')
log.info(stocks)
# 获取20180301时,上证50指数(000016.XSHG)成分股 t=get_index_stocks("000016.XSHG","2018-03-01") print(t[0]) print(t) # 打印日志如下。股票代码在list中被打印出来的是unicode编码字符串 # 600000.XSHG # [u\'600000.XSHG\', u\'600016.XSHG\', u\'600019.XSHG\', u\'600028.XSHG\', u\'600029.XSHG\', u\'600030.XSHG\', u\'600036.XSHG\', u\'600048.XSHG\', u\'600050.XSHG\', u\'600104.XSHG\', u\'600111.XSHG\', u\'600309.XSHG\', u\'600340.XSHG\', u\'600518.XSHG\', u\'600519.XSHG\', u\'600547.XSHG\', u\'600606.XSHG\', u\'600837.XSHG\', u\'600887.XSHG\', u\'600919.XSHG\', u\'600958.XSHG\', u\'600999.XSHG\', u\'601006.XSHG\', u\'601088.XSHG\', u\'601166.XSHG\', u\'601169.XSHG\', u\'601186.XSHG\', u\'601211.XSHG\', u\'601229.XSHG\', u\'601288.XSHG\', u\'601318.XSHG\', u\'601328.XSHG\', u\'601336.XSHG\', u\'601390.XSHG\', u\'601398.XSHG\', u\'601601.XSHG\', u\'601628.XSHG\', u\'601668.XSHG\', u\'601669.XSHG\', u\'601688.XSHG\', u\'601766.XSHG\', u\'601800.XSHG\', u\'601818.XSHG\', u\'601857.XSHG\', u\'601878.XSHG\', u\'601881.XSHG\', u\'601985.XSHG\', u\'601988.XSHG\', u\'601989.XSHG\', u\'603993.XSHG\']
2、获取股票财务数据
-
股票财务数据这里是指发股票的公司发布的财务报表中的数据。可以在聚宽数据-股票财务数据查看数据详情。
-
财务报表简称财报,是用来向股东汇报企业经营情况的,上市公司必须按季度公布财报,一年有四季所以财报依发布次序一季报、半年报(也称中报)、三季报、年报,而具体的发布日期在一定期限内即可并非固定,年报要求年度结束四个月内披露,半年报是上半年结束后两个月内,一季报与三季报是季度结束后一个月内。特别的是像总市值、市盈率这种跟股价挂钩的市值数据是每天更新的。
- 获取股票财务数据需要用到的API为get_fundamentals。这个语句的用法较为复杂,所以文档还是要看的。
1.get_fundamentals方法介绍
get_fundamentals(query_object, date=None, statDate=None)
查询财务数据,详细的数据字段描述请点击财务数据文档查看
date和statDate参数只能传入一个:
- 传入date时, 查询指定日期date收盘后所能看到的最近(对市值表来说, 最近一天, 对其他表来说, 最近一个季度)的数据, 我们会查找上市公司在这个日期之前(包括此日期)发布的数据, 不会有未来函数.
- 传入statDate时, 查询 statDate 指定的季度或者年份的财务数据. 注意:
- 由于公司发布财报不及时, 一般是看不到当季度或年份的财务报表的, 回测中使用这个数据可能会有未来函数, 请注意规避.
- 由于估值表每天更新, 当按季度或者年份查询时, 返回季度或者年份最后一天的数据
- 由于“资产负债数据”这个表是存量性质的, 查询年度数据是返回第四季度的数据。
- 银行业、券商、保险专项数据只有年报数据,需传入statDate参数,当传入 date 参数 或 statDate 传入季度时返回空,请自行避免未来函数。
当 date 和 statDate 都不传入时, 相当于使用 date 参数, date 的默认值下面会描述.
参数
- query_object: 一个sqlalchemy.orm.query.Query对象, 可以通过全局的 query 函数获取 Query 对象,Query对象的简单使用教程
- date: 查询日期, 一个字符串(格式类似\'2015-10-15\')或者[datetime.date]/[datetime.datetime]对象, 可以是None, 使用默认日期. 这个默认日期在回测和研究模块上有点差别:
- 回测模块: 默认值会随着回测日期变化而变化, 等于 context.current_dt 的前一天(实际生活中我们只能看到前一天的财报和市值数据, 所以要用前一天)
- 研究模块: 使用平台财务数据的最新日期, 一般是昨天. 如果传入的 date 不是交易日, 则使用这个日期之前的最近的一个交易日
- statDate: 财报统计的季度或者年份, 一个字符串, 有两种格式:
- 季度: 格式是: 年 + \'q\' + 季度序号, 例如: \'2015q1\', \'2013q4\'.
- 年份: 格式就是年份的数字, 例如: \'2015\', \'2016\'.
返回 返回一个 [pandas.DataFrame], 每一行对应数据库返回的每一行(可能是几个表的联合查询结果的一行), 列索引是你查询的所有字段 注意:
- 为了防止返回数据量过大, 我们每次最多返回10000行
- 当相关股票上市前、退市后,财务数据返回各字段为空
2.财务数据文档
市值数据
每天更新
表名: valuation
列名 | 列的含义 | 解释 | 公式 |
---|---|---|---|
code | 股票代码 | 带后缀.XSHE/.XSHG | |
day | 日期 | 取数据的日期 | |
capitalization | 总股本(万股) | 公司已发行的普通股股份总数(包含A股,B股和H股的总股本) | |
circulating_cap | 流通股本(万股) | 公司已发行的境内上市流通、以人民币兑换的股份总数(A股市场的流通股本) | |
market_cap | 总市值(亿元) | 总市值是指在某特定的时间内,交易所挂牌交易全部证券(以总股本计)按当时价格计算的证券总值 | A股合计 * A股收盘价 + B股合计 * B股收盘价 * 外汇汇率 + H股合计 * H股收盘价 外汇汇率 + (总股本 - A股合计 - B股合计 - H股合计) 每股净资产 |
circulating_market_cap | 流通市值(亿元) | 流通市值指在某特定时间内当时可交易的流通股股数乘以当时股价得出的流通股票总价值。 | A股市场的收盘价*A股市场的流通股数 |
turnover_ratio | 换手率(%) | 指在一定时间内市场中股票转手买卖的频率,是反映股票流通性强弱的指标之一。 | 换手率=[指定交易日成交量(手)100/截至该日股票的*流通股本(股)]100% |
pe_ratio | 市盈率(PE, TTM) | 每股市价为每股收益的倍数,反映投资人对每元净利润所愿支付的价格,用来估计股票的投资报酬和风险 | 市盈率(PE,TTM)=(股票在指定交易日期的收盘价 * 当日人民币外汇挂牌价 * 截止当日公司总股本)/归属于母公司股东的净利润TTM。 |
pe_ratio_lyr | 市盈率(PE) | 以上一年度每股盈利计算的静态市盈率. 股价/最近年度报告EPS | 市盈率(PE)=(股票在指定交易日期的收盘价 * 当日人民币外汇牌价 * 截至当日公司总股本)/归属母公司股东的净利润。 |
pb_ratio | 市净率(PB) | 每股股价与每股净资产的比率 | 市净率=(股票在指定交易日期的收盘价 * 当日人民币外汇牌价 * 截至当日公司总股本)/归属母公司股东的权益。 |
ps_ratio | 市销率(PS, TTM) | 市销率为股票价格与每股销售收入之比,市销率越小,通常被认为投资价值越高。 | 市销率TTM=(股票在指定交易日期的收盘价 * 当日人民币外汇牌价 * 截至当日公司总股本)/营业总收入TTM |
pcf_ratio | 市现率(PCF, 现金净流量TTM) | 每股市价为每股现金净流量的倍数 | 市现率=(股票在指定交易日期的收盘价 * 当日人民币外汇牌价 * 截至当日公司总股本)/现金及现金等价物净增加额TTM |
3.示例
# 1.查询\'000001.XSHE\'的所有市值数据, 时间是2015-10-15 q = query( valuation ).filter( valuation.code == \'000001.XSHE\' ) df = get_fundamentals(q, \'2015-10-15\') # 打印出总市值 log.info(df[\'market_cap\'][0]) # 2.获取多只股票在某一日期的市值, 利润 df = get_fundamentals(query( valuation, income ).filter( # 这里不能使用 in 操作, 要使用in_()函数 valuation.code.in_([\'000001.XSHE\', \'600000.XSHG\']) ), date=\'2015-10-15\') # 3.选出所有的总市值大于1000亿元, 市盈率小于10, 营业总收入大于200亿元的股票 df = get_fundamentals(query( valuation.code, valuation.market_cap, valuation.pe_ratio, income.total_operating_revenue ).filter( valuation.market_cap > 1000, valuation.pe_ratio < 10, income.total_operating_revenue > 2e10 ).order_by( # 按市值降序排列 valuation.market_cap.desc() ).limit( # 最多返回100个 100 ), date=\'2015-10-15\') # 4.使用 or_ 函数: 查询总市值大于1000亿元 **或者** 市盈率小于10的股票 from sqlalchemy.sql.expression import or_ get_fundamentals(query( valuation.code ).filter( or_( valuation.market_cap > 1000, valuation.pe_ratio < 10 ) )) # 5.查询平安银行2014年四个季度的季报, 放到数组中 q = query( income.statDate, income.code, income.basic_eps, balance.cash_equivalents, cash_flow.goods_sale_and_service_render_cash ).filter( income.code == \'000001.XSHE\', ) rets = [get_fundamentals(q, statDate=\'2014q\'+str(i)) for i in range(1, 5)] # 6.查询平安银行2014年的年报 q = query( income.statDate, income.code, income.basic_eps, cash_flow.goods_sale_and_service_render_cash ).filter( income.code == \'000001.XSHE\', ) ret = get_fundamentals(q, statDate=\'2014\')