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, 该属性包含所有列标签,即所有历史数据类型
- re_label(self, levels=None, rows=None, columns=None)[source]
该方法用于重新设置HistoryPanel的标签,如果不输入任何参数,则会自动重新生成标签
- 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}
这样便于内部根据股票代码对数据进行切片
- 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é:
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:
- 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é:
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的各个维度的尺寸
获取HistoryPanel中股票或资产品种的数量
返回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é:
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é:
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