如何使用量化数据
简单示例
获取某只股票2019年01月01日至2019年01月10日的市盈率
from xquant import *
jsonstr = {
# 用户名与令牌,由用户填写
"user": "SDK-User",
"token": "SDK-Toke",
# 登录地址
"login_endpoint": "prx.upchina.com:443"
}
# 使用配置初始化数据模块
data_api = xquant.create_data(jsonstr)
# 下载数据,必须先下载数据,才能调用数据接口,否则会返回空结果集
# 下载列表用','分割,对于因子,下载项就是因子名, 对于K线数据, 下载项是K线类型和市场
# 因子:PE,PB,ROE_TTM
# K线: BAR_DAY_1_CS A股日K, BAR_DAY_1_IDX 指数日k, BAR_DAY_1_CF 期货日k, BAR_DAY_1_PLA 板块日k, BAR_MIN_1_CS A股1分钟k
data_api.sync_data('PE,PB,ROE_TTM,BAR_DAY_1_CS,BAR_MIN_30_CS', 20190101, 20190110, symbols=['000001.CS','000300.IDX'])
# 取单个因子
df = data_api.get_one_field('PE', symbols=['000001.CS', '000002.CS'], start_date=20190101, end_date=20190110)
print(df)
返回结果:
trade_date 000001.CS 000002.CS
0 20190102 6.804619 7.090760
1 20190103 6.871258 7.141196
2 20190104 7.219263 7.396345
3 20190107 7.211859 7.431947
4 20190108 7.152624 7.417113
5 20190109 7.359947 7.515019
6 20190110 7.478416 7.449748
初始化
初始化是数据调用前必要的准备工作
c++ 和 python 统一使用json
格式的配置
以下是python下的示例配置, python中可以直接把配置写在代码中,方便调试, 正式部署时请使用统一的配置文件,方便维护
jsonstr = {
"params": {
# 同步数据超时数据
"timeout": "300000",
# 缓存数据存放的目录
"cache_dir": "local_cache"
},
"login_endpoint": "prx.upchina.com:443",
"user": "SDK-User",
"token": "SDK-Toke"
}
数据查询函数
同步数据
同步指定时间段的数据-sync_data
必须先下载数据,才能调用数据接口,否则会返回空结果集
函数原型:
sync_data(table, start_date, end_date, symbols=[])
参数:
参数 | 类型 | 说明 |
---|---|---|
table | list | 数据存储的表名,因子数据使用因子名作为表名, k线数据按市场和频率组合,例如:A股日K BAR_DAY_1_CS |
start_date | int | 开始交易日 ,形式为YYYYMMDD |
end_date | int | 结束交易日 ,形式为YYYYMMDD |
symbols | list | 需要下载的分钟K标的,仅下载分钟有效 |
K线数据的表名
K线频率 | 表名 | |
---|---|---|
BAR_MIN_1 | 1分钟K线 | BAR_MIN_1_CS |
BAR_MIN_5 | 5分钟K线 | BAR_MIN_5_CS |
BAR_MIN_15 | 15分钟K线 | BAR_MIN_15_CS |
BAR_MIN_30 | 30分钟K线 | BAR_MIN_30_CS |
BAR_MIN_60 | 60分钟K线 | BAR_MIN_60_CS |
BAR_DAY_1 | 日K线 | BAR_DAY_1_CS |
备注:对于指数K线数据表名使用 IDX
替换 CS
, 期货K线数据表名使用 CF
替换 CS
, 板块K线数据表名使用 PLA
替换 CS
。
举例:
data_api.sync_data(['FUT_LONG_RANK', 'FUT_SHORT_RANK', 'PE', 'REVENUE', 'PB', 'ROE_TTM', 'NET_PROFIT', 'NP_GROWTH_A', 'BAR_DAY_1_CS'], 20190101, 20190430)
行情数据
获取历史bar数据-get_bars
获取K线数据,调用此接口之前,需要提前下载对应的K线数据,否则返回结果为空。
函数原型:
get_bars(symbols, timespan, start_date=None, end_date=None, count=None, price_mode='pre', fields=None)
参数:
参数 | 类型 | 说明 |
---|---|---|
symbols | str/list | 标的名称,以传字符型或列表传单个标的,以列表类型传一组标的 |
timespan | str | k线类型,支持的K线类型有日K/一分钟K/五分钟K/十五分钟K/三十分钟K/小时K,对应的参数如下: 日K: 1day 一分钟K:1min 五分钟K:5min 十五分钟:15min 三十分钟:30min 小时K:60min |
start_date | int | 开始交易日 ,形式为YYYYMMDD |
end_date | int | 结束交易日 ,形式为YYYYMMDD |
count | int | 指定拉取的条数, 截至到end_date; count 和 start_date 不能同时使用 |
price_mode | str | 单symbol取K线时只用设置复权模式: 前复权:pre 后复权:post 不复权:real |
fields | list | 指定返回的字段,symbols为str默认返回全部,symbols为list类型时可指定返回字段 fields: trade_date time_stop high low open close pre_close settle pre_settle volume turnover total_volume total_turnover position suspend |
返回:DataFrame or dict{DataFrame}
此函数是用于获取数据的函数,若在回测或者模拟交易使用,因为走网络接口实时拉取会导致速度慢。
示例1:
# 获取1只一段时间的前复权日K数据
[In]:
data_api.get_bars('000001.CS', timespan='1day', start_date=20190101, end_date=20190110)
[Out]:
symbol trade_date time_stop high low open close \
0 000001.CS 20190102 2019-01-02 15:00:00 9.42 9.16 9.39 9.19
1 000001.CS 20190103 2019-01-03 15:00:00 9.33 9.15 9.18 9.28
2 000001.CS 20190104 2019-01-04 15:00:00 9.82 9.22 9.24 9.75
3 000001.CS 20190107 2019-01-07 15:00:00 9.85 9.63 9.84 9.74
4 000001.CS 20190108 2019-01-08 15:00:00 9.74 9.62 9.73 9.66
5 000001.CS 20190109 2019-01-09 15:00:00 10.08 9.70 9.74 9.94
6 000001.CS 20190110 2019-01-10 15:00:00 10.20 9.86 9.87 10.10
pre_close settle pre_settle volume turnover total_volume \
0 9.38 0.0 0.0 53938600.0 4.986951e+08 53938600.0
1 9.19 0.0 0.0 41553800.0 3.844577e+08 41553800.0
2 9.28 0.0 0.0 148115900.0 1.422150e+09 148115900.0
3 9.75 0.0 0.0 86568800.0 8.411665e+08 86568800.0
4 9.74 0.0 0.0 40238800.0 3.892478e+08 40238800.0
5 9.66 0.0 0.0 123348600.0 1.229465e+09 123348600.0
6 9.94 0.0 0.0 107181800.0 1.079711e+09 107181800.0
total_turnover position suspend
0 4.986951e+08 0.0 0
1 3.844577e+08 0.0 0
2 1.422150e+09 0.0 0
3 8.411665e+08 0.0 0
4 3.892478e+08 0.0 0
5 1.229465e+09 0.0 0
6 1.079711e+09 0.0 0
示例2:
# 获取多个标的指定指定交易不复权日K线数据
[In]:
data_api.get_bars(['000001.CS', '600000.CS'], timespan='1day', end_date=20190110, count=5, price_mode='real', fields=['open', 'close'])
[Out]:
trade_date 000001.CS 600000.CS
close 2019-01-04 15:00:00 20190104 9.75 9.96
2019-01-07 15:00:00 20190107 9.74 9.98
2019-01-08 15:00:00 20190108 9.66 9.96
2019-01-09 15:00:00 20190109 9.94 9.99
2019-01-10 15:00:00 20190110 10.10 9.96
open 2019-01-04 15:00:00 20190104 9.24 9.73
2019-01-07 15:00:00 20190107 9.84 10.09
2019-01-08 15:00:00 20190108 9.73 10.03
2019-01-09 15:00:00 20190109 9.74 10.06
2019-01-10 15:00:00 20190110 9.87 9.94
示例3:
# 获取指定交易日的n条5分钟k
[In]:
data_api.get_bars(['000001.CS', '600000.CS'], timespan='5min', end_date=20190110, count=5, fields=['open', 'close'])
[Out]:
trade_date 000001.CS 600000.CS
close 2019-01-10 14:40:00 20190110 10.11 9.95
2019-01-10 14:45:00 20190110 10.09 9.95
2019-01-10 14:50:00 20190110 10.10 9.96
2019-01-10 14:55:00 20190110 10.10 9.97
2019-01-10 15:00:00 20190110 10.10 9.96
open 2019-01-10 14:40:00 20190110 10.12 9.94
2019-01-10 14:45:00 20190110 10.10 9.94
2019-01-10 14:50:00 20190110 10.08 9.95
2019-01-10 14:55:00 20190110 10.09 9.96
2019-01-10 15:00:00 20190110 10.09 9.96
因子数据
获取某个因子数值类因子数据-get_one_field
获取股票的基础属性、市值等信息,主要是序列类的数据。数据信息详见财务分析因子,财务数据,股东与股本,估值指标,波动率因子
调用此api
之前需下载所需要调用的因子数据,不然返回结果为空。
函数原型
get_one_field(field, symbols, start_date=None, end_date=None, count=None, strict=False)
参数:
参数 | 类型 | 说明 |
---|---|---|
field | str | 因子 |
symbols | list | 选取的股票列表 |
start_date | int | 指定某个交易日。形式为YYYYMMDD ,可选字段 |
end_date | int | 指定某个交易日。形式为YYYYMMDD。 |
count | int | 交易日数量,可选字段; 基于 end_date 往前推count个交易日 ;和 start_date 字段不可同时使用 |
strict | bool | 严格按报告期对齐,仅季频数据有效 |
返回: DataFrame
trade_date 作为日期列,其它已标的为列名,因子值作为列值
示例1:
# 指定时间前3条因子数据
[In]:
data_api.get_one_field('PE', symbols=['000001.CS', '000002.CS'], end_date=20190110, count=3)
[Out]:
trade_date 000001.CS 000002.CS
0 20190108 7.152624 7.417113
1 20190109 7.359947 7.515019
2 20190110 7.478416 7.449748
示例2:
# 一段时间的因子数据
[In]:
data_api.get_one_field('PE', symbols=['000001.CS', '600000.CS'], start_date=20190101, end_date=20190110)
[Out]:
trade_date 000001.CS 600000.CS
0 20190102 6.804619 5.176437
1 20190103 6.871258 5.235139
2 20190104 7.219263 5.315187
3 20190107 7.211859 5.325860
4 20190108 7.152624 5.315187
5 20190109 7.359947 5.331197
获取某一天数值类因子数据-get_field_one_day
获取股票的基础属性、市值等信息,主要是序列类的数据。数据信息详见财务分析因子,财务数据,股东与股本,估值指标,波动率因子
调用此api
之前需下载所需要调用的因子数据,不然返回结果为空。
函数原型
get_field_one_day(fields, symbols, trade_date=None, report=None)
参数:
参数 | 类型 | 说明 |
---|---|---|
fields | list | 因子列表 |
symbols | list | 选取的股票列表 |
trade_date | int | 指定某个交易日。形式为YYYYMMDD |
report | str | 指定报告期,例如'2016Q1' - 16年一季报,'2016Q2' - 16年半年报,'2016Q3' - 16年三季报,'2016Q4'-年报 |
返回: DataFrame
, symbol 作为标的列, 其它为因子值列
示例:
# 获取某一天数值类因子数据
[In]:
data_api.get_field_one_day(['NET_PROFIT', 'PE'], symbols=['000001.CS', '000006.CS'], trade_date=20190111)
[Out]:
symbol NET_PROFIT PE
0 000001.CS 2.045600e+10 7.552460
1 000006.CS 5.453400e+08 8.852076
获取某个标的数值类因子数据-get_field_one_symbol
获取股票的基础属性、市值等信息,主要是序列类的数据。数据信息详见财务分析因子,财务数据,股东与股本,估值指标,波动率因子
调用此api
之前需下载所需要调用的因子数据,不然返回结果为空。
函数原型
get_field_one_symbol(fields, symbol, start_date=None, end_date=None, count=None, strict=False)
参数:
参数 | 类型 | 说明 |
---|---|---|
fields | list | 因子列表 |
symbol | str | 选取的股票 |
start_date | int | 指定某个交易日。形式为YYYYMMDD ,可选字段 |
end_date | int | 指定某个交易日。形式为YYYYMMDD。 |
count | int | 交易日数量,可选字段; 基于 end_date 往前推count个交易日 ;和 start_date 字段不可同时使用 |
strict | bool | 严格按报告期对齐,仅季频数据有效 |
返回: DataFrame
trade_date 作为日期列, 其它为因子值列
示例1:
[In]:
data_api.get_field_one_symbol(['NET_PROFIT', 'PE', 'PB'], symbol='000001.CS', start_date=20190101, end_date=20190110)
[Out]:
trade_date PB NET_PROFIT PE
0 20190102 0.670797 2.045600e+10 6.804619
1 20190103 0.677367 2.045600e+10 6.871258
2 20190104 0.711673 2.045600e+10 7.219263
3 20190107 0.710943 2.045600e+10 7.211859
4 20190108 0.705103 2.045600e+10 7.152624
5 20190109 0.725541 2.045600e+10 7.359947
6 20190110 0.737220 2.045600e+10 7.478416
示例2:
[In]:
data_api.get_field_one_symbol(['NET_PROFIT', 'PE', 'PB'], symbol='000001.CS', end_date=20190110, count=5)
[Out]:
trade_date PB NET_PROFIT PE
0 20190104 0.711673 2.045600e+10 7.219263
1 20190107 0.710943 2.045600e+10 7.211859
2 20190108 0.705103 2.045600e+10 7.152624
3 20190109 0.725541 2.045600e+10 7.359947
4 20190110 0.737220 2.045600e+10 7.478416
表格数据-get_table_data
获取表格类型的数据,如期货持仓排名系列数据主力跟踪,申万一级行业指数日K行情数据,指数成分股权重数据等
调用此api
之前需下载所需要调用的因子数据,不然返回结果为空。
函数原型:
get_table_data(field, symbols, start_date=None, end_date=None, count=None, columns=[])
参数:
参数 | 类型 | 说明 |
---|---|---|
field | str | 表格类因子, 例如 FUT_SHORT_RANK, FUT_LONG_RANK |
symbols | str | 标的代码 |
start_date | int | 交易日期,形式为 YYYYMMDD |
end_date | int | 交易日期,形式为 YYYYMMDD |
count | int | 交易日数量, count 和 start_date 不能同时存在 |
columns | list | 指定返回的列,默认返回所有列; 关于因子列描述可以查阅因子数据说明 |
返回值:DataFrame
trade_date 和 symbol 单独为一列, 其它是table内部列
示例1
# 获取常用指数成分股权重数据
[In]:
data_api.get_table_data("INDEX_WEIGHT", "000016.IDX", end_date=20200910, count=1)
[Out]:
trade_date symbol WEIGH_VAL STK_CODE
0 20200910 000016.IDX 1.841 600000.CS
1 20200910 000016.IDX 1.114 600009.CS
2 20200910 000016.IDX 1.787 600016.CS
3 20200910 000016.IDX 0.816 600028.CS
4 20200910 000016.IDX 4.100 600030.CS
5 20200910 000016.IDX 1.979 600031.CS
6 20200910 000016.IDX 5.884 600036.CS
7 20200910 000016.IDX 1.745 600048.CS
8 20200910 000016.IDX 0.731 600050.CS
9 20200910 000016.IDX 0.990 600104.CS
10 20200910 000016.IDX 1.001 600196.CS
11 20200910 000016.IDX 5.334 600276.CS
12 20200910 000016.IDX 1.741 600309.CS
13 20200910 000016.IDX 13.587 600519.CS
14 20200910 000016.IDX 0.799 600547.CS
15 20200910 000016.IDX 2.212 600585.CS
16 20200910 000016.IDX 1.030 600588.CS
17 20200910 000016.IDX 1.278 600690.CS
18 20200910 000016.IDX 0.920 600703.CS
19 20200910 000016.IDX 0.780 600745.CS
20 20200910 000016.IDX 2.217 600837.CS
21 20200910 000016.IDX 3.851 600887.CS
22 20200910 000016.IDX 2.529 601012.CS
23 20200910 000016.IDX 0.404 601066.CS
24 20200910 000016.IDX 0.807 601088.CS
25 20200910 000016.IDX 0.443 601138.CS
26 20200910 000016.IDX 3.049 601166.CS
27 20200910 000016.IDX 0.622 601186.CS
28 20200910 000016.IDX 1.320 601211.CS
29 20200910 000016.IDX 0.126 601236.CS
30 20200910 000016.IDX 1.396 601288.CS
31 20200910 000016.IDX 12.562 601318.CS
32 20200910 000016.IDX 0.233 601319.CS
33 20200910 000016.IDX 1.967 601328.CS
34 20200910 000016.IDX 0.756 601336.CS
35 20200910 000016.IDX 2.631 601398.CS
36 20200910 000016.IDX 1.269 601601.CS
37 20200910 000016.IDX 1.101 601628.CS
38 20200910 000016.IDX 0.188 601658.CS
39 20200910 000016.IDX 1.632 601668.CS
40 20200910 000016.IDX 1.907 601688.CS
41 20200910 000016.IDX 0.278 601816.CS
42 20200910 000016.IDX 0.926 601818.CS
43 20200910 000016.IDX 0.651 601857.CS
44 20200910 000016.IDX 3.073 601888.CS
45 20200910 000016.IDX 1.046 601988.CS
46 20200910 000016.IDX 0.670 601989.CS
47 20200910 000016.IDX 0.494 603160.CS
48 20200910 000016.IDX 1.724 603259.CS
49 20200910 000016.IDX 0.458 603993.CS
示例2:
# 获取rb1910.CF期货排名列表
[In]:
data_api.get_table_data("FUT_SHORT_RANK", "rb1910.CF", end_date=20190305, count=1, columns=['rank', 'name', 'volume'])
[Out]:
trade_date symbol volume rank name
0 20190305 rb1910.CF 49779.0 1 鲁证期货
1 20190305 rb1910.CF 36840.0 2 银河期货
2 20190305 rb1910.CF 26227.0 3 永安期货
3 20190305 rb1910.CF 24864.0 4 国泰君安
4 20190305 rb1910.CF 20030.0 5 中信期货
5 20190305 rb1910.CF 19373.0 6 信达期货
6 20190305 rb1910.CF 18976.0 7 方正中期
7 20190305 rb1910.CF 14457.0 8 中粮期货
8 20190305 rb1910.CF 12381.0 9 东海期货
9 20190305 rb1910.CF 10303.0 10 东证期货
10 20190305 rb1910.CF 9823.0 11 五矿经易
11 20190305 rb1910.CF 8848.0 12 天风期货
12 20190305 rb1910.CF 7150.0 13 海通期货
13 20190305 rb1910.CF 6679.0 14 国贸期货
14 20190305 rb1910.CF 6364.0 15 新湖期货
15 20190305 rb1910.CF 5907.0 16 东吴期货
16 20190305 rb1910.CF 5701.0 17 光大期货
17 20190305 rb1910.CF 5650.0 18 华泰期货
18 20190305 rb1910.CF 5490.0 19 申万期货
19 20190305 rb1910.CF 4559.0 20 国富期货
示例3:
# 获取申万一级行业板块多个交易日的K线数据
[In]:
data_api.get_table_data("SW_MKT", "801010.PLA", start_date=20190110, end_date=20190115)
[Out]:
trade_date symbol preClose totalVolume totalTurnover close low open high
0 20190110 801010.PLA 2354.51 6.385033e+09 8.653306e+08 2356.07 2339.35 2353.78 2365.80
1 20190111 801010.PLA 2356.07 5.889354e+09 9.345046e+08 2365.73 2346.85 2347.15 2371.81
2 20190114 801010.PLA 2365.73 6.900767e+09 1.047818e+09 2366.05 2364.00 2366.54 2391.36
3 20190115 801010.PLA 2366.05 6.657991e+09 9.268652e+08 2369.36 2335.53 2363.71 2372.83
交易日期函数
函数 | API |
---|---|
获取交易日数 | get_trade_day_interval |
获取上一个交易日期 | get_prev_trade_date |
获取下一个交易日期 | get_next_trade_date |
获取一段时间内交易日期 | get_trade_dates |
获取前N个交易日期 | get_prev_trade_dates |
获取后N个交易日期 | get_next_trade_dates |
标的信息函数
函数 | API |
---|---|
获取标的基本信息 | get_ref_data |
获取成分股数据 | get_constituent_symbols |
获取连续合约对应的标的 | get_continuous_symbol |
获取指定合约集合 | get_appointed_symbols |
是否停牌 | is_suspend |
是否ST股 | is_ST |
是否上市 | is_listed |