[量化学堂-新手专区]BigQuant数据API详解

数据
api
标签: #<Tag:0x00007f5bff61cf08> #<Tag:0x00007f5bff61cda0>

(iQuant) #1

导语:数据是开发策略的原料,知道怎么获取数据方能更为高效地开发策略!


作者: bigquant
阅读时间:15分钟
本文由BigQuant宽客学院推出,难度标签:☆☆

数据为什么重要?

BigQuant是一个人工智能量化投资平台,类似于一个实验室,用户可以在实验室里发挥自己的聪明才智开发策略。计算机界有一个很有名的说法,叫(Garbage In Garbage Out),翻译过来就是“垃圾进、垃圾出”。因此真实准确而全面的金融数据是开发优秀策略的重要前提。

BigQuant有什么数据?

BigQuant有丰富并且高质量的金融数据,包括基础数据、历史数据、财报数据、特色因子数据等。详细可以参考 文档教程数据 部分

如何获取数据?

数据API是调用数据的接口,目的是快速、便捷、高效地获取数据。在BigQuant的策略平台上,通过数据API我们可以将服务器上的数据拉取到自己的策略平台上,有了数据,相当于拿到“原料”,就可以自由发挥“厨艺”啦。

数据API举例

BigQuant数据API在设计之初就秉持对用户友好的理念,附件将详细介绍常用的数据API,欢迎大家 克隆研究 。


   本文由BigQuant宽客大学推出,版权归BigQuant所有,转载请注明出处。

附件:BigQuant数据API举例

克隆策略

获取基础数据

获取指数数据——以沪深300举例

In [18]:
data = D.history_data(instruments=['000300.SHA'], start_date='2017-01-01', end_date='2017-04-07',
               fields=['open', 'high', 'low', 'close', 'volume', 'amount'])
data.head() # 查看前6行数据
Out[18]:
open close low volume date high amount instrument
0 3313.953369 3342.227295 3313.953369 8656789600 2017-01-03 3345.262939 8.761277e+10 000300.SHA
1 3340.557617 3368.311768 3338.152588 9005082700 2017-01-04 3369.565918 9.801436e+10 000300.SHA
2 3368.340088 3367.789307 3361.461914 8833635700 2017-01-05 3373.411865 9.118934e+10 000300.SHA
3 3366.852295 3347.666504 3346.891357 8745911400 2017-01-06 3368.870605 9.107226e+10 000300.SHA
4 3345.748291 3363.901367 3344.347168 8370794200 2017-01-09 3366.221924 8.791612e+10 000300.SHA

获取交易日历——获取一段日期内的交易日历

In [19]:
date = D.trading_days(start_date='2016-01-01', end_date='2016-12-01')
date[:10] # 只打印前10个
Out[19]:
date
6125 2016-01-04
6126 2016-01-05
6127 2016-01-06
6128 2016-01-07
6129 2016-01-08
6130 2016-01-11
6131 2016-01-12
6132 2016-01-13
6133 2016-01-14
6134 2016-01-15

获取股票代码——获取一段时间内上市股票的代码列表

In [20]:
symbols = D.instruments(start_date='2015-01-01', end_date='2016-01-01')
symbols[:10] # 只看前10个
Out[20]:
['000001.SZA',
 '000002.SZA',
 '000004.SZA',
 '000005.SZA',
 '000006.SZA',
 '000007.SZA',
 '000008.SZA',
 '000009.SZA',
 '000010.SZA',
 '000011.SZA']

获取历史数据——以贵州茅台举例

获取贵州茅台代码、证券名称、上市日期、上市板、公司名称、公司成立日期、公司省份

In [21]:
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', fields=['name','list_date','list_board','company_name','company_found_date', 'company_province'])
Out[21]:
name company_province list_board date company_found_date company_name list_date instrument
0 贵州茅台 贵州省 主板 2016-01-04 1999-11-20 贵州茅台酒股份有限公司 2001-08-27 600519.SHA
1 贵州茅台 贵州省 主板 2016-01-05 1999-11-20 贵州茅台酒股份有限公司 2001-08-27 600519.SHA
2 贵州茅台 贵州省 主板 2016-01-06 1999-11-20 贵州茅台酒股份有限公司 2001-08-27 600519.SHA
3 贵州茅台 贵州省 主板 2016-01-07 1999-11-20 贵州茅台酒股份有限公司 2001-08-27 600519.SHA
4 贵州茅台 贵州省 主板 2016-01-08 1999-11-20 贵州茅台酒股份有限公司 2001-08-27 600519.SHA

获取贵州茅台行情数据

In [22]:
# 真实价格
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', 
               fields=['open','high','low','close','amount','volume'],price_type='original')
Out[22]:
open close low volume date high amount instrument
0 218.000000 210.020004 209.990005 1734968 2016-01-04 218.000000 371909824.0 600519.SHA
1 210.000000 212.820007 207.509995 3190891 2016-01-05 213.970001 672596352.0 600519.SHA
2 212.779999 212.179993 209.300003 2376090 2016-01-06 213.660004 502483552.0 600519.SHA
3 208.990005 202.229996 200.029999 814868 2016-01-07 208.990005 167829920.0 600519.SHA
4 204.169998 204.630005 200.000000 4451009 2016-01-08 208.000000 911812864.0 600519.SHA
In [23]:
# 前复权价格
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', 
               fields=['open','high','low','close','amount','volume'],price_type='forward_adjusted')
Out[23]:
open close low volume date high amount instrument
0 210.210007 202.520004 202.490005 1734968 2016-01-04 210.210007 371909824.0 600519.SHA
1 202.500000 205.220001 200.100006 3190891 2016-01-05 206.330002 672596352.0 600519.SHA
2 205.179993 204.600006 201.830002 2376090 2016-01-06 206.029999 502483552.0 600519.SHA
3 201.529999 195.009995 192.889999 814868 2016-01-07 201.529999 167829920.0 600519.SHA
4 196.880005 197.320007 192.860001 4451009 2016-01-08 200.570007 911812864.0 600519.SHA
In [24]:
# 后复权价格
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', 
               fields=['open','high','low','close','amount','volume'],price_type='backward_adjusted')
Out[24]:
open close low volume date high amount instrument
0 1494.807861 1440.089722 1439.884033 1734968 2016-01-04 1494.807861 371909824.0 600519.SHA
1 1439.952515 1459.289062 1422.878906 3190891 2016-01-05 1467.174561 672596352.0 600519.SHA
2 1459.014771 1454.900635 1435.152710 2376090 2016-01-06 1465.048828 502483552.0 600519.SHA
3 1433.027100 1386.674316 1371.589111 814868 2016-01-07 1433.027100 167829920.0 600519.SHA
4 1399.976685 1403.130981 1371.383423 4451009 2016-01-08 1426.238770 911812864.0 600519.SHA

获取期货合约数据

In [4]:
# 以螺纹钢1709合约为例
D.history_data('RB1709.SHF', start_date='2016-10-01', end_date='2016-10-15', fields=['open','low','high','close','volume'])
Out[4]:
close low open volume instrument high date
0 2323.0 2259.0 2282.0 226 RB1709.SHF 2345.0 2016-10-10
1 2366.0 2311.0 2330.0 272 RB1709.SHF 2377.0 2016-10-11
2 2376.0 2354.0 2385.0 340 RB1709.SHF 2385.0 2016-10-12
3 2380.0 2366.0 2373.0 226 RB1709.SHF 2395.0 2016-10-13
4 2427.0 2353.0 2377.0 214 RB1709.SHF 2433.0 2016-10-14

获取贵州茅台交易行情数据,包括开盘价、最低价、最高价、收盘价、复权因子、成交量、换手率

In [25]:
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', fields=['open','low','high','close','adjust_factor','volume','turn'])
Out[25]:
adjust_factor turn open close low volume date high instrument
0 6.856917 0.138113 1494.807861 1440.089722 1439.884033 1734968 2016-01-04 1494.807861 600519.SHA
1 6.856917 0.254012 1439.952515 1459.289062 1422.878906 3190891 2016-01-05 1467.174561 600519.SHA
2 6.856917 0.189149 1459.014771 1454.900635 1435.152710 2376090 2016-01-06 1465.048828 600519.SHA
3 6.856917 0.064868 1433.027100 1386.674316 1371.589111 814868 2016-01-07 1433.027100 600519.SHA
4 6.856917 0.354324 1399.976685 1403.130981 1371.383423 4451009 2016-01-08 1426.238770 600519.SHA

获取贵州茅台交易状态数据,比如是否停牌,停牌类型,停牌原因,ST状态,股价在收盘时的涨跌停状态

In [26]:
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', fields=['suspended','suspend_type','suspend_reason','st_status','price_limit_status'])
Out[26]:
price_limit_status date st_status instrument suspend_reason suspend_type suspended
0 2 2016-01-04 0 600519.SHA False
1 2 2016-01-05 0 600519.SHA False
2 2 2016-01-06 0 600519.SHA False
3 2 2016-01-07 0 600519.SHA False
4 2 2016-01-08 0 600519.SHA False

获取贵州茅台估值数据,总市值、流通市值、市盈率、市销率.

注:ttm是trailing twelve month的简称,表示过去12个月,pe_ttm表示过去12个月以来的市盈率.

In [27]:
D.history_data('600519.SHA', start_date='2016-01-01', end_date='2016-01-10', fields=['market_cap','market_cap_float','pe_ttm','ps_ttm'])
Out[27]:
pe_ttm market_cap ps_ttm market_cap_float date instrument
0 16.405994 2.638267e+11 7.993675 2.638267e+11 2016-01-04 600519.SHA
1 16.624722 2.673440e+11 8.100246 2.673440e+11 2016-01-05 600519.SHA
2 16.574726 2.665401e+11 8.075888 2.665401e+11 2016-01-06 600519.SHA
3 15.797469 2.540409e+11 7.697176 2.540409e+11 2016-01-07 600519.SHA
4 15.984948 2.570558e+11 7.788523 2.570558e+11 2016-01-08 600519.SHA

获取财报数据——以贵州茅台举例

获取财报发布时间信息数据,比如发布日期、财报类型、财报对应的年份、财报对应的季度

注:财报类型如果为20131231表示13年年报,20140331表示14年一季报

In [28]:
D.financial_statements('600519.SHA', start_date='2014-01-01', end_date='2016-01-01', fields=['fs_publish_date','fs_quarter','fs_quarter_year','fs_quarter_index'])
Out[28]:
fs_publish_date fs_quarter fs_quarter_year fs_quarter_index
0 2014-03-25 20131231 2013 4
1 2014-04-25 20140331 2014 1
2 2014-08-29 20140630 2014 2
3 2014-10-30 20140930 2014 3
4 2015-04-21 20141231 2014 4
5 2015-04-21 20150331 2015 1
6 2015-08-28 20150630 2015 2
7 2015-10-23 20150930 2015 3

获取贵州茅台财报类型、净资产收益率 (TTM)、总资产报酬率 (TTM)、销售净利率 (TTM)、销售毛利率 (TTM)

In [29]:
D.financial_statements('600519.SHA', start_date='2014-01-01', end_date='2016-01-01', fields=['fs_quarter','fs_roe_ttm','fs_roa_ttm','fs_net_profit_margin_ttm','fs_gross_profit_margin_ttm']) 
Out[29]:
fs_quarter fs_roe_ttm fs_roa_ttm fs_net_profit_margin_ttm fs_gross_profit_margin_ttm
0 20131231 35.513500 37.874298 51.629902 92.904900
1 20140331 32.930901 37.993698 51.735401 92.886803
2 20140630 33.391201 38.548801 51.448601 92.772400
3 20140930 30.282301 35.400101 51.062599 92.358200
4 20141231 28.728600 33.030701 51.527901 92.593399
5 20150331 27.715099 32.959099 51.868999 92.618500
6 20150630 26.112600 31.407101 51.374100 92.380203
7 20150930 26.869900 29.377600 51.570301 92.448601

获取特色因子数据——以贵州茅台举例

获取量价因子

注:$open\_\$i$中的$\$$符号表示该因子可以回溯,没有$\$$符号表示该因子不能回溯。比如$open\_\$i$中指明了$i$取值范围是[0 .. 20],$i$为0表示当天的因子值,$i=1$表示前1天的因子值,以此类推。

In [30]:
D.features('600519.SHA', start_date='2015-01-01', end_date='2015-01-12', fields=['close_0', 'close_1','volume_0','volume_2'])
Out[30]:
close_1 volume_0 close_0 volume_2 date instrument
0 1161.448608 9451517 1240.462891 5617110.0 2015-01-05 600519.SHA
1 1240.462891 5502001 1211.736084 4626936.0 2015-01-06 600519.SHA
2 1211.736084 5479784 1181.784180 9451517.0 2015-01-07 600519.SHA
3 1181.784180 4052530 1174.556519 5502001.0 2015-01-08 600519.SHA
4 1174.556519 5398220 1165.675049 5479784.0 2015-01-09 600519.SHA
5 1165.675049 4991459 1141.909424 4052530.0 2015-01-12 600519.SHA

获取排名因子,以收益率和平均交易额为例

注:涉及到排名的因子,将该因子在全市场所有股票进行升序排序,排名因子=从小到大排名序号/总数

In [31]:
D.features('600519.SHA', start_date='2015-01-01', end_date='2015-01-12', fields=['return_5', 'rank_return_5','avg_amount_5','rank_avg_amount_5'])
Out[31]:
date instrument avg_amount_5 return_5 rank_return_5 rank_avg_amount_5
0 2015-01-05 600519.SHA 1.178067e+09 1.106304 0.889652 0.957492
1 2015-01-06 600519.SHA 1.226070e+09 1.064575 0.846220 0.955756
2 2015-01-07 600519.SHA 1.271168e+09 1.028629 0.722246 0.955889
3 2015-01-08 600519.SHA 1.121106e+09 1.045128 0.744854 0.952463
4 2015-01-09 600519.SHA 1.120563e+09 1.018572 0.421165 0.952116
5 2015-01-12 600519.SHA 1.131073e+09 0.983177 0.397002 0.951178

获取财报特色因子,以赢利因子为例

注:财报特色因子后缀为$\_0$,表明该因子不取回溯值,直接使用当期值进行实验

In [32]:
D.features('600519.SHA', start_date='2015-01-01', end_date='2015-01-12', fields=['fs_roe_ttm_0', 'rank_fs_roe_ttm_0'])
Out[32]:
fs_roe_ttm_0 date instrument rank_fs_roe_ttm_0
0 30.282301 2015-01-05 600519.SHA 0.985127
1 30.282301 2015-01-06 600519.SHA 0.985120
2 30.282301 2015-01-07 600519.SHA 0.985153
3 30.282301 2015-01-08 600519.SHA 0.986008
4 30.282301 2015-01-09 600519.SHA 0.986002
5 30.282301 2015-01-12 600519.SHA 0.985977

获取技术因子,以移动平均值为例

In [33]:
D.features('600519.SHA', start_date='2015-01-01', end_date='2015-01-12', fields=['ta_sma_5_0', 'ta_sma_20_0'])
Out[33]:
ta_sma_5_0 date instrument ta_sma_20_0
0 1163.812988 2015-01-05 600519.SHA 1116.284912
1 1176.381714 2015-01-06 600519.SHA 1124.526367
2 1187.970459 2015-01-07 600519.SHA 1130.642334
3 1193.997681 2015-01-08 600519.SHA 1136.430542
4 1194.842896 2015-01-09 600519.SHA 1139.612549
5 1175.132202 2015-01-12 600519.SHA 1142.840454

获取港股数据——以腾讯控股举例

获取腾讯控股代码、证券名称、上市日期、上市板、公司名称、公司成立日期、公司省份

In [8]:
hk_df = D.history_data(instruments=['0700.HKEX'],start_date='2017-01-01',end_date='2017-01-10',
                       fields=['name','list_date','list_board','company_name','company_found_date', 'company_province'])

hk_df = hk_df[['instrument','name','company_province','list_board','company_found_date','company_name','list_date']]

hk_df
Out[8]:
instrument name company_province list_board company_found_date company_name list_date
0 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16
1 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16
2 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16
3 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16
4 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16
5 0700.HKEX 腾讯控股 广东省 主板 1999-11-23 腾讯控股有限公司 2004-06-16

获取腾讯控股行情数据

In [7]:
hk_df = D.history_data(instruments=['0700.HKEX'],start_date='2017-01-01',end_date='2017-01-10',
                      fields=['open','high','low','close','amount','volume'])
hk_df = hk_df[['date','instrument','open','close','high','low','date','volume','amount']]
hk_df
Out[7]:
date instrument open close high low date volume amount
0 2017-01-03 0700.HKEX 988.038635 995.396362 1004.330750 988.038635 2017-01-03 9637272 1.825299e+09
1 2017-01-04 0700.HKEX 1000.651855 993.294128 1001.177429 988.564148 2017-01-04 11411490 2.156772e+09
2 2017-01-05 0700.HKEX 1003.805176 1015.892883 1020.622864 1002.228516 2017-01-05 20543005 3.970963e+09
3 2017-01-06 0700.HKEX 1031.133911 1025.352783 1034.287231 1023.250610 2017-01-06 20077760 3.917171e+09
4 2017-01-09 0700.HKEX 1033.761719 1027.980591 1034.812744 1025.878418 2017-01-09 13605277 2.661192e+09
5 2017-01-10 0700.HKEX 1037.966064 1040.593872 1040.593872 1030.608398 2017-01-10 15628780 3.094499e+09

小结:如果您阅读到这里了,那我们非常感谢您,祝你在BigQuant学习愉快!BigQuant在设计数据API接口的时候,力求做到简约、通用,希望您开发策略更加得心应手。



Pandas基础操作技能get! 强烈推荐!
社区干货与精选整理(持续更新中...)
[量化学堂-金融市场]跌了这么多,创业板可以买了吗?
如何用BigQuant查询某一公司的流动资产、流动负债等数据
【宽客学院】如何选出符合一定条件的股票
策略研究常用功能
做量化你需要知道的那些术语!(持续更新)
(lostdays) #2

请问有港股数据么


[功能需求] 港股数据
(iQuant) #3

您好,港股数据我们正在构建


(henhenhahi) #4

GET!


(jiangxiaoyu610) #5

您好,请问文中调取的贵州茅台在2016-01-04到2016-01-08期间的开高低收价格都是一千四或一千三左右,请问这个价格是经过什么处理吗?当时的价格不应该是在二三百左右吗?


(神龙斗士) #6

这是复权价格,参考:

https://community.bigquant.com/t/回测看到的股票行情数据和实际不一样?/1133/2


(jiangxiaoyu610) #7

我明白了,非常感谢


(zuo) #8

很有用,收藏了


(czc) #9

我尝试抓900多个股票的数据,返回了头尾各30支股票的数据,中间用省略号带过了。请问如何看到中间被省略的数据?


(iQuant) #10
克隆策略

假设我们有这样的数据,数据量很大

In [17]:
df = D.history_data(D.instruments(),'2017-01-01','2018-01-01',['close'])
len(df)
Out[17]:
799063
In [ ]:
可以通过下面的循环查看每一条数据因为只是作为例子所以我加了个循环跳出你要看全部数据的话不用跳出break就行
In [12]:
count = 0
for j in df.index:
    count+=1
    print(df.ix[j].instrument,df.ix[j].close,df.ix[j].date)
    if count==10:
        break
000001.SZA 959.586 2017-01-03 00:00:00
000002.SZA 2752.58 2017-01-03 00:00:00
000004.SZA 180.639 2017-01-03 00:00:00
000005.SZA 63.2977 2017-01-03 00:00:00
000006.SZA 314.765 2017-01-03 00:00:00
000007.SZA 144.103 2017-01-03 00:00:00
000008.SZA 205.675 2017-01-03 00:00:00
000009.SZA 76.5511 2017-01-03 00:00:00
000010.SZA 83.9337 2017-01-03 00:00:00
000011.SZA 65.4163 2017-01-03 00:00:00

但是为什么要这样查看数据呢?可以通过索引啊,比如我先看贵州茅台的数据

In [16]:
df[df['instrument'] == '600519.SHA'].head()
Out[16]:
instrument close date
2292 600519.SHA 2343.583984 2017-01-03
5368 600519.SHA 2465.120361 2017-01-04
8447 600519.SHA 2428.904785 2017-01-05
11530 600519.SHA 2457.064697 2017-01-06
14614 600519.SHA 2441.303467 2017-01-09

不知道有没有解答你的问题,随时交流哈~


(WoodSun) #11

请问历史数据(history_data),财报数据(financial_statements),因子库(features)都有的一些值为什么会不一样呀?比如下面我查的这些,同一支股票用历史数据和因子库查的roe一样,却和财报数据的怎么对应不上


(小Q) #12

首先解释下,第二个图用的是D.finance_statement这个接口,获取的是财报原始数据,我们知道财务报表数据是一年发布四次,因此数据是离散的,即一年只有四条数据。

D.history_data和D.features这两个接口获取的是财报数据,是按交易日排列的,具体数值是当天能够获得的最新财报数据,比如今天是8月4日,如果半年报没有公布的话,那么填充的数据就是一季度财报的具体数值。

我们再看这个图:


可以发现,D.history_data获取的数据其实就是按前面财报公布的数据进行填充的。
2015年1月5日到12日,由于最新的财报是14年三季度报,因此数据采取的是20140930这个fa_quarter的数据。

之所以这样处理,是为了我们在研究时获取的是当下能够获得的最新数据。


(WoodSun) #13

多谢啦,这个倒没有想到


(camel999) #14

请问 features 怎么显示前复权的数据? 谢谢!
如下同一天的 open 数值 不一样?

symbols = D.features(‘600600.SHA’, start_date=‘2018-05-01’, end_date=‘2018-06-12’, fields=[‘open_0’,‘close_0’, ‘close_1’,‘volume_0’,‘volume_2’] )

symbols1 = D.history_data(‘600600.SHA’, start_date=‘2018-05-01’, end_date=‘2018-06-12’, fields=[‘open’,‘high’,‘low’,‘close’,‘amount’,‘volume’],price_type=‘forward_adjusted’)