关于instruments的结构及使用问题

新手专区
标签: #<Tag:0x00007fcf5e663a20>

(luckychan) #1

在bigquant里有几个获取股票代码的方法,如下:

  1. instruments = D.instruments()

  2. m1 = M.instruments.v2(
    start_date=‘2010-01-01’,
    end_date=‘2015-01-01’,
    market=‘CN_STOCK_A’,
    instrument_list=’’,
    max_count=0
    )

  3. m2 = M.advanced_auto_labeler.v2(
    instruments=m1.data,
    …)

请问1,2,3中的instruments的什么类型的数据结构,用什么命令可以显示出其内部,还有它们之间的区别。谢谢


(iQuant) #2

这三个是不同的模块,作用当然也不一样。

克隆策略

获取证券列表

参考文档:证券列表

In [1]:
instruments = D.instruments()
In [2]:
type(instruments)  # 查看类型
Out[2]:
list
In [3]:
print(instruments[:10])  # 查看前10只证券代码
['000001.SZA', '000002.SZA', '000004.SZA', '000005.SZA', '000006.SZA', '000007.SZA', '000008.SZA', '000009.SZA', '000010.SZA', '000011.SZA']

可视化模块:证券代码模块

In [4]:
m1 = M.instruments.v2(
start_date='2010-01-01',
end_date='2015-01-01',
market='CN_STOCK_A',
instrument_list='',
max_count=0
)
[2018-03-27 16:47:27.499261] INFO: bigquant: instruments.v2 开始运行..
[2018-03-27 16:47:27.513195] INFO: bigquant: 命中缓存
[2018-03-27 16:47:27.515227] INFO: bigquant: instruments.v2 运行完成[0.016022s].
In [5]:
m1 
Out[5]:
{'version': 'v2', 'data': DataSource(a622b84a2bfb11e895e10242ac1100a9, v2_t2)}
In [6]:
type(m1) # 查看类型
Out[6]:
biglearning.module2.common.data.Outputs
In [7]:
type(m1.data) # 可以发现是DataSource格式
Out[7]:
biglearning.module2.common.data.DataSource
In [9]:
type(m1.data.read_pickle()) # 是字典
Out[9]:
dict
In [11]:
m1.data.read_pickle().keys() # 字典键名
Out[11]:
dict_keys(['instruments', 'start_date', 'end_date'])
In [14]:
m1.data.read_pickle()['instruments'][:10] # 查看前10只证券代码列表
Out[14]:
['000001.SZA',
 '000002.SZA',
 '000004.SZA',
 '000005.SZA',
 '000006.SZA',
 '000007.SZA',
 '000008.SZA',
 '000009.SZA',
 '000010.SZA',
 '000011.SZA']

高级数据标注

M.advanced_auto_labeler 参考文档:高级数据标注

In [15]:
label_expr = [
    # 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)
    'shift(close, -5) / shift(open, -1) - shift(benchmark_close, -5) / shift(benchmark_open, -1)',
    # 极值处理:用1%和99%分位的值做clip
    'clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))',
    # 将分数映射到分类,这里使用20个分类
    'all_wbins(label, 20)',
    # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    'where(shift(high, -1) == shift(low, -1), NaN, label)'
]
instruments = '601318.SHA'
start_date = '2017-03-01'
end_date = '2017-04-01'

m1 = M.advanced_auto_labeler.v2(
    instruments=instruments, start_date=start_date, end_date=end_date,
    label_expr=label_expr, benchmark='000300.SHA')
[2018-03-27 16:57:45.447976] INFO: bigquant: advanced_auto_labeler.v2 开始运行..
[2018-03-27 16:57:45.486839] INFO: 自动数据标注: 加载历史数据: 23 行
[2018-03-27 16:57:45.488896] INFO: 自动数据标注: 开始标注 ..
[2018-03-27 16:57:45.752157] INFO: bigquant: advanced_auto_labeler.v2 运行完成[0.304169s].
In [16]:
m1
Out[16]:
{'version': 'v2', 'cast_label_int': True, 'plot_label_counts': <bound method bigquant_postrun.<locals>.plot_label_counts of {...}>, 'data': DataSource(eab4ade6319c11e897590242ac1100d8, v2_t2)}
In [17]:
m1.data # 可以看出是datasource格式
Out[17]:
DataSource(eab4ade6319c11e897590242ac1100d8, v2_t2)
In [18]:
m1.data.read_df() # 查看标注后的数据
Out[18]:
m:high m:low m:open m:amount date instrument m:close m:benchmark_instrument m:benchmark_close m:benchmark_open label
0 81.346161 80.920616 81.211777 1.286566e+09 2017-03-01 601318.SHA 80.987808 000300.SHA 3458.437500 3452.205811 0
1 81.390953 80.271095 81.390953 1.677956e+09 2017-03-02 601318.SHA 80.315895 000300.SHA 3435.096191 3463.482910 5
2 80.495071 79.979935 80.181511 9.001053e+08 2017-03-03 601318.SHA 80.293495 000300.SHA 3427.862793 3424.662598 2
3 80.495071 80.069527 80.203911 1.027741e+09 2017-03-06 601318.SHA 80.248703 000300.SHA 3446.483887 3427.253418 6
4 80.562263 80.181511 80.248703 8.512045e+08 2017-03-07 601318.SHA 80.539864 000300.SHA 3453.956543 3446.162842 5
5 80.450279 80.114319 80.405479 7.986798e+08 2017-03-08 601318.SHA 80.226303 000300.SHA 3448.731201 3452.200684 5
6 80.181511 79.509598 80.114319 1.347204e+09 2017-03-09 601318.SHA 80.136719 000300.SHA 3426.943848 3442.895264 1
7 80.114319 79.688774 79.979935 7.395385e+08 2017-03-10 601318.SHA 79.733566 000300.SHA 3427.891602 3423.977539 4
8 80.719040 79.643982 79.733566 1.291416e+09 2017-03-13 601318.SHA 80.562263 000300.SHA 3458.097900 3425.672363 4
9 80.920616 80.203911 80.607056 9.959090e+08 2017-03-14 601318.SHA 80.495071 000300.SHA 3456.693359 3456.658447 10
10 80.629456 80.091919 80.360687 9.643862e+08 2017-03-15 601318.SHA 80.539864 000300.SHA 3463.643555 3452.213867 8
11 81.166985 80.562263 80.853424 1.412921e+09 2017-03-16 601318.SHA 80.786232 000300.SHA 3481.506592 3472.269287 17
12 81.122185 79.778366 80.898216 1.951604e+09 2017-03-17 601318.SHA 80.069527 000300.SHA 3445.805176 3485.311279 12
13 80.539864 79.867950 80.091919 1.518418e+09 2017-03-20 601318.SHA 80.248703 000300.SHA 3449.612549 3449.051514 13
14 81.278969 80.338287 80.696640 3.497702e+09 2017-03-21 601318.SHA 81.234177 000300.SHA 3466.346680 3449.769531 13
15 81.144585 80.203911 80.831024 1.900860e+09 2017-03-22 601318.SHA 80.629456 000300.SHA 3450.050293 3450.754395 14
16 82.712379 80.943008 81.032600 4.423300e+09 2017-03-23 601318.SHA 81.906082 000300.SHA 3461.978271 3452.405518 12
17 83.115524 81.077393 82.085258 3.453352e+09 2017-03-24 601318.SHA 81.861290 000300.SHA 3489.599609 3464.196533 19


(fsm) #3

可以以股票代码反向查属于哪个行业吗. 例如002083.shz属于什么行业


(iQuant) #4

可以的。

D.history_data(['002803.SZA'], '2018-03-27', '2018-03-27',['close', 'industry_sw_level1','industry_sw_level2','industry_sw_level3'])


这里显示出了改只股票的申万一级行业、申万二级行业、申万三级行业,相关文档可以查看:行业列表

该股票一级行业属于轻工制造,二级行业属于包装印刷,三级行业属于包装印刷


(fsm) #5

还想问下,数据支持分钟级吗


(luckychan) #6

解释得很清楚,辛苦了,谢谢。