一、聚寬數據
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')