HistoryPanel 类

历史数据类HistoryPanel:

class qteasy.HistoryPanel(values: Optional[ndarray] = None, levels=None, rows=None, columns=None)[source]

qteasy 量化投资系统使用的主要历史数据的数据类型

一个HistoryPanel对象其本质是一个numpy.ndarray,这个ndarray是一个 三维数组,这个三维数组有L层,R行、C列,分别代表L种历史数据、R条数据记录、C种股票的历史数据。历史数据类型可以包括 类似开盘价、收盘价这样的量价数据,同样也可以包括诸如pe、ebitda等等财务数据

HistoryPanel数据结构的核心部分是一个基于numpy的三维ndarray矩阵,这个矩阵由M层N行L列,三个维度的轴标签分别为:

axis 0: levels/层,每层的标签为一个个股,每一层在HistoryPanel中被称为一个level,所有level的标签被称为shares axis 1: rows/行,每行的标签为一个时间点,每一行在HistoryPanel中被称为一个row,所有row的标签被称为hdates axis 2: columns/列,每列的标签为一种历史数据,每一列在HistoryPanel中被称为一个column,所有column的标签被称为htypes

使用HistoryPanel类,用户可以: 1, 方便地对数据进行切片,切片的基本方法是使用__getitem__()方法,也就是使用方括号[]传入切片器或列表对象,切片的输出是一个

numpy ndarray。

为了对正确的数轴进行切片,通过方括号传入的切片器或列表对象必须按照[htype slicer, shares slicer, dates slicer]的顺序 传入,第一个切片器对数据类型进行切片,第二个对股票品种,第三个对日期切片。切片的方法非常灵活: * 可以通过直接输入数轴的标签来选择某个单独的数据类型/股票品种,如:

HistoryPanel[“close”]: 选择所有股票品种的全部历史收盘价 HistoryPanel[,”000300.SH”]: 选择000300股票品种的所有历史数据

  • 可以以逗号分隔的数轴标签字符串形式指定某几个股票品种或数据类型,如:

    HistoryPanel[“close, open, high”]: 选择所有股票品种的全部历史收盘、开盘及最高价

  • 可以通过冒号:分隔的数轴标签字符串选择从第一个标签到最后一个标签之间的所有品种或数据类型,如:

    HistoryPanel[“000300.SH:000500.SH”]: 选择从000300开始到000500之间的所有股票品种全部历史数据

  • 可以通过int列表或str列表指定某几个品种或类型的数据,如:

    HistoryPanel[[0, 1, 2, 4]] 或 HistoryPanel[[“close”, “open”, “high”, “low”]] 选择第0、1、2、4种数据类型或’close”, “open”, “high”, “low’等标签代表的数据类型

  • 也可以通过常见的slicer对象来选择, 如:

    HistoryPanel[0:5:2] 选择0、2、4等三种数据类型的全部数据

  • 上面的所有切片方式可以单独使用,也可以混合使用,甚至几个list混合使用也不会造成问题,如:

    要选择000300, 000500, 000700等三只股票的close到high之间所有类型的2010年全年的历史数据,可以用下列方式实现: HistoryPanel[“close:high”, [“000300”, “000500”, “000700”], “20100101:20101231”]

2, 动态地修改每一个数轴上的标签内容,容易地调取标签和元素位置的对应关系(一个字典)

HistoryPanel.shares 输出一个列表,包含按顺序排列的所有层标签,即所有股票品种代码或名称 HistoryPanel.hdates 输出一个列表,包含按顺序排列的所有行标签,即所有数据的日期及时间 HistoryPanel.htypes 输出一个列表,包含按顺序排列的所有列标签,即所数据类型 HistoryPanel.levels 输出一个字典,包含所有层标签及其对应的层编号(从0开始到M-1) HistoryPanel.columns 输出一个字典,包含所有数据类型标签及其对应的列编号(从0开始到L-1) HistoryPanel.rows 输出一个字典,包含所有日期行标签及其对应的行号,从0开始一直到N-1)

3, 方便地打印HistoryPanel的相关信息 4, 方便地打印及格式化输出HistoryPanel的内容 5, 方便地转化为 pandas DataFrame对象

HistoryPanel不能完整转化为DataFrame对象,因为DataFrame只能适应2D数据。在转化为DataFrame的时候,用户只能选择 HistoryPanel的一个切片,或者是一个股票品种,或者是一个数据类型,输出的DataFrame包含的数据行数与

6, 方便地由多个pandas DataFrame对象组合而成

Properties

is_empty: bool, 该属性返回一个bool值,表示HistoryPanel是否为空 values: np.ndarray, 该属性返回一个numpy ndarray,包含HistoryPanel的全部数据 levels: dict, 该属性返回一个dict, 包含所有层标签(股票代码)及其对应的层编号 rows: dict, 该属性返回一个dict, 包含所有行标签(交易日期)及其对应的行编号 columns: dict, 该属性返回一个dict, 包含所有列标签(数据类型)及其对应的列编号 shares: list, 该属性包含所有层标签,即所有股票代码 hdates: list, 该属性包含所有行标签,即所有日期时间 htypes: list, 该属性包含所有列标签,即所有历史数据类型

__getitem__(self, slicer)[source]

该方法用于对HistoryPanel进行切片,返回一个numpy ndarray

re_label(self, levels=None, rows=None, columns=None)[source]

该方法用于重新设置HistoryPanel的标签,如果不输入任何参数,则会自动重新生成标签

join(self, other, how='outer', axis=0)[source]

该方法用于将两个HistoryPanel对象合并为一个HistoryPanel对象

slice_to_dataframe(self, slicer)[source]

该方法用于将HistoryPanel的一个切片转化为pandas DataFrame对象

flatten_to_dataframe(self, level=None, htype=None)[source]

该方法用于将HistoryPanel转化为一个multi-index DataFrame对象

as_type(dtype)[source]

将HistoryPanel的数据类型转换为dtype类型,dtype只能为’float’或’int”

Paramètres:

dtype (str, {'float', 'int'}) – 需要转换的目标数据类型

Type renvoyé:

self

Lève:

AssertionError – 当输入的数据类型不正确或输入除float/int外的其他数据类型时

candle(*args, **kwargs)[source]

plot candle chart with data in the HistoryPanel, check data availability before plotting

property column_count

获取HistoryPanel的列数量或历史数据数量

property columns

返回一个字典,代表HistoryPanel的历史数据,将历史数据与列号进行对应 columns = {htype_name[0]: 0,

htype_naem[1]: 1, htype_name[2]: 2, … htype_name[c]: c}

这样便于内部根据股票代码对数据进行切片

copy()[source]

返回一个新的HistoryPanel对象,其值和本对象相同

ffill(init_val=nan)[source]

前向填充缺失值,当历史数据中存在缺失值时,使用缺失值以前 的最近有效数据填充缺失值

Paramètres:

init_val (float, 如果Nan值出现在第一行时,没有前序有效数据,则使用这个值来填充,默认为np.nan) –

Renvoie:

out

Type renvoyé:

HistoryPanel, 填充后的HistoryPanel对象

Exemples

>>> hp = HistoryPanel(np.array([[[1, 2, 3], [4, np.nan, 6]], [[np.nan, 8, 9], [np.nan, np.nan, 12]]]),
...                   levels=['000001', '000002'], rows=['2015-01-01', '2015-01-02'],
...                   columns=['open', 'high', 'low'])
>>> hp
share 0, label: 000001
            open  high  low
2015-01-01   1.0   2.0  3.0
2015-01-02   4.0   NaN  6.0
share 1, label: 000002
            open  high   low
2015-01-01   NaN   8.0   9.0
2015-01-02   NaN   NaN  12.0
>>> hp.ffill()
share 0, label: 000001
            open  high  low
2015-01-01   1.0   2.0  3.0
2015-01-02   4.0   2.0  6.0
share 1, label: 000002
            open  high   low
2015-01-01   NaN   8.0   9.0
2015-01-02   NaN   8.0  12.0
>>> hp.ffill(init_val=3)
share 0, label: 000001
            open  high  low
2015-01-01   1.0   2.0  3.0
2015-01-02   4.0   2.0  6.0
share 1, label: 000002
            open  high   low
2015-01-01   3.0   8.0   9.0
2015-01-02   3.0   8.0  12.0
fillinf(with_val: [<class 'int'>, <class 'float'>])[source]

使用with_value来填充HistoryPanel中的所有inf值

Paramètres:

with_val (float or int) – 填充的值

Renvoie:

out

Type renvoyé:

HistoryPanel, 填充后的HistoryPanel对象

fillna(with_val: [<class 'int'>, <class 'float'>])[source]

使用with_value来填充HistoryPanel中的所有nan值

Paramètres:

with_val (float or int) – 填充的值

Renvoie:

out

Type renvoyé:

HistoryPanel, 填充后的HistoryPanel对象

flatten(along=None)[source]

等同于HistoryPanel.flatten_to_dataframe()

Paramètres:

along (str, {'col', 'row', 'column'} Default: 'row') – 平铺HistoryPanel的每一层时,沿行方向还是列方向平铺, “col’或’column’表示沿列方向平铺,”row’表示沿行方向平铺

Type renvoyé:

pandas.DataFrame

Exemples

>>> hp = HistoryPanel(np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020]],
...                                    [[2.3, 2.5, 20010], [2.6, 3.2, 20020]]]),
...                          levels=['000300', '000001'],
...                          rows=['2020-01-01', '2020-01-02'],
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close  open        vol
2020-01-01   12.3  12.5  1020010.0
2020-01-02   12.6  13.2  1020020.0
share 1, label: 000001
            close  open      vol
2020-01-01    2.3   2.5  20010.0
2020-01-02    2.6   3.2  20020.0
>>> hp.flatten(along='col')
           000300                  000001
            close  open        vol  close open      vol
2020-01-01   12.3  12.5  1020010.0    2.3  2.5  20010.0
2020-01-02   12.6  13.2  1020020.0    2.6  3.2  20020.0
>>> hp.flatten(along='row')
                   close  open        vol
000300 2020-01-01   12.3  12.5  1020010.0
       2020-01-02   12.6  13.2  1020020.0
000001 2020-01-01    2.3   2.5    20010.0
       2020-01-02    2.6   3.2    20020.0
flatten_to_dataframe(along='row')[source]

将一个HistoryPanel »展平 »成为一个DataFrame

HistoryPanel的多层数据会被 »平铺 »到DataFrame的列,变成一个MultiIndex,或者多层数据 会被平铺到DataFrame的行,同样变成一个MultiIndex,平铺到行还是列取决于along参数

Paramètres:

along (str, {'col', 'row', 'column'} Default: 'row') – 平铺HistoryPanel的每一层时,沿行方向还是列方向平铺, “col’或’column’表示沿列方向平铺,”row’表示沿行方向平铺

Type renvoyé:

pandas.DataFrame

Exemples

>>> hp = HistoryPanel(np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020]],
...                                    [[2.3, 2.5, 20010], [2.6, 3.2, 20020]]]),
...                          levels=['000300', '000001'],
...                          rows=['2020-01-01', '2020-01-02'],
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close  open        vol
2020-01-01   12.3  12.5  1020010.0
2020-01-02   12.6  13.2  1020020.0
share 1, label: 000001
            close  open      vol
2020-01-01    2.3   2.5  20010.0
2020-01-02    2.6   3.2  20020.0
>>> hp.flatten_to_dataframe(along='col')
           000300                  000001
            close  open        vol  close open      vol
2020-01-01   12.3  12.5  1020010.0    2.3  2.5  20010.0
2020-01-02   12.6  13.2  1020020.0    2.6  3.2  20020.0
>>> hp.flatten_to_dataframe(along='row')
                   close  open        vol
000300 2020-01-01   12.3  12.5  1020010.0
       2020-01-02   12.6  13.2  1020020.0
000001 2020-01-01    2.3   2.5    20010.0
       2020-01-02    2.6   3.2    20020.0
flattened_head(row_count=5)[source]

以multi-index DataFrame的形式返回HistoryPanel的最初几行,默认五行

Paramètres:

row_count (int, default 5) – 打印的行数

Renvoie:

  • dataframe, multi-indexed by share and htype as columns, with only first row_count rows

  • 一个dataframe,以share和htype为列的多重索引,只包含前row_count行

Exemples

>>> data = np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020], [12.9, 13.0, 1020030],
...                   [12.3, 12.5, 1020040], [12.6, 13.2, 1020050], [12.9, 13.0, 1020060]],
...                  [[2.3, 2.5, 20010], [2.6, 2.8, 20020], [2.9, 3.0, 20030],
...                   [2.3, 2.5, 20040], [2.6, 2.8, 20050], [2.9, 3.0, 20060]]])
>>> hp = HistoryPanel(values=data,
...                          levels=['000300', '000001'],
...                          rows=pd.date_range('2020-01-01', periods=6),
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close,  open,   vol
2020-01-01  12.3,   12.5,   1020010
2020-01-02  12.6,   13.2,   1020020
2020-01-03  12.9,   13.0,   1020030
2020-01-04  12.3,   12.5,   1020040
2020-01-05  12.6,   13.2,   1020050
2020-01-06  12.9,   13.0,   1020060
share 1, label: 000001:
            close,  open,   vol
2020-01-01  2.3,    2.5,    20010
2020-01-02  2.6,    3.2,    20020
2020-01-03  2.9,    3.0,    20030
2020-01-04  2.3,    2.5,    20040
2020-01-05  2.6,    3.2,    20050
2020-01-06  2.9,    3.0,    20060
>>> hp.flattened_head(3)
            000300                  000001
            close,  open,   vol,    close,  open,   vol
2020-01-01  12.3,   12.5,   1020010 2.3,    2.5,    20010
2020-01-02  12.6,   13.2,   1020020 2.6,    3.2,    20020
2020-01-03  12.9,   13.0,   1020030 2.9,    3.0,    20030
flattened_tail(row_count=5)[source]

以multi-index DataFrame的形式返回HistoryPanel的最后几行,默认五行

Paramètres:

row_count (int, default 5) – 打印的行数

Renvoie:

  • dataframe, multi-indexed by share and htype as columns, with only last row_count rows

  • 一个dataframe,以share和htype为列的多重索引,只包含后row_count行

Exemples

>>> data = np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020], [12.9, 13.0, 1020030],
...                   [12.3, 12.5, 1020040], [12.6, 13.2, 1020050], [12.9, 13.0, 1020060]],
...                  [[2.3, 2.5, 20010], [2.6, 2.8, 20020], [2.9, 3.0, 20030],
...                   [2.3, 2.5, 20040], [2.6, 2.8, 20050], [2.9, 3.0, 20060]]])
>>> hp = HistoryPanel(values=data,
...                          levels=['000300', '000001'],
...                          rows=pd.date_range('2020-01-01', periods=6),
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close,  open,   vol
2020-01-01  12.3,   12.5,   1020010
2020-01-02  12.6,   13.2,   1020020
2020-01-03  12.9,   13.0,   1020030
2020-01-04  12.3,   12.5,   1020040
2020-01-05  12.6,   13.2,   1020050
2020-01-06  12.9,   13.0,   1020060
share 1, label: 000001:
            close,  open,   vol
2020-01-01  2.3,    2.5,    20010
2020-01-02  2.6,    3.2,    20020
2020-01-03  2.9,    3.0,    20030
2020-01-04  2.3,    2.5,    20040
2020-01-05  2.6,    3.2,    20050
2020-01-06  2.9,    3.0,    20060
>>> hp.flattened_tail(3)
            000300                  000001
            close,  open,   vol,    close,  open,   vol
2020-01-04  12.3,   12.5,   1020040 2.3,    2.5,    20040
2020-01-05  12.6,   13.2,   1020050 2.6,    3.2,    20050
2020-01-06  12.9,   13.0,   1020060 2.9,    3.0,    20060
property hdate_count

获取HistoryPanel的历史数据类型数量

property hdates

获取HistoryPanel的历史日期时间戳list

head(row_count=5)[source]

返回HistoryPanel的最初几行,默认五行

Paramètres:

row_count (int, default 5) – 打印的行数

Renvoie:

  • dataframe, multi-indexed by share and htype as columns, with only first row_count rows

  • 一个dataframe,以share和htype为列的多重索引,只包含前row_count行

Exemples

>>> data = np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020], [12.9, 13.0, 1020030],
...                   [12.3, 12.5, 1020040], [12.6, 13.2, 1020050], [12.9, 13.0, 1020060]],
...                  [[2.3, 2.5, 20010], [2.6, 2.8, 20020], [2.9, 3.0, 20030],
...                   [2.3, 2.5, 20040], [2.6, 2.8, 20050], [2.9, 3.0, 20060]]])
>>> hp = HistoryPanel(values=data,
...                          levels=['000300', '000001'],
...                          rows=pd.date_range('2020-01-01', periods=6),
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close,  open,   vol
2020-01-01  12.3,   12.5,   1020010
2020-01-02  12.6,   13.2,   1020020
2020-01-03  12.9,   13.0,   1020030
2020-01-04  12.3,   12.5,   1020040
2020-01-05  12.6,   13.2,   1020050
2020-01-06  12.9,   13.0,   1020060
share 1, label: 000001:
            close,  open,   vol
2020-01-01  2.3,    2.5,    20010
2020-01-02  2.6,    3.2,    20020
2020-01-03  2.9,    3.0,    20030
2020-01-04  2.3,    2.5,    20040
2020-01-05  2.6,    3.2,    20050
2020-01-06  2.9,    3.0,    20060
>>> hp.head(3)
share 0, label: 000300
            close,  open,   vol,
2020-01-01  12.3,   12.5,   1020010
2020-01-02  12.6,   13.2,   1020020
2020-01-03  12.9,   13.0,   1020030
share 1, label: 000001
            close,  open,   vol
2020-01-01  2.3,    2.5,    20010
2020-01-02  2.6,    3.2,    20020
2020-01-03  2.9,    3.0,    20030
property htype_count

获取HistoryPanel的历史数据类型数量

property htypes

获取HistoryPanel的历史数据类型列表

info()[source]

打印本HistoryPanel对象的信息

Type renvoyé:

None

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
>>> hp.info()
<class 'qteasy.history.HistoryPanel'>
History Panel at 0x12215a850
Datetime Range: 10 entries, 2015-01-05 00:00:00 to 2015-01-14 00:00:00
Historical Data Types (total 5 data types):
['open', 'high', 'low', 'close', 'volume']
Shares (total 3 shares):
['000001', '000002', '000003']
non-null values for each share and data type:
        open  high  low  close  volume
000001    10    10   10     10      10
000002    10    10   10     10      10
000003    10    10   10     10      10
memory usage: 1344 bytes
property is_empty

判断HistoryPanel是否为空

isegment(start_index=None, end_index=None)[source]
获取HistoryPanel的一个片段,start_index和end_index都是int数,表示日期序号,返回

这两个序号代表的日期之间的所有数据,返回的类型为一个HistoryPanel,包含所有share和 htypes的数据

Paramètres:
  • start_index (开始日期序号) –

  • end_index (结束日期序号) –

Renvoie:

out – 一个HistoryPanel,包含start_date到end_date之间所有share和htypes的数据

Type renvoyé:

HistoryPanel

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
>>> hp.isegment(2, 5)
share 0, label: 000100
            open  high  low  close  volume
2015-01-07    10    20   30     40      50
2015-01-08    10    20   30     40      50
2015-01-09    10    20   30     40      50
share 1, label: 000200

open high low close volume

2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50

share 2, label: 000300

open high low close volume

2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50

join(other, same_shares: bool = False, same_htypes: bool = False, same_hdates: bool = False, fill_value: float = nan)[source]

将一个HistoryPanel对象与另一个HistoryPanel对象连接起来,生成一个新的HistoryPanel:

新HistoryPanel的行、列、层标签分别是两个原始HistoryPanel的行、列、层标签的并集,也就是说,新的HistoryPanel的行、列 层标签完全包含两个HistoryPanel对象的对应标签。

Paramètres:
  • other (HistoryPanel) – 需要合并的另一个HistoryPanel

  • same_shares (bool, Default False) – 两个HP的shares是否相同,如果相同,可以省去shares维度的标签合并,以节省时间。默认False,

  • same_htypes (bool, Default False) – 两个HP的htypes是否相同,如果相同,可以省去htypes维度的标签合并,以节省时间。默认False,

  • same_hdates (bool, Default False) – 两个HP的hdates是否相同,如果相同,可以省去hdates维度的标签合并,以节省时间。默认False,

  • fill_value (float, Default np.nan) – 空数据填充值,当组合后的HP存在空数据时,应该以什么值填充,默认为np.nan

Type renvoyé:

HistoryPanel, 一个新的History Panel对象

Exemples

# 如果两个HistoryPanel中包含标签相同的数据,那么新的HistoryPanel中将包含调用join方法的HistoryPanel对象的相应数据。例如: >>> hp1 = HistoryPanel(np.array([[[8, 9, 9], [7, 5, 5], [4, 8, 4], [1, 0, 7], [8, 7, 9]], … [[2, 3, 3], [5, 4, 6], [2, 8, 7], [3, 3, 4], [8, 8, 7]]]), … levels=[“000200”, “000300”], … rows=pd.date_range(“2020-01-01”, periods=5), … columns=[“close”, “open”, “high”]) >>> hp2 = HistoryPanel(np.array([[[8, 9, 9], [7, 5, 5], [4, 8, 4], [1, 0, 7], [8, 7, 9]], … [[2, 3, 3], [5, 4, 6], [2, 8, 7], [3, 3, 4], [8, 8, 7]]]), … levels=[“000400”, “000500”], … rows=pd.date_range(“2020-01-01”, periods=5), … columns=[“close”, “open”, “high”]) >>> hp1 share 0, label: 000200

close open high

2020-01-01 8 9 9 2020-01-02 7 5 5 2020-01-03 4 8 4 2020-01-04 1 0 7 2020-01-05 8 7 9 share 1, label: 000300

close open high

2020-01-01 2 3 3 2020-01-02 5 4 6 2020-01-03 2 8 7 2020-01-04 3 3 4 2020-01-05 8 8 7 >>> hp2 share 0, label: 000400

close open high

2020-01-01 8 9 9 2020-01-02 7 5 5 2020-01-03 4 8 4 2020-01-04 1 0 7 2020-01-05 8 7 9 share 1, label: 000500

close open high

2020-01-01 2 3 3 2020-01-02 5 4 6 2020-01-03 2 8 7 2020-01-04 3 3 4 2020-01-05 8 8 7

>>> hp1.join(hp2)
share 0, label: 000200
len()[source]

返回HistoryPanel对象的长度,即日期个数

Renvoie:

日期个数

Type renvoyé:

int

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
>>> hp.len()
10
property level_count

返回HistoryPanel中股票或资产品种的数量

property levels

返回HistoryPanel的层标签字典,也是HistoryPanel的股票代码字典

HistoryPanel的层标签是保存成一个字典形式的: levels = {share_name[0]: 0,

share_name[1]: 1, share_name[2]: 2, … share_name[l]: l}

这个字典在level的标签与level的id之间建立了一个联系,因此,如果需要通过层标签来快速地访问某一层的数据,可以非常容易地通过:

data = HP.values[levels[level_name[a], :, :]

来访问

不过这是HistoryPanel内部的处理机制,在HistoryPanel的外部,可以通过切片的方式快速访问不同的数据。

ohlc(*args, **kwargs)[source]

plot ohlc chart with data in the HistoryPanel, check data availability before plotting

args: kwargs: :return:

plot(*args, **kwargs)[source]

plot current HistoryPanel, settings according to args and kwargs

re_label(shares: (<class 'str'>, <class 'list'>) = None, htypes: (<class 'str'>, <class 'list'>) = None, hdates: (<class 'str'>, <class 'list'>) = None) None[source]

给HistoryPanel对象的层、行、列标签重新赋值

Paramètres:
  • shares (str or list of str) – 股票列表

  • htypes (str or list of str) – 数据类型列表

  • hdates (str or list of str) – 日期列表

Type renvoyé:

None

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
>>> hp.re_label(shares=['000100', '000200', '000300'], htypes=['typeA', 'typeB', 'typeC', 'typeD', 'typeE'])
>>> hp
share 0, label: 000100
            typeA  typeB  typeC  typeD  typeE
2015-01-05     10     20     30     40     50
2015-01-06     10     20     30     40     50
2015-01-07     10     20     30     40     50
2015-01-08     10     20     30     40     50
2015-01-09     10     20     30     40     50
2015-01-10     10     20     30     40     50
2015-01-11     10     20     30     40     50
2015-01-12     10     20     30     40     50
2015-01-13     10     20     30     40     50
2015-01-14     10     20     30     40     50
share 1, label: 000200

typeA typeB typeC typeD typeE

2015-01-05 10 20 30 40 50 2015-01-06 10 20 30 40 50 2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50 2015-01-10 10 20 30 40 50 2015-01-11 10 20 30 40 50 2015-01-12 10 20 30 40 50 2015-01-13 10 20 30 40 50 2015-01-14 10 20 30 40 50

share 2, label: 000300

typeA typeB typeC typeD typeE

2015-01-05 10 20 30 40 50 2015-01-06 10 20 30 40 50 2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50 2015-01-10 10 20 30 40 50 2015-01-11 10 20 30 40 50 2015-01-12 10 20 30 40 50 2015-01-13 10 20 30 40 50 2015-01-14 10 20 30 40 50

renko(*args, **kwargs)[source]

plot renko chart with data in the HistoryPanel, check data availability before plotting

args: kwargs: :return:

property row_count

获取HistoryPanel的行数量

property rows

返回Hi storyPanel的日期字典,通过这个字典建立日期与行号的联系:

rows = {row_date[0]: 0,

row_date[1]: 1, row_date[2]: 2, … row_date[r]: r }

因此内部可以较快地进行数据切片或数据访问

Renvoie:

日期字典

Type renvoyé:

dict

segment(start_date=None, end_date=None)[source]
获取HistoryPanel的一个日期片段,start_date和end_date都是日期型数据,返回

这两个日期之间的所有数据,返回的类型为一个HistoryPanel,包含所有share和 htypes的数据

Paramètres:
  • start_date (开始日期) –

  • end_date (结束日期) –

Renvoie:

out – 一个HistoryPanel,包含start_date到end_date之间所有share和htypes的数据

Type renvoyé:

HistoryPanel

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
>>> hp.segment('2015-01-07', '2015-01-10')
share 0, label: 000100
            open  high  low  close  volume
2015-01-07    10    20   30     40      50
2015-01-08    10    20   30     40      50
2015-01-09    10    20   30     40      50
2015-01-10    10    20   30     40      50
share 1, label: 000200

open high low close volume

2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50 2015-01-10 10 20 30 40 50

share 2, label: 000300

open high low close volume

2015-01-07 10 20 30 40 50 2015-01-08 10 20 30 40 50 2015-01-09 10 20 30 40 50 2015-01-10 10 20 30 40 50

property shape

获取HistoryPanel的各个维度的尺寸

property share_count

获取HistoryPanel中股票或资产品种的数量

property shares

返回HistoryPanel的层标签——股票列表

slice(shares=None, htypes=None)[source]
获取HistoryPanel的一个股票或数据种类片段,shares和htypes可以为列表或逗号分隔字符

串,表示需要获取的股票或数据的种类。

Paramètres:
  • shares (str or list of str) – 需要的股票列表

  • htypes (str or list of str) – 需要的数据类型列表

Renvoie:

out – 一个HistoryPanel,包含shares和htypes中指定的股票和数据类型的数据

Type renvoyé:

HistoryPanel

Exemples

>>> hp = HistoryPanel(np.array([[[10, 20, 30, 40, 50]]*10]*3),
...                          levels=['000001', '000002', '000003'],
...                          rows=pd.date_range('2015-01-05', periods=10),
...                          columns=['open', 'high', 'low', 'close', 'volume'])
slice_to_dataframe(htype: (<class 'str'>, <class 'int'>) = None, share: (<class 'str'>, <class 'int'>) = None, dropna: bool = False, inf_as_na: bool = False) DataFrame[source]

将HistoryPanel对象中的指定片段转化为DataFrame

指定htype或者share,将这个htype或share对应的数据切片转化为一个DataFrame。 由于HistoryPanel对象包含三维数据,因此在转化时必须指定htype或者share参数中的一个

Paramètres:
  • htype (str or int,) – 表示需要生成DataFrame的数据类型切片 如果给出此参数,定位该htype对应的切片后,将该htype对应的所有股票所有日期的数据转化为一个DataFrame 如果类型为str,表示htype的名称,如果类型为int,代表该htype所在的列序号

  • share (str or int,) – 表示需要生成DataFrame的股票代码切片 如果给出此参数,定位该share对应的切片后,将该share对应的所有数据类型所有日期的数据转化为一个DataFrame 如果类型为str,表示股票代码,如果类型为int,代表该share所在的层序号

  • dropna (bool, Default False) – 是否去除NaN值

  • inf_as_na (bool, Default False) – 是否将inf值当成NaN值一同去掉,当dropna为False时无效

Type renvoyé:

pandas.DataFrame

Exemples

>>> hp = HistoryPanel(values=np.array([[[1, 2, np.nan], [4, 5, 6]],
...                                    [[7, 8, np.nan], [np.inf, 11, 12]]]),
...                   levels=['000001', '000002'],
...                   rows=['2019-01-01', '2019-01-02'],
...                   columns=['open', 'high', 'low']))
>>> hp
share 0, label: 000001
            open  high  low
2019-01-01   1.0   2.0  NaN
2019-01-02   4.0   5.0  NaN
share 1, label: 000002
            open  high   low
2019-01-01   7.0   8.0   9.0
2019-01-02   inf  11.0  12.0
>>> hp.slice_to_dataframe(htype='open')
000001  000002
2019-01-01  1.0  7.0
2019-01-02  4.0  inf
>>> hp.slice_to_dataframe(share='000001')
open  high  low
2019-01-01  1.0  2.0  NaN
2019-01-02  4.0  5.0  6.0
>>> hp.slice_to_dataframe(htype='low', dropna=True)
            000001  000002
2019-01-02     6.0    12.0
tail(row_count=5)[source]

返回HistoryPanel的最末几行,默认五行

Paramètres:

row_count (int, default 5) – 打印的行数

Renvoie:

  • dataframe, multi-indexed by share and htype as columns, with only last row_count rows

  • 一个dataframe,以share和htype为列的多重索引,只包含最后row_count行

Exemples

>>> data = np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020], [12.9, 13.0, 1020030],
...                   [12.3, 12.5, 1020040], [12.6, 13.2, 1020050], [12.9, 13.0, 1020060]],
...                  [[2.3, 2.5, 20010], [2.6, 2.8, 20020], [2.9, 3.0, 20030],
...                   [2.3, 2.5, 20040], [2.6, 2.8, 20050], [2.9, 3.0, 20060]]])
>>> hp = HistoryPanel(values=data,
...                          levels=['000300', '000001'],
...                          rows=pd.date_range('2020-01-01', periods=6),
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close,  open,   vol
2020-01-01  12.3,   12.5,   1020010
2020-01-02  12.6,   13.2,   1020020
2020-01-03  12.9,   13.0,   1020030
2020-01-04  12.3,   12.5,   1020040
2020-01-05  12.6,   13.2,   1020050
2020-01-06  12.9,   13.0,   1020060
share 1, label: 000001:
            close,  open,   vol
2020-01-01  2.3,    2.5,    20010
2020-01-02  2.6,    3.2,    20020
2020-01-03  2.9,    3.0,    20030
2020-01-04  2.3,    2.5,    20040
2020-01-05  2.6,    3.2,    20050
2020-01-06  2.9,    3.0,    20060
>>> hp.tail(3)
share 0, label: 000300
            close,  open,   vol
2020-01-04  12.3,   12.5,   1020040
2020-01-05  12.6,   13.2,   1020050
2020-01-06  12.9,   13.0,   1020060
share 1, label: 000001:
            close,  open,   vol
2020-01-04  2.3,    2.5,    20040
2020-01-05  2.6,    3.2,    20050
2020-01-06  2.9,    3.0,    20060
to_df_dict(by: str = 'share') dict[source]
将一个HistoryPanel转化为一个dict,这个dict的keys是HP中的shares,values是每个shares对应的历史数据

这些数据以DataFrame的格式存储

Paramètres:

by (str, {'share', 'shares', 'htype', 'htypes'}, Default: 'share') –

  • “share” 或 “shares”: 将HistoryPanel中的数据切成若干片,每一片转化成一个DataFrame,

它的keys是股票的代码,每个股票代码一个DataFrame - “htype” 或 “htypes”: 将HistoryPanel中的数据切成若干片,每一片转化成一个DataFrame,

它的keys是历史数据类型,每种类型一个DataFrame

Renvoie:

df_dict

Type renvoyé:

dict, {str: pandas.DataFrame}

Exemples

>>> hp = HistoryPanel(np.random.randn(2, 3, 4),
...                   rows=['2020-01-01', '2020-01-02', '2020-01-03'],
...                   levels=['000001', '000002', '000003'],
...                   columns=['close', 'open', 'high', 'low'])
>>> hp
share 0, label: 000001
            close,  open,   high,   low
2020-01-01  0.1,    0.2,    0.3,    0.4
2020-01-02  0.5,    0.6,    0.7,    0.8
2020-01-03  0.9,    1.0,    1.1,    1.2
share 1, label: 000002
            close,  open,   high,   low
2020-01-01  1.1,    1.2,    1.3,    1.4
2020-01-02  1.5,    1.6,    1.7,    1.8
2020-01-03  1.9,    2.0,    2.1,    2.2
share 2, label: 000003
            close,  open,   high,   low
2020-01-01  2.1,    2.2,    2.3,    2.4
2020-01-02  2.5,    2.6,    2.7,    2.8
2020-01-03  2.9,    3.0,    3.1,    3.2
>>> hp.to_df_dict(by='share')
{'000001':
            close,  open,   high,   low
2020-01-01  0.1,    0.2,    0.3,    0.4
2020-01-02  0.5,    0.6,    0.7,    0.8
2020-01-03  0.9,    1.0,    1.1,    1.2
, '000002':
            close,  open,   high,   low
2020-01-01  1.1,    1.2,    1.3,    1.4
2020-01-02  1.5,    1.6,    1.7,    1.8
2020-01-03  1.9,    2.0,    2.1,    2.2
, '000003':
            close,  open,   high,   low
2020-01-01  2.1,    2.2,    2.3,    2.4
2020-01-02  2.5,    2.6,    2.7,    2.8
2020-01-03  2.9,    3.0,    3.1,    3.2
}
>>> hp.to_df_dict(by='htype')
{'close':
            000001,  000002,  000003
2020-01-01  0.1,     1.1,     2.1
2020-01-02  0.5,     1.5,     2.5
2020-01-03  0.9,     1.9,     2.9
, 'open':
            000001,  000002,  000003
2020-01-01  0.2,     1.2,     2.2
2020-01-02  0.6,     1.6,     2.6
2020-01-03  1.0,     2.0,     3.0
, 'high':
            000001,  000002,  000003
2020-01-01  0.3,     1.3,     2.3
2020-01-02  0.7,     1.7,     2.7
2020-01-03  1.1,     2.1,     3.1
, 'low':
            000001,  000002,  000003
2020-01-01  0.4,     1.4,     2.4
2020-01-02  0.8,     1.8,     2.8
2020-01-03  1.2,     2.2,     3.2
}
to_multi_index_dataframe(along=None)[source]

等同于HistoryPanel.flatten_to_dataframe()

Paramètres:

along (str, {'col', 'row', 'column'} Default: 'row') – 平铺HistoryPanel的每一层时,沿行方向还是列方向平铺, “col’或’column’表示沿列方向平铺,”row’表示沿行方向平铺

Type renvoyé:

pandas.DataFrame

Exemples

>>> hp = HistoryPanel(np.array([[[12.3, 12.5, 1020010], [12.6, 13.2, 1020020]],
...                                    [[2.3, 2.5, 20010], [2.6, 3.2, 20020]]]),
...                          levels=['000300', '000001'],
...                          rows=['2020-01-01', '2020-01-02'],
...                          columns=['close', 'open', 'vol'])
>>> hp
share 0, label: 000300
            close  open        vol
2020-01-01   12.3  12.5  1020010.0
2020-01-02   12.6  13.2  1020020.0
share 1, label: 000001
            close  open      vol
2020-01-01    2.3   2.5  20010.0
2020-01-02    2.6   3.2  20020.0
>>> hp.to_multi_index_dataframe(along='col')
           000300                  000001
            close  open        vol  close open      vol
2020-01-01   12.3  12.5  1020010.0    2.3  2.5  20010.0
2020-01-02   12.6  13.2  1020020.0    2.6  3.2  20020.0
>>> hp.to_multi_index_dataframe(along='row')
                   close  open        vol
000300 2020-01-01   12.3  12.5  1020010.0
       2020-01-02   12.6  13.2  1020020.0
000001 2020-01-01    2.3   2.5    20010.0
       2020-01-02    2.6   3.2    20020.0
unstack(by: str = 'share') dict[source]

等同于方法self.to_df_dict(), 是方法self.to_df_dict()的别称

Paramètres:

by (str, {'share', 'htype'}, default 'share') – 指定按照share或者htype来unstack, 默认为share

Renvoie:

unstack后的结果,是一个字典,key为share或htype,value为对应的DataFrame

Type renvoyé:

dict

Exemples

>>> hp = HistoryPanel(np.random.randn(2, 3, 4),
...                   rows=['2020-01-01', '2020-01-02', '2020-01-03'],
...                   levels=['000001', '000002', '000003'],
...                   columns=['close', 'open', 'high', 'low'])
>>> hp
share 0, label: 000001
            close,  open,   high,   low
2020-01-01  0.1,    0.2,    0.3,    0.4
2020-01-02  0.5,    0.6,    0.7,    0.8
2020-01-03  0.9,    1.0,    1.1,    1.2
share 1, label: 000002
            close,  open,   high,   low
2020-01-01  1.1,    1.2,    1.3,    1.4
2020-01-02  1.5,    1.6,    1.7,    1.8
2020-01-03  1.9,    2.0,    2.1,    2.2
share 2, label: 000003
            close,  open,   high,   low
2020-01-01  2.1,    2.2,    2.3,    2.4
2020-01-02  2.5,    2.6,    2.7,    2.8
2020-01-03  2.9,    3.0,    3.1,    3.2
>>> hp.unstack(by='share')
{'000001':
            close,  open,   high,   low
2020-01-01  0.1,    0.2,    0.3,    0.4
2020-01-02  0.5,    0.6,    0.7,    0.8
2020-01-03  0.9,    1.0,    1.1,    1.2
, '000002':
            close,  open,   high,   low
2020-01-01  1.1,    1.2,    1.3,    1.4
2020-01-02  1.5,    1.6,    1.7,    1.8
2020-01-03  1.9,    2.0,    2.1,    2.2
, '000003':
            close,  open,   high,   low
2020-01-01  2.1,    2.2,    2.3,    2.4
2020-01-02  2.5,    2.6,    2.7,    2.8
2020-01-03  2.9,    3.0,    3.1,    3.2
}
>>> hp.unstack(by='htype')
{'close':
            000001,  000002,  000003
2020-01-01  0.1,     1.1,     2.1
2020-01-02  0.5,     1.5,     2.5
2020-01-03  0.9,     1.9,     2.9
, 'open':
            000001,  000002,  000003
2020-01-01  0.2,     1.2,     2.2
2020-01-02  0.6,     1.6,     2.6
2020-01-03  1.0,     2.0,     3.0
, 'high':
            000001,  000002,  000003
2020-01-01  0.3,     1.3,     2.3
2020-01-02  0.7,     1.7,     2.7
2020-01-03  1.1,     2.1,     3.1
, 'low':
            000001,  000002,  000003
2020-01-01  0.4,     1.4,     2.4
2020-01-02  0.8,     1.8,     2.8
2020-01-03  1.2,     2.2,     3.2
}
property values

返回HistoryPanel的values

qteasy.get_history_data(htypes=None, *, htype_names=None, data_types=None, data_source=None, shares=None, symbols=None, start=None, end=None, freq=None, rows=None, asset_type=None, adj=None, as_data_frame=None, group_by=None, **kwargs)[source]
从本地data_source获取所需的数据并组装为适应于策略

需要的HistoryPanel数据对象

需要获取的数据类型可以由data_types参数给出,如果不给出data_types参数,则可以通过htypes/htype_names等参数 结合freq和asset_type参数创建可能的htypes,如果给出了data_types参数,则htypes/htype_names参数将被忽略

Paramètres:
  • htype_names ([str], str) –

    需要获取的历史数据的名称集合,如果htypes为空,则系统将尝试通过根据历史数据名称和freq/asset_type参数创建 所有可能的htypes。输入方式可以为str或list:

    • str: “open, high, low, close”

    • list: [“open”, “high”, “low”, “close”]

  • htypes ([DataType], deprecated) – 需要获取的历史数据的名称集合,如果htypes为空,则系统将尝试通过根据历史数据名称和freq/asset_type参数创建 所有可能的htypes。输入方式可以为str或list:

  • data_types ([DataType],) – 需要获取的历史数据类型集合,必须是合法的数据类型对象。 如果给出了本参数,htype_names会被忽略,否则根据htype_names参数创建可能的htypes

  • data_source (DataSource) – 需要获取历史数据的数据源

  • shares ([str, list] 等同于symbols) –

    需要获取历史数据的证券代码集合,可以是以逗号分隔的证券代码字符串或者证券代码字符列表, 如以下两种输入方式皆合法且等效:

    • str: “000001.SZ, 000002.SZ, 000004.SZ, 000005.SZ”

    • list: [“000001.SZ”, “000002.SZ”, “000004.SZ”, “000005.SZ”]

  • symbols ([str, list] 等同于shares) – 需要获取历史数据的证券代码集合,可以是以逗号分隔的证券代码字符串或者证券代码字符列表, 如以下两种输入方式皆合法且等效: - str: “000001, 000002, 000004, 000005” - list: [“000001”, “000002”, “000004”, “000005”]

  • start (str) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的开始日期/时间(如果可用)

  • end (str) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的结束日期/时间(如果可用)

  • rows (int, default: 10) – 获取的历史数据的行数,如果指定了start和end,则忽略此参数,且获取的数据的时间范围为[start, end] 如果未指定start和end,则获取数据表中最近的rows条数据,使用row来获取数据时,速度比使用日期慢得多

  • freq (str) –

    获取的历史数据的频率,包括以下选项:
    • 1/5/15/30min 1/5/15/30分钟频率周期数据(如K线)

    • H/D/W/M 分别代表小时/天/周/月 周期数据(如K线)

  • asset_type (str, list) –

    限定获取的数据中包含的资产种类,包含以下选项或下面选项的组合,合法的组合方式包括 逗号分隔字符串或字符串列表,例如: “E, IDX” 和 [“E”, “IDX”]都是合法输入

    • any: 可以获取任意资产类型的证券数据(默认值)

    • E: 只获取股票类型证券的数据

    • IDX: 只获取指数类型证券的数据

    • FT: 只获取期货类型证券的数据

    • FD: 只获取基金类型证券的数据

  • adj (str, deprecated: adj is depreated since version 1.4 and will be removed) –

    Deprecated: 对于某些数据,可以获取复权数据,需要通过复权因子计算,复权选项包括:
    • none / n: 不复权(默认值)

    • back / b: 后复权

    • forward / fw / f: 前复权

    从下一个版本开始,adj参数将不再可用,请直接在htype中使用close:b等方式指定复权价格

  • as_data_frame (bool, Default: True) – True时返回HistoryPanel对象,False时返回一个包含DataFrame对象的字典

  • group_by (str, 默认'shares') – 如果返回DataFrame对象,设置dataframe的分组策略 - “shares” / “share” / “s”: 每一个share组合为一个dataframe - “htypes” / “htype” / “h”: 每一个htype组合为一个dataframe

  • **kwargs

    用于生成trade_time_index的参数,包括: drop_nan: bool

    是否保留全NaN的行

    resample_method: str

    如果数据需要升频或降频时,调整频率的方法 调整数据频率分为数据降频和升频,在两种不同情况下,可用的method不同: 数据降频就是将多个数据合并为一个,从而减少数据的数量,但保留尽可能多的信息, 例如,合并下列数据(每一个tuple合并为一个数值,?表示合并后的数值)

    [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(?), (?), (?)]

    数据合并方法: - “last”/”close”: 使用合并区间的最后一个值。如:

    [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(3), (5), (7)]

    • ”first”/”open”: 使用合并区间的第一个值。如:

      [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(1), (4), (6)]

    • ”max”/”high”: 使用合并区间的最大值作为合并值:

      [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(3), (5), (7)]

    • ”min”/”low”: 使用合并区间的最小值作为合并值:

      [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(1), (4), (6)]

    • ”avg”/”mean”: 使用合并区间的平均值作为合并值:

      [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(2), (4.5), (6.5)]

    • ”sum”/”total”: 使用合并区间的平均值作为合并值:

      [(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(2), (4.5), (6.5)]

    数据升频就是在已有数据中插入新的数据,插入的新数据是缺失数据,需要填充。 例如,填充下列数据(?表示插入的数据)

    [1, 2, 3] 填充后变为: [?, 1, ?, 2, ?, 3, ?]

    缺失数据的填充方法如下: - “ffill”: 使用缺失数据之前的最近可用数据填充,如果没有可用数据,填充为NaN。如:

    [1, 2, 3] 填充后变为: [NaN, 1, 1, 2, 2, 3, 3]

    • ”bfill”: 使用缺失数据之后的最近可用数据填充,如果没有可用数据,填充为NaN。如:

      [1, 2, 3] 填充后变为: [1, 1, 2, 2, 3, 3, NaN]

    • ”nan”: 使用NaN值填充缺失数据:

      [1, 2, 3] 填充后变为: [NaN, 1, NaN, 2, NaN, 3, NaN]

    • ”zero”: 使用0值填充缺失数据:

      [1, 2, 3] 填充后变为: [0, 1, 0, 2, 0, 3, 0]

    b_days_only: bool 默认True

    是否强制转换自然日频率为工作日,即: “D” -> “B” “W” -> “W-FRI” “M” -> “BM”

    trade_time_only: bool, default True

    为True时 仅生成交易时间段内的数据,交易时间段的参数通过**kwargs设定

    include_start: bool, default True

    日期时间序列是否包含开始日期/时间

    include_end: bool, default True

    日期时间序列是否包含结束日期/时间

    start_am:, str

    早晨交易时段的开始时间

    end_am:, str

    早晨交易时段的结束时间

    include_start_am: bool

    早晨交易时段是否包括开始时间

    include_end_am: bool

    早晨交易时段是否包括结束时间

    start_pm: str

    下午交易时段的开始时间

    end_pm: str

    下午交易时段的结束时间

    include_start_pm: bool

    下午交易时段是否包含开始时间

    include_end_pm: bool

    下午交易时段是否包含结束时间

Renvoie:

  • HistoryPanel – 如果设置as_data_frame为False,则返回一个HistoryPanel对象

  • Dict of DataFrame – 如果设置as_data_frame为True,则返回一个Dict,其值为多个DataFrames

Exemples

>>> import qteasy as qt
# 给出历史数据类型和证券代码,起止时间,可以获取该时间段内该股票的历史数据
>>> qt.get_history_data(htype_names='open, high, low, close, vol', shares='000001.SZ', start='20191225', end='20200110')
{'000001.SZ':
             open   high    low  close         vol
2019-12-25  16.45  16.56  16.24  16.30   414917.98
2019-12-26  16.34  16.48  16.32  16.47   372033.86
2019-12-27  16.53  16.93  16.43  16.63  1042574.72
2019-12-30  16.46  16.63  16.10  16.57   976970.31
2019-12-31  16.57  16.63  16.31  16.45   704442.25
2020-01-02  16.65  16.95  16.55  16.87  1530231.87
2020-01-03  16.94  17.31  16.92  17.18  1116194.81
2020-01-06  17.01  17.34  16.91  17.07   862083.50
2020-01-07  17.13  17.28  16.95  17.15   728607.56
2020-01-08  17.00  17.05  16.63  16.66   847824.12
2020-01-09  16.81  16.93  16.53  16.79  1031636.65
2020-01-10  16.79  16.81  16.52  16.69   585548.45
}
>>> # 除了股票的价格数据以外,也可以获取基金、指数的价格数据,如下面的代码获取000300.SH的指数价格
>>> qt.get_history_data(htype_names='close', shares='000300.SH', start='20191225', end='20200105')
{'000300.SH':
              close
2019-12-25  3990.87
2019-12-26  4025.99
2019-12-27  4022.03
2019-12-30  4081.63
2019-12-31  4096.58
2020-01-02  4152.24
2020-01-03  4144.96
}
>>> # 以及基金的净值数据
>>> qt.get_history_data(htype_names='unit_nav, accum_nav', shares='000001.OF', start='20191225', end='20200105')
{'000001.OF':
            unit_nav  accum_nav
2019-12-25     1.086      3.547
2019-12-26     1.096      3.557
2019-12-27     1.091      3.552
2019-12-30     1.100      3.561
2019-12-31     1.105      3.566
2020-01-02     1.123      3.584
2020-01-03     1.127      3.588
}
>>> # 不光价格数据,其他类型的数据也可以同时获取:
>>> qt.get_history_data(htype_names='close, pe, pb', shares='000001.SZ', start='20191225', end='20200105')
{'000001.SZ':
            close       pe      pb
2019-12-25  16.30  12.7454  1.1798
2019-12-26  16.47  12.8784  1.1921
2019-12-27  16.63  13.0035  1.2036
2019-12-30  16.57  12.9566  1.1993
2019-12-31  16.45  12.8627  1.1906
2020-01-02  16.87  13.1911  1.2210
2020-01-03  17.18  13.4335  1.2434
}
>>> # 可以同时混合获取多只股票、指数、多种数据类型的数据,如果某些数据类型缺失,会用NaN填充,注意000001.SZ是股票平安银行,000001.SH是上证指数
>>> qt.get_history_data(htype_names='close, pe, pb, total_mv, eps', shares='000001.SZ, 000001.SH', start='20191225', end='20200105')
{'000001.SZ':
            close       pe      pb      total_mv   eps
2019-12-25  16.30  12.7454  1.1798  3.163165e+07   NaN
2019-12-26  16.47  12.8784  1.1921  3.196155e+07   NaN
2019-12-27  16.63  13.0035  1.2036  3.227204e+07   NaN
2019-12-30  16.57  12.9566  1.1993  3.215561e+07   NaN
2019-12-31  16.45  12.8627  1.1906  3.192274e+07  1.54
2020-01-02  16.87  13.1911  1.2210  3.273778e+07  1.54
2020-01-03  17.18  13.4335  1.2434  3.333937e+07  1.54,
'000001.SH':
              close     pe    pb      total_mv  eps
2019-12-25  2981.88  13.74  1.38  3.987686e+13  NaN
2019-12-26  3007.35  13.85  1.39  4.020871e+13  NaN
2019-12-27  3005.04  13.85  1.39  4.019086e+13  NaN
2019-12-30  3040.02  14.00  1.40  4.064796e+13  NaN
2019-12-31  3050.12  14.05  1.41  4.079249e+13  NaN
2020-01-02  3085.20  14.22  1.42  4.128453e+13  NaN
2020-01-03  3083.79  14.22  1.42  4.127933e+13  NaN
}
>>> # 通过设置freq参数,可以获取不同频率的K线数据,如设置freq='H'可以获取1小时频率的数据
>>> qt.get_history_data(htype_names='open:b, high:b, low:b, close:b', shares='000001.SZ', start='20191229', end='20200106', freq='H', asset_type='E')
 {'000001.SZ':
                           open        high         low       close
2019-12-30 10:00:00  1796.92174  1796.92174  1796.92174  1796.92174
2019-12-30 11:00:00  1790.37160  1800.19681  1758.71259  1786.00484
2019-12-30 14:00:00  1811.11371  1813.29709  1795.83005  1806.74695
2019-12-30 15:00:00  1805.65526  1808.93033  1793.64667  1808.93033
2019-12-31 10:00:00  1808.93033  1808.93033  1808.93033  1808.93033
2019-12-31 11:00:00  1806.74695  1806.74695  1780.54639  1788.18822
2019-12-31 14:00:00  1786.00484  1788.18822  1781.63808  1786.00484
2019-12-31 15:00:00  1786.00484  1796.92174  1783.82146  1795.83005
2020-01-02 10:00:00  1817.66385  1817.66385  1817.66385  1817.66385
2020-01-02 11:00:00  1819.84723  1848.23117  1807.83864  1840.58934
2020-01-02 14:00:00  1842.77272  1847.13948  1828.58075  1843.86441
2020-01-02 15:00:00  1843.86441  1844.95610  1836.22258  1841.68103
2020-01-03 10:00:00  1849.32286  1849.32286  1849.32286  1849.32286
2020-01-03 11:00:00  1849.32286  1879.89018  1849.32286  1877.70680
2020-01-03 14:00:00  1863.51483  1889.71539  1863.51483  1884.25694
2020-01-03 15:00:00  1884.25694  1884.25694  1872.24835  1875.52342
}
>>> # 可以设置b_days_only参数来将价格填充到非交易日,形成完整的日期序列
>>> qt.get_history_data(htype_names='open, high, low, close, vol', shares='000001.SZ', start='20191225', end='20200105', b_days_only=False)
{'000001.SZ':
              open   high    low  close         vol
 2019-12-25  16.45  16.56  16.24  16.30   414917.98
 2019-12-26  16.34  16.48  16.32  16.47   372033.86
 2019-12-27  16.53  16.93  16.43  16.63  1042574.72
 2019-12-28  16.53  16.93  16.43  16.63  1042574.72
 2019-12-29  16.53  16.93  16.43  16.63  1042574.72
 2019-12-30  16.46  16.63  16.10  16.57   976970.31
 2019-12-31  16.57  16.63  16.31  16.45   704442.25
 2020-01-01  16.57  16.63  16.31  16.45   704442.25
 2020-01-02  16.65  16.95  16.55  16.87  1530231.87
 2020-01-03  16.94  17.31  16.92  17.18  1116194.81
 2020-01-04  16.94  17.31  16.92  17.18  1116194.81
 2020-01-05  16.94  17.31  16.92  17.18  1116194.81
 }
>>> # 使用特殊的htypes,可以获取特定的数据,如指数权重数据,下面的代码获取000001.SZ在HS300指数重的权重数据,单位为百分比
>>> qt.get_history_data(htype_names='wt_id:000300.SH', shares='000001.SZ, 000002.SZ', start='20191225', end='20200105')
{'000001.SZ':
            wt_idx:000300.SH
2020-01-02        1.1714
2020-01-03        1.1714,
'000002.SZ':
            wt_idx:000300.SH
2020-01-02        1.3595
2020-01-03        1.3595
}
qteasy.stack_dataframes(dfs: [<class 'list'>, <class 'dict'>], dataframe_as: str = 'shares', shares=None, htypes=None, fill_value=None)[source]

将多个dataframe组合成一个HistoryPanel.

Paramètres:
  • dfs (list of DataFrames or dict of DataFrames) – 需要被堆叠的dataframe,可以为list或dict, dfs可以是一个dict或一个list,如果是一个list,这个list包含需要组合的所有dataframe,如果是dict,这个dict的values包含 所有需要组合的dataframe,dict的key包含每一个dataframe的标签,这个标签可以被用作HistoryPanel的层(shares)或列 (htypes)标签。如果dfs是一个list,则组合后的行标签或列标签必须明确给出。

  • dataframe_as (str {'shares', 'htypes'}) –

    每个dataframe代表的数据类型。 dataframe_as == “shares”,

    表示每个DataFrame代表一个share的数据,每一列代表一个htype。组合后的HP对象 层数与DataFrame的数量相同,而列数等于所有DataFrame的列的并集,行标签也为所有DataFrame的行标签的并集 在这种模式下: 如果dfs是一个list,shares参数必须给出,且shares的数量必须与DataFrame的数量相同,作为HP的层标签 如果dfs是一个dict,shares参数不必给出,dfs的keys会被用于层标签,如果shares参数给出且符合要求, shares参数将取代dfs的keys参数

    dataframe_as == “htypes”,

    表示每个DataFrame代表一个htype的数据,每一列代表一个share。组合后的HP对象 列数与DataFrame的数量相同,而层数等于所有DataFrame的列的并集,行标签也为所有DataFrame的行标签的并集 在这种模式下, 如果dfs是一个list,htypes参数必须给出,且htypes的数量必须与DataFrame的数量相同,作为HP的列标签 如果dfs是一个dict,htypes参数不必给出,dfs的keys会被用于列标签,如果htypes参数给出且符合要求, htypes参数将取代dfs的keys参数

  • shares (str or list of str) –

    生成的HistoryPanel的层标签或股票名称标签。 如果堆叠方式为 »shares »,则层标签必须以dict的key的形式给出或者在shares参数中给出 以下两种参数均有效且等效: “000001.SZ, 000002.SZ, 000003.SZ” [“000001.SZ”, “000002.SZ”, “000003.SZ”]

    如果堆叠方式为 »htypes »,不需要给出shares,默认使用dfs的columns标签的并集作为输出的层标签 如果给出了shares,则会强制使用shares作为层标签,多出的标签会用fill_values填充, 多余的DataFrame数据会被丢弃

  • htypes (str or list of str) – 生成的HistoryPanel的列标签或数据类型标签。 如果堆叠方式为 »htypes »,则层标签必须以dict的key的形式给出或者在shares参数中给出 以下两种参数均有效且等效: “000001.SZ, 000002.SZ, 000003.SZ” [“000001.SZ”, “000002.SZ”, “000003.SZ”] 如果堆叠方式为 »shares »,不需要给出htypes,默认使用dfs的columns标签的并集作为列标签 如果给出了htypes,则会强制用它作为列标签,多出的标签会用fill_values填充, 多余的DataFrame数据会被丢弃

  • fill_value – 多余的位置用fill_value填充

Renvoie:

一个由多个单index的数据框组成的HistoryPanel对象

Type renvoyé:

HistoryPanel

Exemples

>>> df1 = pd.DataFrame([[1, 2, 3], [4, 5, 6]], index=['20210101', '20210102'], columns=['open', 'close', 'low'])
>>> df2 = pd.DataFrame([[7, 8, 9], [10, 11, 12]], index=['20210101', '20210102'], columns=['open', 'close', 'low'])
>>> df3 = pd.DataFrame([[13, 14, 15], [16, 17, 18]], index=['20210101', '20210102'], columns=['open', 'close', 'low'])
>>> dataframes = [df1, df2, df3]
>>> hp = stack_dataframes(dataframes, dataframe_as='shares', shares='000001.SZ, 000002.SZ, 000003.SZ')
>>> hp
share 0, label: 000001.SZ
         open  close   low
20210101  1.0    2.0   3.0
20210102  4.0    5.0   6.0
share 1, label: 000002.SZ
          open  close   low
20210101   7.0    8.0   9.0
20210102  10.0   11.0  12.0
share 2, label: 000003.SZ
          open  close   low
20210101  13.0   14.0  15.0
20210102  16.0   17.0  18.0
qteasy.dataframe_to_hp(df: DataFrame, hdates=None, htypes=None, shares=None, column_type: Optional[str] = None)[source]

根据DataFrame中的数据创建HistoryPanel对象。

Paramètres:
  • df (pd.DataFrame,) – 需要被转化为HistoryPanel的DataFrame。

  • hdates (DatetimeIndex or List of DateTime like, Optional) – 如果给出hdates,它会被用于转化后HistoryPanel的日期标签

  • htypes (str or list of str, Optional) – 转化后HistoryPanel的历史数据类型标签

  • shares (str or list of str, Optional) – 转化后HistoryPanel的股票代码标签

  • column_type (str, Default None) – DataFrame的column代表的数据类型,可以为 “shares” or “htype” 如果为None,则必须输入htypes和shares参数中的一个

Type renvoyé:

HistoryPanel对象

Notes

由于DataFrame只有一个二维数组,因此一个DataFrame只能转化为以下两种HistoryPanel之一: 1,只有一个share,包含一个或多个htype的HistoryPanel,这时HistoryPanel的shape为(1, dates, htypes)

在这种情况下,htypes可以由一个列表,或逗号分隔字符串给出,也可以由DataFrame对象的column Name来生成,而share则必须给出

2,只有一个dtype,包含一个或多个shares的HistoryPanel,这时HistoryPanel的shape为(shares, dates, 1) 具体转化为何种类型的HistoryPanel可以由column_type参数来指定,也可以通过给出hdates、htypes以及shares参数来由程序判断

Exemples

>>> dataframe = pd.DataFrame(
...     data=np.random.rand(3, 3),
...     index=pd.date_range(start='2020-01-01', periods=3),
...     columns=['A', 'B', 'C']
... )
>>> dataframe
Out:
                   A         B         C
2020-01-01  0.814394  0.284772  0.259304
2020-01-02  0.237300  0.483317  0.600886
2020-01-03  0.744638  0.255470  0.953640
>>> hp = dataframe_to_hp(dataframe, htypes=['open', 'close', 'high'], shares='000001')
>>> hp
share 0, label: 000001
                open     close      high
2020-01-01  0.814394  0.284772  0.259304
2020-01-02  0.237300  0.483317  0.600886
2020-01-03  0.744638  0.255470  0.953640
>>> hp = dataframe_to_hp(dataframe, htypes='open', shares=['000001', '000002', '000003'])
>>> hp
share 0, label: 000001
                open
2020-01-01  0.814394
2020-01-02  0.237300
2020-01-03  0.744638
share 1, label: 000002
                open
2020-01-01  0.284772
2020-01-02  0.483317
2020-01-03  0.255470
share 2, label: 000003
                open
2020-01-01  0.259304
2020-01-02  0.600886
2020-01-03  0.953640