4. HistoryPanel Clase

Clase de datos históricos HistoryPanel:

HistoryPanel Estructura y segmentación de datos

HistoryPanel es esencialmente un numpy.ndarray tridimensional, en el que los tres ejes representan:

  • eje 0 / niveles: dimensión del instrumento; cada nivel corresponde a una acción o un índice, y la lista de etiquetas es shares;

  • eje 1 / filas: dimensión temporal; cada fila corresponde a un momento determinado y la lista de etiquetas es hdates;

  • eje 2 / columnas: dimensión de tipo de datos históricos; cada columna corresponde a un tipo de datos y la lista de etiquetas es htypes.

Con estas etiquetas de tres ejes, puede dividir de manera flexible un HistoryPanel usando corchetes []. The basic rule is [htype_slicer, share_slicer, date_slicer]; when dimensions are omitted, the single-segment form (e.g., hp['close']) still returns a sub-HistoryPanel (with axis labels). For a raw matrix, use .values / .to_numpy().

El eje del tiempo (el tercer eje) también admite: un único ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦ CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧⟦CÓDIGO16⟧⟦CÓDIGO17⟧~qteasy.HistoryPanel.donde en cambio.

Ejemplo de escritura típico:

hp['close']                       # 所有标的的收盘价
hp['close,open,high']            # 所有标的的多种价量数据
hp[:, '000300.SH']               # 单一标的的全部历史数据
hp['close:high', ['000300.SH', '000500.SH'], '20100101:20101231']
                                 # 多标的、数据类型与时间区间联合切片
hp.loc[0:5]                       # 与 hp[:, :, 0:5] 等价,按时间轴截取
class qteasy.HistoryPanel(values: Optional[ndarray] = None, levels=None, rows=None, columns=None)[fuente]

En qteasy, es un contenedor de datos tridimensional que se utiliza para gestionar de forma centralizada datos históricos en múltiples instrumentos, múltiples puntos temporales y múltiples tipos de datos.

HistoryPanel es esencialmente un numpy.ndarray tridimensional, y los tres ejes representan el instrumento (acciones) y el tiempo.

(hdates) y tipos de datos históricos (htypes), que admiten cortes y reetiquetados flexibles a lo largo de cualquier eje, así como conversión mutua con

pandas DataFrame y sirve como contenedor de datos para get_history_data y la pila de visualización

el puente central (por ejemplo, entre HistoryPanel.plot() and qt.candle).

Indexación y exportación de matrices: ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦ CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧⟦CÓDIGO16⟧⟦CÓDIGO17⟧⟦CÓDIGO18⟧⟦ CÓDIGO19⟧⟦CÓDIGO20⟧⟦CÓDIGO21⟧⟦CÓDIGO22⟧⟦CÓDIGO23⟧⟦CÓDIGO24⟧.

API orientada a la ergonomía: nombres de columnas que son identificadores válidos de Python y existen en ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧ ⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧). Documentos de usuario: la página Sphinx HistoryPanel y el tutorial “Uso de HistoryPanel para manipular y analizar datos históricos” (§6 y §6.1).

Para obtener una descripción estructural más detallada (etiquetas de ejes, ejemplos de corte, gestión de etiquetas, etc.), consulte la sección correspondiente en la documentación “clase HistoryPanel”.

__eq__(other: Any) Any[fuente]

Por elementos self == other; unsupported types return NotImplemented.

Parámetros:

other (Any) – Operando derecho.

Devuelve:

Un ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧.

Tipo del valor devuelto:

numpy.ndarray or NotImplemented

__ge__(other: Any) ndarray[fuente]

Equivalente a la comparación por elementos de self and other using ge from the operator module; returns a numpy.ndarray with dtype bool (no es un subpanel).

Parámetros:

other (Any) – Operando derecho; la semántica es la misma que __lt__().

Devuelve:

Matriz de resultados booleanos.

Tipo del valor devuelto:

numpy.ndarray

__getattr__(name: str) Any[fuente]

Resuelva un nombre de columna de identificador válido como self[name] (solo lectura); para no identificadores o nombres de columnas desconocidos, utilice la indexación entre corchetes.

Para la asignación de columnas, siga utilizando hp['col'] = ...; no se alinea con la ruta de escritura basada en atributos de pandas.

Parámetros:

name (str) – Nombre del atributo; debe ser un identificador de Python válido para corresponder posiblemente a una columna htypes (panel no vacío).

Devuelve:

Un subpanel idéntico a self[name]; on an empty panel, delegates to __getitem__ y devuelve un subpanel vacío.

Tipo del valor devuelto:

HistoryPanel

Muestra:

AttributeError – Un identificador no válido o un nombre de columna que no existe en el panel actual (en inglés, lo que solicita el uso de indexación entre corchetes).

Notas

Los nombres/descriptores de métodos existentes (por ejemplo, where, values) take precedence over column names: columns with the same name must still be accessed as hp['where'] and the like. Non-identifier column names (e.g. close|b) no pueden usar el acceso por puntos.

Ejemplos

>>> import pandas as pd
>>> import numpy as np
>>> hp = HistoryPanel(
...     np.arange(24, dtype=float).reshape(2, 3, 4),
...     levels=['A', 'B'],
...     rows=pd.date_range('2020-01-01', periods=3),
...     columns=['a', 'b', 'c', 'd'],
... )
>>> np.allclose(hp.a.values, hp['a'].values)
True
__getitem__(keys=None) HistoryPanel[fuente]

Corte a lo largo de los tres ejes htypes / share / hdates y devuelva un sub-HistoryPanel con las etiquetas de eje correctas.

El primer segmento es el tipo de datos (htypes), el segundo es el instrumento (shares) y el tercero es el tiempo (hdates); si se omite, ese eje selecciona todo. Si necesita un ndarray, use sub.values or sub.to_numpy(). A subpanel’s values may share memory with the parent panel (NumPy view rules); if you need an independent copy, use subpanel(..., copy=True) or sub.copy().

Al agregar una nueva columna en el objeto principal a través de __setitem__, the entire values block of the parent panel will be replaced: by default, a subpanel with copy=False will not show the new column name, and its values may still point to the old array before the column expansion; the sub-object obtained by subpanel(copy=True) no se ve afectado. Al sobrescribir una columna existente en el panel principal, los datos divididos compartidos con la subvista se actualizarán junto con el búfer principal (siempre que siga siendo una vista en el mismo bloque subyacente).

Para un panel vacío (is_empty), indexing with any key returns an empty HistoryPanel.

Notas

**Eje de tiempo (el tercer segmento ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO 10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧loc⟦CÓDIGO16⟧⟦CÓDIGO17⟧⟦CÓDIGO18⟧donde.

Parámetros:

keys (list, tuple, slice, str, int or None) – Clave de corte; la tupla triple (htypes, shares, hdates) es consistente con el comportamiento histórico.

Devuelve:

Subpanel; para obtener la matriz, use su .values / .to_numpy().

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> 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'])
>>> sub = hp['close']
>>> isinstance(sub, HistoryPanel)
True
>>> sub.shape
(3, 10, 1)
>>> sub.htypes
['close']
>>> np.all(sub.values == 40)
True
__gt__(other: Any) ndarray[fuente]

Equivalente a la comparación por elementos de self and other using gt from the operator module; returns a numpy.ndarray with dtype bool (no es un subpanel).

Parámetros:

other (Any) – Operando derecho; la semántica es la misma que __lt__().

Devuelve:

Matriz de resultados booleanos.

Tipo del valor devuelto:

numpy.ndarray

__le__(other: Any) ndarray[fuente]

Equivalente a la comparación por elementos de self and other using le from the operator module; returns a numpy.ndarray with dtype bool (no es un subpanel).

Parámetros:

other (Any) – Operando derecho; la semántica es la misma que __lt__().

Devuelve:

Matriz de resultados booleanos.

Tipo del valor devuelto:

numpy.ndarray

__lt__(other: Any) ndarray[fuente]

Equivalente a la comparación por elementos de self and other using lt from the operator module; returns a numpy.ndarray with dtype bool (no es un subpanel).

Parámetros:

other (Any) – Un escalar, un ndarray, or another HistoryPanel transmitible (debe satisfacer las reglas de alineación).

Devuelve:

Matriz de resultados booleanos.

Tipo del valor devuelto:

numpy.ndarray

Muestra:
  • TypeError – Tipos de operandos no admitidos (en inglés).

  • ValueError – Levantado cuando los dos paneles no se pueden alinear o retransmitir según las normas (en inglés).

__ne__(other: Any) Any[fuente]

Por elementos self != other; unsupported types return NotImplemented.

Parámetros:

other (Any) – Operando derecho.

Devuelve:

Un ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧.

Tipo del valor devuelto:

numpy.ndarray or NotImplemented

__setitem__(key: Any, value: Any) None[fuente]

Agregue una columna en su lugar por nombre de columna o sobrescriba una columna existente (el tercer eje de htypes).

Solo acepta una cadena de tiempo de ejecución no vacía ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦ CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧⟦CÓDIGO16⟧⟦CÓDIGO17⟧⟦CÓDIGO18⟧ no se ven afectados. Cuando el padre sobrescribe una columna existente, las subvistas que comparten el bloque subyacente con el padre se actualizarán junto con el padre.

Parámetros:
  • key (Any) – Nombre de la columna (tipoh). Debe ser str; non-str raises TypeError, and an empty string raises ValueError (mensaje en inglés).

  • value (Any) – Un valor numérico que puede ser np.asarray’d and broadcast to (M, L) (scalar, (M, L), (M, L, 1), etc.).

Devuelve:

Modifica este objeto en su lugar; no devuelve nada.

Tipo del valor devuelto:

None

Muestra:
  • TypeError – Generado cuando key is not str (mensaje en inglés).

  • ValueError – Generado cuando el panel está vacío, key is an empty string, or value cannot be broadcast to (M, L) (mensaje en inglés).

Ejemplos

>>> hp = HistoryPanel(np.ones((2, 5, 2)), levels=['A', 'B'],
...                   rows=pd.date_range('2020-01-01', periods=5),
...                   columns=['open', 'close'])
>>> hp['twice_close'] = hp['close'].values * 2
>>> 'twice_close' in hp.htypes
True
>>> hp['const'] = 0.5
>>> np.all(hp.values[:, :, hp.htypes.index('const')] == 0.5)
True
as_type(dtype)[fuente]

Convierta el tipo de datos de HistoryPanel al tipo dtype, dtype solo puede ser “float” o “int”

Parámetros:

dtype (str, {'float', 'int'}) – Tipo de datos a convertir

Tipo del valor devuelto:

self

Muestra:

AssertionError – Si el tipo de datos de entrada es incorrecto o si se ingresan otros tipos de datos distintos de float/int

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

Trace un gráfico de velas basado en el HistoryPanel data (already handled uniformly by plot() actual).

Notas

  • Para la nueva visualización, se recomienda llamar a HistoryPanel.plot() directamente y usar htypes/layout para controlar si se generan tipos de gráficos como velas japonesas, volumen, etc.

  • Internamente, este método delega al punto de entrada unificado del submódulo de visualización. Su comportamiento sigue siendo coherente con plot() y existe solo como un alias semántico.

property column_count

Obtenga la cantidad de columnas en HistoryPanel o la cantidad de datos históricos

property columns

Devuelve un dictado que representa los datos históricos de HistoryPanel, asignando los datos históricos a índices de columnas. Esto facilita la división interna de los datos por código de stock.

copy(deep: bool = True) HistoryPanel[fuente]

Copie y cree un nuevo objeto HistoryPanel.

Devuelve una copia profunda de forma predeterminada, lo que significa que el nuevo objeto y el objeto original no afectan el values array; when you need to match NumPy’s view semantics and share underlying data in performance-sensitive scenarios, set deep=False subyacente de cada uno.

Parámetros:

deep (bool, default True) – Si se debe realizar una copia profunda de la matriz numérica subyacente values: - Verdadero: copia profunda; modificar la copia no afecta el objeto original; - Falso: copia superficial (comparte la matriz subyacente); modificar la copia afectará sincrónicamente al objeto original.

Devuelve:

El nuevo objeto copiado; Las etiquetas de los ejes (shares/hdates/htypes) son las mismas que las del objeto original.

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy import HistoryPanel
>>> hp = HistoryPanel(
...     np.arange(12, dtype=float).reshape(2, 3, 2),
...     levels=['A', 'B'],
...     rows=pd.date_range('2020-01-01', periods=3),
...     columns=['close', 'open'],
... )
>>> hp
share 0, label: A
            close  open
2020-01-01    0.0   1.0
2020-01-02    2.0   3.0
2020-01-03    4.0   5.0
share 1, label: B
            close  open
2020-01-01    6.0   7.0
2020-01-02    8.0   9.0
2020-01-03   10.0  11.0
>>> hp2 = hp.copy()  # deep=True
>>> hp2.values[0, 0, 0] = -1.0
>>> hp2
share 0, label: A
            close  open
2020-01-01   -1.0   1.0
2020-01-02    2.0   3.0
2020-01-03    4.0   5.0
share 1, label: B
            close  open
2020-01-01    6.0   7.0
2020-01-02    8.0   9.0
2020-01-03   10.0  11.0
>>> hp
share 0, label: A
            close  open
2020-01-01    0.0   1.0
2020-01-02    2.0   3.0
2020-01-03    4.0   5.0
share 1, label: B
            close  open
2020-01-01    6.0   7.0
2020-01-02    8.0   9.0
2020-01-03   10.0  11.0
>>> hp3 = hp.copy(deep=False)
>>> hp3.values[0, 0, 0] = -2.0
>>> hp3
share 0, label: A
            close  open
2020-01-01   -2.0   1.0
2020-01-02    2.0   3.0
2020-01-03    4.0   5.0
share 1, label: B
            close  open
2020-01-01    6.0   7.0
2020-01-02    8.0   9.0
2020-01-03   10.0  11.0
>>> hp
share 0, label: A
            close  open
2020-01-01   -2.0   1.0
2020-01-02    2.0   3.0
2020-01-03    4.0   5.0
share 1, label: B
            close  open
2020-01-01    6.0   7.0
2020-01-02    8.0   9.0
2020-01-03   10.0  11.0
ffill(init_val=nan)[fuente]

Complete los valores faltantes hacia adelante, cuando falten valores en los datos históricos, use los datos válidos más recientes antes del valor faltante para completar el valor faltante

Parámetros:

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

Devuelve:

out

Tipo del valor devuelto:

HistoryPanel, 填充后的HistoryPanel对象

Ejemplos

>>> 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: Union[int, float])[fuente]

Utilice with_value para completar todos los valores inf en HistoryPanel

Parámetros:

with_val (float or int) – Valor de llenado

Devuelve:

out

Tipo del valor devuelto:

HistoryPanel, 填充后的HistoryPanel对象

fillna(with_val: Union[int, float])[fuente]

Los valores Nan en HistoryPanel se completan con with_value

Parámetros:

with_val (float or int) – Valor de llenado

Devuelve:

out

Tipo del valor devuelto:

HistoryPanel, 填充后的HistoryPanel对象

flatten(along=None)[fuente]

Igual que HistoryPanel.flatten_to_dataframe()

Parámetros:

along (str, {'col', 'row', 'column'} Default: 'row') – Aplanar cada capa de HistoryPanel, a lo largo de la dirección de la fila o columna, “col” o “columna” significa aplanar a lo largo de la dirección de la columna, “fila” significa aplanar a lo largo de la dirección de la fila

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> 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')[fuente]

Aplanar un HistoryPanel en un DataFrame

Los datos multicapa del HistoryPanel se «aplanarán» a las columnas del DataFrame, convirtiéndose en un MultiIndex, o los datos multicapa se aplanarán a las filas del DataFrame, convirtiéndose también en un MultiIndex. Si se aplana en filas o columnas depende del parámetro largo

Parámetros:

along (str, {'col', 'row', 'column'} Default: 'row') – Aplanar cada capa de HistoryPanel, a lo largo de la dirección de la fila o columna, “col” o “columna” significa aplanar a lo largo de la dirección de la columna, “fila” significa aplanar a lo largo de la dirección de la fila

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> 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)[fuente]

Devuelve las primeras filas de HistoryPanel en forma de un marco de datos de múltiples índices, con un valor predeterminado de cinco filas

Parámetros:

row_count (int, default 5) – Número de filas para imprimir

Devuelve:

marco de datos, multiindexado por share y htype como columnas, con solo las primeras filas de row_count * , un marco de datos con un índice múltiple de share y htype como columnas, que contiene solo las primeras filas de row_count

Ejemplos

>>> 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)[fuente]

Devuelve las últimas filas de HistoryPanel en forma de un marco de datos de múltiples índices, con un valor predeterminado de cinco filas

Parámetros:

row_count (int, default 5) – Número de filas para imprimir

Devuelve:

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

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

Ejemplos

>>> 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

Obtenga la cantidad de tipos de datos históricos en HistoryPanel

property hdates

Obtenga la lista de marcas de tiempo de fechas históricas en HistoryPanel

head(row_count=5)[fuente]

Devuelve las primeras filas de HistoryPanel, por defecto cinco filas

Parámetros:

row_count (int, default 5) – Número de filas para imprimir

Devuelve:

marco de datos, multiindexado por share y htype como columnas, con solo las primeras filas de row_count * , un marco de datos con un índice múltiple de share y htype como columnas, que contiene solo las primeras filas de row_count

Ejemplos

>>> 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

Obtenga la cantidad de tipos de datos históricos en HistoryPanel

property htypes

Obtenga la lista de tipos de datos históricos en HistoryPanel

info()[fuente]

Imprime la información de este objeto HistoryPanel

Tipo del valor devuelto:

None

Ejemplos

>>> 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

Compruebe si el HistoryPanel está vacío

isegment(start_index=None, end_index=None)[fuente]
Obtenga un segmento de HistoryPanel, start_index y end_index son números int, que representan el número de secuencia de fecha, regrese

Devuelve todos los datos entre los dos números de secuencia, el tipo devuelto es HistoryPanel que contiene todos los datos compartidos y htypes.

Parámetros:
  • start_index (pd.TimeStamp) – Índice de fecha de inicio

  • end_index (pd.TimeStamp) – Índice de fecha de finalización

Devuelve:

out – Un HistoryPanel que contiene todos los datos compartidos y htypes entre start_date y end_date

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> 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)[fuente]

Conecte un objeto HistoryPanel con otro objeto HistoryPanel para generar un nuevo HistoryPanel:

Las etiquetas de fila, columna y capa del nuevo HistoryPanel son la unión de las etiquetas de fila, columna y capa de los dos HistoryPanels originales. En otras palabras, las etiquetas de fila, columna y capa del nuevo HistoryPanel contienen completamente las etiquetas correspondientes de los dos objetos HistoryPanel.

Parámetros:
  • other (HistoryPanel) – El otro HistoryPanel que se fusionará

  • same_shares (bool, Default False) – Si las partes compartidas de los dos HP son las mismas, se puede omitir la etiqueta que fusiona la dimensión de las partes compartidas para ahorrar tiempo. El valor predeterminado es Falso,

  • same_htypes (bool, Default False) – Si los tipos h de los dos HP son los mismos, se puede omitir la combinación de etiquetas de la dimensión de tipos h para ahorrar tiempo. El valor predeterminado es Falso,

  • same_hdates (bool, Default False) – Si las fechas de los dos HP son las mismas, se puede omitir la combinación de etiquetas de la dimensión de las fechas para ahorrar tiempo. El valor predeterminado es Falso,

  • fill_value (float, Default np.nan) – Valor de llenado para datos vacíos, cuando el HP combinado tiene datos vacíos, qué valor se debe usar para completarlos, el valor predeterminado es np.nan

Tipo del valor devuelto:

HistoryPanel, 一个新的History Panel对象

Ejemplos

>>> # 如果两个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()[fuente]

Longitud del objeto HistoryPanel, es decir, número de fechas

Devuelve:

Número de fechas

Tipo del valor devuelto:

int

Ejemplos

>>> 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

Número de acciones o variedades de activos en el HistoryPanel

property levels

Devuelve el dictado de etiqueta de capa de HistoryPanel (una asignación del código de stock al índice de capa).

Dentro de la biblioteca, se puede combinar con values para indexación por capas; externamente, prefiera utilizar el corte entre corchetes para acceder a los datos de cada capa.

plot(shares: Optional[Union[str, Iterable[str]]] = None, layout: str = 'auto', interactive: bool = False, highlight: Optional[Any] = None, plotly_backend_app: str = 'auto', group_titles: Optional[Sequence[str]] = None, max_shares_per_figure: int = 5, page: int = 1, **kwargs)[fuente]

Seleccione automáticamente el tipo de gráfico según los tipos h y recursos compartidos existentes en HistoryPanel y trace el gráfico.

Este método solo consume datos existentes y no realiza nuevos cálculos. El tipo de gráfico lo determina un registro interno basado en htypes (por ejemplo, OHLC→K-line, vol→volume, tres columnas MACD→gráfico MACD, de lo contrario→gráfico de líneas). Admite diseños de superposición/pila de un solo instrumento y de varios instrumentos, así como gráficos estáticos basados ​​en matplotlib y gráficos interactivos basados ​​en Plotly.

Parámetros:
  • shares (str or sequence of str, optional) – El subconjunto de tickers que se incluirán en la trama; de forma predeterminada, se utilizan todos los recursos compartidos en HistoryPanel.

  • layout ({'overlay', 'stack', 'auto'}, default 'auto') – Modo de diseño de múltiples instrumentos; “overlay” superpone dentro del mismo grupo, “stack” muestra varios grupos en filas separadas, y cuando es “auto”, HP_OVERLAY_GROUP_SHARE_COUNT usa overlay solo para esa cantidad de instrumentos y usa stack para el resto.

  • interactive (bool, default False) – Cuando sea Verdadero, use el backend interactivo de Plotly (requiere instalar plotly y anywidget/ipywidgets); cuando sea falso, utilice el backend estático matplotlib.

  • highlight (dict or str, optional) – Configuración resaltada: puede ser {'condition': 'max'|'min' or a boolean array, 'style': {...}}, o abreviadamente como “max”/”min”.

  • plotly_backend_app ({'auto', 'FigureWidget', 'html'}, default 'auto') – Sólo es eficaz cuando ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧.

  • max_shares_per_figure (int, default 5) – El número máximo de acciones que se mostrarán en un solo gráfico. Cuando el número de acciones solicitado supere este valor, se dividirá en páginas; puede usar el parámetro page para elegir qué página mostrar.

  • page (int, default 1) – El número de página que se mostrará (basado en 1). Cuando el número de acciones excede max_shares_per_figure, page=1 is page 1, page=2 es la página 2, y así sucesivamente.

  • **kwargs – Parámetros de extensión reservados; no se utiliza en la versión actual.

Devuelve:

Cuando interactivo = Falso, devuelve una figura matplotlib; cuando interactivo = Verdadero, devuelve un FigureWidget, un contenedor HTML o la figura sin formato dependiendo de plotly_backend_app.

Tipo del valor devuelto:

matplotlib.figure.Figure or plotly.graph_objs.FigureWidget or _PlotlyFigureWrapper

Notas

Cuando el registro genera un gráfico principal de velas OHLC completas, se muestra el área superior de resumen de OHLC: para gráficos estáticos, se fija en el resumen de la última barra de la línea de tiempo; para los gráficos interactivos, inicialmente coincide con eso y se actualiza en la barra en la que se hizo clic después de hacer clic en una barra (el texto de resumen de cara al usuario está en inglés). Si no hay un gráfico principal de velas (por ejemplo, solo una línea de cierre), esta área de resumen no se muestra.

Ejemplos

>>> import qteasy as qt
>>> hp = qt.get_history_data(htype_names='open, high, low, close, vol',
...                          shares='000300.SH', rows=200)
>>> fig = hp.plot()
>>> fig_interactive = hp.plot(interactive=True, highlight='max')

Ver también

qt.get_kline

Obtenga datos de la línea K y, opcionalmente, configure as_panel=True para obtener un HistoryPanel.

re_label(shares: Optional[Union[str, list]] = None, htypes: Optional[Union[str, list]] = None, hdates: Optional[Union[str, list]] = None) None[fuente]

Reasigne etiquetas de capa, fila y columna al objeto HistoryPanel

Parámetros:
  • shares (str or list of str) – Lista de acciones

  • htypes (str or list of str) – Lista de tipos de datos

  • hdates (str or list of str) – Lista de fechas

Tipo del valor devuelto:

None

Ejemplos

>>> 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
property row_count

Obtenga el número de filas en HistoryPanel

property rows

Devuelve el diccionario de fechas de HistoryPanel. Este diccionario vincula fechas con índices de filas, por lo que internamente puede dividir o acceder a los datos más rápido.

Devuelve:

Diccionario de fechas

Tipo del valor devuelto:

dict

segment(start_date=None, end_date=None)[fuente]
Obtenga un segmento de fecha de HistoryPanel, fecha_inicio y fecha_final son datos de tipo fecha, devuelva

Esto devuelve todos los datos entre las dos fechas, el tipo devuelto es HistoryPanel que contiene todos los datos compartidos y htypes.

Parámetros:
  • start_date (开始日期) –

  • end_date (结束日期) –

Devuelve:

out – Un HistoryPanel que contiene todos los datos compartidos y htypes entre start_date y end_date

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> 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

Obtenga el tamaño de cada dimensión de HistoryPanel

property share_count

Obtenga la cantidad de acciones o variedades de activos en HistoryPanel

property shares

Devuelve la etiqueta de capa de HistoryPanel - lista de existencias

slice(shares=None, htypes=None)[fuente]
Obtenga un segmento de HistoryPanel para una acción o tipo de datos, las acciones y los tipos h pueden ser una lista o un carácter separado por comas

, indicando el tipo de stock o dato a obtener.

Parámetros:
  • shares (str or list of str) – Lista de acciones requeridas

  • htypes (str or list of str) – Lista de tipos de datos requeridos

Devuelve:

out – Un HistoryPanel que contiene los datos de las acciones y los tipos de datos especificados en acciones y htypes

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> 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.slice(shares='000001,000003', htypes='close, open')
share 0, label: 000001
            close  open
2015-01-05     40    10
2015-01-06     40    10
2015-01-07     40    10
2015-01-08     40    10
2015-01-09     40    10
2015-01-10     40    10
2015-01-11     40    10
2015-01-12     40    10
2015-01-13     40    10
2015-01-14     40    10
share 2, label: 000003
            close  open
2015-01-05     40    10
2015-01-06     40    10
2015-01-07     40    10
2015-01-08     40    10
2015-01-09     40    10
2015-01-10     40    10
2015-01-11     40    10
2015-01-12     40    10
2015-01-13     40    10
2015-01-14     40    10
slice_to_dataframe(htype: Optional[Union[str, int]] = None, share: Optional[Union[str, int]] = None, dropna: bool = False, inf_as_na: bool = False) DataFrame[fuente]

Convierta el segmento especificado en el objeto HistoryPanel en un DataFrame

Especifique htype o share y convierta el segmento de datos correspondiente a este htype o share en un DataFrame. Dado que el objeto HistoryPanel contiene datos tridimensionales, se debe especificar uno de los parámetros htype o share durante la conversión.

Parámetros:
  • htype (str or int,) – Indica el segmento de tipo de datos que necesita generar un DataFrame. Si se proporciona este parámetro, después de ubicar el segmento correspondiente al htype, todos los datos de todas las acciones y fechas correspondientes al htype se convertirán en un DataFrame. Si el tipo es str, indica el nombre del htype, y si el tipo es int, representa el número de columna donde se encuentra el htype

  • share (str or int,) – Indica el segmento de código bursátil que necesita generar un DataFrame. Si se proporciona este parámetro, después de ubicar el segmento correspondiente al recurso compartido, todos los datos de todos los tipos de datos y fechas correspondientes al recurso compartido se convertirán en un DataFrame. Si el tipo es str, indica el código de stock, y si el tipo es int, representa el número de capa donde se encuentra el recurso compartido.

  • dropna (bool, Default False) – Si es verdadero, elimine los valores de NaN

  • inf_as_na (bool, Default False) – Si es Verdadero, trate los valores inf como valores NaN y elimínelos juntos. No válido cuando dropna es falso

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> 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
subpanel(htypes: Optional[Union[str, Sequence[str], slice, int, list]] = None, shares: Optional[Union[str, Sequence[str], slice, int, list]] = None, hdates: Optional[Union[str, slice, Sequence[Any], int, list]] = None, *, copy: bool = True) HistoryPanel[fuente]

Seleccione un subpanel junto con htypes/shares/hdates mediante argumentos de palabras clave para evitar confusiones sobre el orden de los ejes del triple.

⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧ El subpanel generalmente no incluirá automáticamente la nueva columna y aún puede hacer referencia al búfer anterior a que se agregara la columna.

Parámetros:
  • htypes (str, sequence, slice or int, optional) – Selección de columna (tipo de datos); la semántica es la misma que la del primer segmento de panel[htypes, ...].

  • shares (str, sequence, slice or int, optional) – Selección a nivel de instrumento; la semántica es la misma que la del segundo segmento de panel[:, shares, ...].

  • hdates (str, sequence, slice or int, optional) – Selección del eje temporal; la semántica es la misma que la del tercer segmento de panel[..., hdates].

  • copy (bool, default True) – Cuando es Verdadero, hace una copia de matriz del resultado del corte.

Devuelve:

Un subpanel formado por los subconjuntos de ejes seleccionados; la entrada vacía corresponde a un panel vacío.

Tipo del valor devuelto:

HistoryPanel

Notas

Similar a cortar con copy=False in __getitem__: after the parent __setitem__ appends columns, a copy=False child object usually does not include the new columns; for a stable snapshot, keep copy=True (predeterminado).

tail(row_count=5)[fuente]

Devuelve las últimas filas de HistoryPanel, por defecto cinco filas

Parámetros:

row_count (int, default 5) – Número de filas para imprimir

Devuelve:

marco de datos, multiindexado por share y htype como columnas, con solo las últimas filas de row_count * , un marco de datos con un índice múltiple de share y htype como columnas, que contiene solo las últimas filas de row_count

Ejemplos

>>> 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[fuente]

Convierta un HistoryPanel en un dict: las claves son share o htype, y los valores son el pandas.DataFrame correspondiente.

Parámetros:

by (str, default 'share') – Cuando se establece en 'share' / 'shares', split along the share axis: dict keys are stock tickers and values are the corresponding DataFrame; when set to 'htype' / 'htypes', split along the data-type axis: dict keys are historical data type names and values are the corresponding DataFrame.

Devuelve:

df_dict

Tipo del valor devuelto:

dict, {str: pandas.DataFrame}

Ejemplos

>>> 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)[fuente]

Igual que HistoryPanel.flatten_to_dataframe()

Parámetros:

along (str, {'col', 'row', 'column'} Default: 'row') – Aplanar cada capa de HistoryPanel, a lo largo de la dirección de la fila o columna, “col” o “columna” significa aplanar a lo largo de la dirección de la columna, “fila” significa aplanar a lo largo de la dirección de la fila

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> 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
to_numpy(copy: bool = False) ndarray[fuente]

Devuelve un ndarray con la misma forma que values; use copy=True cuando necesites una copia independiente.

Un panel vacío devuelve una matriz flotante con la forma (0, 0, 0). When non-empty, copy=False has the same semantics as numpy.asarray(self.values) and can share memory with the internal buffer. If you later append new columns to the parent object via __setitem__, the parent object will replace the entire underlying buffer; the array previously obtained with copy=False no incluirá automáticamente las nuevas columnas y ya no debe considerarse como una instantánea autorizada de el panel actual.

Parámetros:

copy (bool, default False) – Si es Verdadero, devuelve una copia de la matriz; modificar el valor de retorno no afectará los datos de este objeto.

Devuelve:

Una matriz 3D con la misma forma que values; (0, 0, 0) para un panel vacío.

Tipo del valor devuelto:

numpy.ndarray

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy.history import HistoryPanel
>>> hp = HistoryPanel(
...     np.arange(12, dtype=float).reshape(2, 3, 2),
...     levels=['A', 'B'],
...     rows=pd.date_range('2020-01-01', periods=3),
...     columns=['close', 'open'],
... )
>>> hp.to_numpy(copy=True)
array([[[ 0.,  1.],
        [ 2.,  3.],
        [ 4.,  5.]],

       [[ 6.,  7.],
        [ 8.,  9.],
        [10., 11.]]])
to_share_frame(share: Union[str, int]) DataFrame[fuente]

Divida todos los tipos de datos de una sola acción en HistoryPanel en un DataFrame.

Este método es azúcar sintáctico para slice_to_dataframe(share=...). The returned DataFrame uses time as the index and all htypes como columnas, lo que lo hace adecuado para análisis de indicadores completos y de stock único.

Parámetros:

share (str or int) – Ticker bursátil o índice de nivel; la semántica es la misma que la de share parameter in slice_to_dataframe(share=...).

Devuelve:

El índice de fila es hdates, columns are htypes y contiene todos los datos históricos de esta acción en todos los puntos temporales.

Tipo del valor devuelto:

pandas.DataFrame

unstack(by: str = 'share') dict[fuente]

Equivalente al método self.to_df_dict(), que es un alias del método self.to_df_dict().

Parámetros:

by (str, {'share', 'htype'}, default 'share') – Especifique si desea desapilar por recurso compartido o tipo h; el valor predeterminado es compartir.

Devuelve:

El resultado después del desapilado es un diccionario con la clave como share o htype y el valor como el DataFrame correspondiente.

Tipo del valor devuelto:

dict

Ejemplos

>>> 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

Devuelve el búfer de datos 3D interno del objeto actual (la misma referencia que _values).

Cuando no está vacío, apunta a la misma memoria que ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧ ⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧⟦CÓDIGO16⟧ internamente antes de guardarlo.

Devuelve:

Forma (level_count, row_count, column_count); None para un panel vacío.

Tipo del valor devuelto:

numpy.ndarray or None

El objeto HistoryPanel proporciona estadísticas de datos financieros y métodos de agregación de uso común, incluidas estadísticas descriptivas, cálculos de ventanas móviles, cálculos de métricas de rentabilidad y riesgo, así como cálculos de indicadores técnicos y de velas japonesas (línea K). Los detalles son los siguientes:

Estadísticas básicas y agregación.

Los siguientes métodos proporcionan una funcionalidad estadística similar a la de los pandas en los datos 3D del HistoryPanel:

HistoryPanel.describe(by: Optional[str] = 'share', percentiles: tuple = (0.25, 0.5, 0.75), include: str = 'numeric', ddof: int = 1) DataFrame[fuente]

Calcule estadísticas descriptivas básicas para un HistoryPanel, similar a pandas.DataFrame.describe.

Puede calcular estadísticas descriptivas como recuento, media, estándar, mínimo, máximo y cuantiles especificados para datos numéricos por porcentaje, tipo de datos históricos (tipoh) o desde una perspectiva global.

Parámetros:
  • by ({'share', 'htype', None}, default 'share') – Perspectiva estadística: - “compartir”: un resultado que describe por acción, concatenado en un MultiIndex con columnas (htype, stat); - “htype”: la distribución de cada htype en todas las acciones y épocas; - Ninguno: trate todos los valores numéricos como un único conjunto de muestras general.

  • percentiles (tuple of float, default (0.25, 0.5, 0.75)) – Lista de cuantiles a calcular; los valores deben estar en el intervalo (0, 1).

  • include ({'numeric', None}, default 'numeric') – Actualmente sólo se admiten estadísticas numéricas; Las columnas no numéricas se ignorarán automáticamente.

  • ddof (int, default 1) – El parámetro de grados de libertad al calcular la desviación estándar; solo tiene efecto cuando by is None.

Devuelve:

Una tabla de resultados de estadísticas descriptivas cuya estructura de índice/columnas depende del valor de by.

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> hp = HistoryPanel(np.random.rand(2, 10, 2),
...                   levels=['000001.SZ', '000002.SZ'],
...                   rows=pd.date_range('2020-01-01', periods=10),
...                   columns=['open', 'close'])
>>> desc_share = hp.describe(by='share')
>>> desc_share
share 0, label: 000001.SZ
            open      close
count  10.000000  10.000000
mean    0.456789   0.567890
std     0.129099   0.086603
min     0.123456   0.234567
25%     0.234567   0.345678
50%     0.345678   0.456789
75%     0.567890   0.678901
share 1, label: 000002.SZ
            open      close
count  10.000000  10.000000
mean    0.345678   0.456789
std     0.149361   0.110769
min     0.012345   0.123456
25%     0.123456   0.234567
50%     0.234567   0.345678
75%     0.456789   0.567890
>>> sorted(desc_share.columns.get_level_values('stat').unique().tolist())
['25%', '50%', '75%', 'count', 'max', 'mean', 'min', 'std']
>>> desc_htype = hp.describe(by='htype')
>>> 'open' in desc_htype.index
True
HistoryPanel.mean(by: str = 'share', skipna: bool = True) DataFrame[fuente]

Calcule las estadísticas medias para un HistoryPanel por recurso compartido o tipo de datos.

Parámetros:
  • by ({'share', 'htype'}, default 'share') – Dimensión de agregación: - “compartir”: calcula la media sobre el eje temporal para cada acción, devolviendo un DataFrame con índice como acciones y columnas como tipos h; - “htype”: calcula la media de todas las acciones para cada htype, devolviendo el DataFrame transpuesto.

  • skipna (bool, default True) – Si se ignora NaN al calcular la media.

Devuelve:

Una tabla de resultados medios después de agregar a lo largo de la dimensión especificada.

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> hp = HistoryPanel(np.random.rand(2, 3, 2),
...                   levels=['000001.SZ', '000002.SZ'],
...                   rows=pd.date_range('2020-01-01', periods=3),
...                   columns=['open', 'close'])
>>> hp.mean()
            open     close
000001.SZ  0.456789  0.567890
000002.SZ  0.345678  0.456789
HistoryPanel.std(by: str = 'share', skipna: bool = True) DataFrame[fuente]

Calcule las estadísticas de desviación estándar para HistoryPanel por recurso compartido o tipo de datos (ddof=1).

Parámetros:
  • by ({'share', 'htype'}, default 'share') – La dimensión de agregación; misma semántica que mean().

  • skipna (bool, default True) – Si se ignora NaN al calcular la desviación estándar.

Devuelve:

Una tabla de resultados de desviación estándar después de agregar a lo largo de la dimensión especificada.

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> hp = HistoryPanel(np.random.rand(2, 4, 2),
...                   levels=['000001.SZ', '000002.SZ'],
...                   rows=pd.date_range('2020-01-01', periods=4),
...                   columns=['open', 'close'])
>>> hp.std()
            open     close
000001.SZ  0.129099  0.086603
000002.SZ  0.149361  0.110769
HistoryPanel.min(by: str = 'share', skipna: bool = True) DataFrame[fuente]

Calcule las estadísticas mínimas para un HistoryPanel por recurso compartido o tipo de datos.

Parámetros:
  • by ({'share', 'htype'}, default 'share') – La dimensión de agregación; misma semántica que mean().

  • skipna (bool, default True) – Si se ignora NaN al calcular el mínimo.

Devuelve:

Una tabla de resultados mínimos después de agregar a lo largo de la dimensión especificada.

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> data = np.array([[[1., 2.], [3., 4.]],
...                  [[5., 6.], [7., 8.]]])
>>> hp = HistoryPanel(values=data,
...                   levels=['000001.SZ', '000002.SZ'],
...                   rows=pd.date_range('2020-01-01', periods=2),
...                   columns=['open', 'close'])
>>> hp.min()
            open  close
000001.SZ   1.0    2.0
000002.SZ   5.0    6.0
HistoryPanel.max(by: str = 'share', skipna: bool = True) DataFrame[fuente]

Calcule las estadísticas máximas para HistoryPanel por símbolo o tipo de datos.

Parámetros:
  • by ({'share', 'htype'}, default 'share') – La dimensión de agregación; misma semántica que mean().

  • skipna (bool, default True) – Si se debe ignorar NaN al calcular el máximo.

Devuelve:

Tabla de resultados de valores máximos después de agregar a lo largo de las dimensiones especificadas.

Tipo del valor devuelto:

pandas.DataFrame

Ejemplos

>>> data = np.array([[[1., 2.], [3., 4.]],
...                  [[5., 6.], [7., 8.]]])
>>> hp = HistoryPanel(values=data,
...                   levels=['000001.SZ', '000002.SZ'],
...                   rows=pd.date_range('2020-01-01', periods=2),
...                   columns=['open', 'close'])
>>> hp.max()
            open  close
000001.SZ   3.0    4.0
000002.SZ   7.0    8.0

Investigación y máscaras (dónde)

Normalice cualquier condición transmisible en bool array with the same shape as values, for use with the mask= parameter of subsequent research APIs (e.g., cumulative return, normalization, portfolio aggregation, etc.). A 2D (M, L) condition will be replicated along the htype axis to (M, L, N); consulte la cadena de documentación del método y el tutorial “Uso de HistoryPanel para manipular y analizar datos históricos” para obtener más detalles.

HistoryPanel.where(condition: Union[ndarray, Callable[[HistoryPanel], ndarray]]) ndarray[fuente]

Transmita la condición a una máscara bool con la misma forma que values, for use by parameters such as mask= en la API de investigación.

No modifica este objeto. La matriz devuelta tiene dtype=bool and shape (number of shares, time length, number of htypes), consistent with panel.values. The condition can be an array (broadcastable to the above shape) or a callable(panel) que devuelve un objeto similar a una matriz.

Las máscaras de investigación no están relacionadas con el manejo de precios de NaN en Backtester. Los números enteros como 0/1 se convertirán a bool de acuerdo con las reglas de NumPy.

Una matriz cuya forma es exactamente ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧ ⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧⟦CÓDIGO15⟧⟦CÓDIGO16⟧ y luego transmitir.

Parámetros:

condition (numpy.ndarray or callable) – Tipo matriz: primero np.asarray(..., dtype=bool), then broadcast to self.shape. If it is a callable, call condition(self) to get an array and then process it. A bare str is not accepted and will raise TypeError (en inglés).

Devuelve:

Una matriz bool 3D con la misma forma que self.shape (a copy; does not share the write buffer with internal values).

Tipo del valor devuelto:

numpy.ndarray

Muestra:
  • TypeError – Generado cuando condition is str (en inglés).

  • ValueError – Se genera cuando el valor de retorno no se puede convertir a una matriz bool o no se puede transmitir a self.shape (en inglés).

Notas

⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7 ⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧.

El mask= parameters of cum_return, normalize, and portfolio can directly use the return value of this method, or any array of the same shape with dtype=bool. Para conocer más escenarios, consulte el tutorial «Uso de HistoryPanel para manipular y analizar datos históricos» y la subsección «Investigación y enmascaramiento (dónde)» en la API Sphinx HistoryPanel.

Ejemplos

Un panel vacío produce una matriz bool de forma (0,0,0):

>>> empty = HistoryPanel()
>>> empty.where(True).shape
(0, 0, 0)

Los resultados de la comparación con la misma forma que values se pueden pasar directamente:

>>> import pandas as pd
>>> hp = HistoryPanel(
...     np.arange(24, dtype=float).reshape(2, 3, 4),
...     levels=['A', 'B'],
...     rows=pd.date_range('2020-01-01', periods=3),
...     columns=['a', 'b', 'c', 'd'],
... )
>>> m = hp.where(hp.values > 10)
>>> m.shape == hp.shape
True
>>> not bool(m[0, 0, 0]) and bool(m[-1, -1, -1])
True

El escalar True / False llena todo el bloque:

>>> import numpy as np
>>> hp.where(True).all() and not hp.where(False).any()
True

Una condición (M, L) se transmite a lo largo del eje htype (por ejemplo, días de evento):

>>> ev = np.zeros((2, 3), dtype=bool)
>>> ev[:, 1] = True
>>> m2 = hp.where(ev)
>>> bool(m2[0, 1, 0]) and bool(m2[0, 1, 3])
True

(M, L, 1) is semantically equivalent to (M, L), replicado a lo largo de la dimensión htype:

>>> c_ml1 = (hp.values[:, :, :1] > 10)
>>> m2b = hp.where(c_ml1)
>>> m2b.shape == hp.shape
True

Utilice lambda para construir condiciones basadas en datos de panel:

>>> m3 = hp.where(lambda p: p.values[:, :, 0] >= 3)
>>> m3.shape == hp.shape
True

Condiciones booleanas compuestas:

>>> m4 = hp.where(lambda p: (p.values >= 5) & (p.values <= 18))
>>> m4.dtype == bool
True

A continuación se muestra un ejemplo un poco más largo que complementa el tutorial (no se requiere red; se puede cotejar con la prueba de documentación en la cadena de documentación):

import numpy as np
import pandas as pd
from qteasy import HistoryPanel

# 最小面板:M=2, L=3, N=4
hp = HistoryPanel(
    np.arange(24, dtype=float).reshape(2, 3, 4),
    levels=['A', 'B'],
    rows=pd.date_range('2020-01-01', periods=3),
    columns=['a', 'b', 'c', 'd'],
)
# Event window on time axis: last row True for all shares and htypes
M, L, N = hp.shape
event_ml = np.zeros((M, L), dtype=bool)
event_ml[:, -1] = True
mask_event = hp.where(event_ml)
assert mask_event[:, -1, :].all() and not mask_event[:, 0, :].any()

puedes pasar mask = hp.where(...) directly to the mask= parameter of cum_ret urn() and normalize() (broadcasting rules are the same as where).

Acceso a atributos de columna, comparaciones y loc (diferencias con pandas)

  • Acceso a atributos: para nombres de columnas que sean identificadores válidos, puede utilizar ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧) entra en conflicto con una columna del mismo nombre, el acceso por punto aún se resuelve en la API; Utilice paréntesis para la columna.

  • Comparación: ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7 ⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧ también deben coincidir, o ambos lados deben ser sectores de una sola columna (por ejemplo, comparar dos columnas).

  • indexación de ubicaciones: ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧.

  • Aritmética y copia:

    • Operaciones aritméticas como hp + 1 and hp * arr return a new HistoryPanel y no modifican el objeto original.

    • Los operadores locales como hp += 1 and hp *= arr modifican explícitamente el objeto original.

    • hp.copy(deep=True) (default) returns a deep copy; modifying the copy does not affect the original object. hp.copy(deep=False) comparte la matriz subyacente; modificar la copia afectará sincrónicamente al objeto original.

Integración con plot: resaltar usando una máscara (M,L)

En escenarios de investigación, los días de eventos/señales/universos negociables comúnmente generan una matriz booleana 2D mask_ml with shape (M, L) (number of instruments × time length). HistoryPanel.plot()’s highlight admite el mapeo de esta máscara 2D a puntos resaltados en la figura actual:

  • Máscara de subconjunto: si mask_ml.shape == (M_plot, L), where M_plot is the number of shares selected by this plot(shares=...), coincide en el orden de participación del trazado;

  • Máscara completa: si mask_ml.shape == (M_all, L) (M_all == len(hp.shares)), extrae el subconjunto de trazado actual por nombre compartido (está prohibido el truncamiento silencioso por posición);

  • superposición: cuando layout='overlay' y dos instrumentos se superponen, de forma predeterminada solo se resalta el principal (consistente con la semántica de resaltado existente de Plotly).

Ejemplo:

import numpy as np
hp = ...  # 已构造好的 HistoryPanel
M, L, N = hp.shape
mask_ml = np.zeros((M, L), dtype=bool)
mask_ml[:, -1] = True
fig = hp.plot(highlight={'condition': mask_ml})
HistoryPanel.loc

Un indexador de solo lectura para seleccionar un subpanel a lo largo de hdates (el eje de tiempo).

⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO 7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧donde⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧.

Devuelve:

Un proxy ligero; al usar [...] se selecciona un subpanel a lo largo del eje de tiempo.

Tipo del valor devuelto:

_HistoryPanelLocIndexer

Ejemplos

>>> import pandas as pd
>>> import numpy as np
>>> hp = HistoryPanel(
...     np.arange(8, dtype=float).reshape(2, 4, 1),
...     levels=['A', 'B'],
...     rows=pd.date_range('2020-01-01', periods=4),
...     columns=['close'],
... )
>>> hp.loc[0:2]
share 0, label: A
            close
2020-01-01    0.0
2020-01-02    1.0
share 1, label: B
            close
2020-01-01    4.0
2020-01-02    5.0

DSL a nivel de columna: asignar

assign proporciona un DSL a nivel de columna similar a pandas que puede derivar o actualizar varias columnas a la vez. Admite la construcción de nuevos factores en una sola llamada basada en columnas existentes o columnas recién agregadas, y admite la devolución de un nuevo panel o la expansión de columnas en su lugar en el panel original.

HistoryPanel.assign(*, inplace: bool = False, **kwargs: Any) HistoryPanel[fuente]

Derive o actualice columnas (htypes) en lotes, lo que permite agregar o sobrescribir varias columnas a la vez.

assign() proporciona un DSL a nivel de columna similar al de pandas: puede nombrar varias columnas nuevas a la vez y derivarlas en una sola llamada mediante invocables o matrices/escalares; dentro de la misma llamada, las columnas definidas más adelante pueden depender de las columnas recién agregadas anteriormente. Este método admite tanto la devolución de un nuevo panel como la expansión/sobrescritura de columnas in situ en el panel original.

Parámetros:
  • inplace (bool, default False) – Cuando True, append/overwrite columns in place on the current HistoryPanel and return itself; when False, append/overwrite columns on a copy of the current data and return a new HistoryPanel.

  • **kwargs – Para cada argumento de palabra clave, la clave es el nuevo nombre de la columna (htype) y debe ser una cadena que no esté vacía; el valor puede ser Callable[[HistoryPanel], np.ndarray], or an array/scalar that can be np.asarray-ed and broadcast to (M, L).

Devuelve:

Cuando inplace=False, return a new panel with the added columns; when inplace=True, devuelve el panel original.

Tipo del valor devuelto:

HistoryPanel

Muestra:
  • ValueError – Generar (mensaje en inglés) cuando el panel está vacío, el nombre de la columna es una cadena vacía o el resultado devuelto por el invocable/matriz no se puede transmitir a (M, L).

  • TypeError – Aumentar si el nombre de la columna no es una cadena (mensaje en inglés).

Un breve ejemplo (se puede utilizar junto con where()):

# 假设 hp 已含 'close' 列
# mask = hp.where(hp.close > 100.0)           # 比较结果为 bool ndarray,再规整为 (M,L,N)
# sub = hp.loc[0:20]                          # 等价 hp[:, :, 0:20],按时间轴截取
# L = len(hp.hdates)
# sub2 = hp.loc[[True]*3 + [False]*(L - 3)]   # 一维 bool 长度须等于 L

Sección transversal y normalización: rango / zscore

⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧:

  • method='cs': fijar la fecha y realizar una estandarización transversal a lo largo de la dimensión compartida;

  • ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧).

HistoryPanel.rank(by: str, *, axis: str = 'share', method: str = 'average', new_htype: Optional[str] = None) HistoryPanel[fuente]

Clasifique la sección transversal (dimensión compartida) día a día a lo largo del tiempo, agregue una columna y devuelva un nuevo panel.

Parámetros:
  • by (str) – Nombre de la columna (htype) para participar en el ranking. Se analizará primero mediante _resolve_price_htype(), lo que admite columnas de sufijo ajustado como close|b.

  • axis ({'share'}, default 'share') – Actualmente, solo se admite la clasificación transversal a lo largo de la dimensión de participación.

  • method ({'average', 'min', 'max', 'first', 'dense'}, default 'average') – Cómo manejar rangos para valores empatados (empates); la semántica es consistente con pandas Series.rank(method=...).

  • new_htype (str, optional) – Nombre de la columna de salida; cuando Ninguno, el valor predeterminado es rank_{by}.

Devuelve:

El nuevo panel después de agregar la columna de clasificación; no modifica el objeto original. Un panel vacío devuelve un panel vacío.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Generar (mensaje en inglés) cuando los parámetros no son válidos, las columnas no existen o el nombre de la columna de salida entra en conflicto.

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy import HistoryPanel
>>> hp = HistoryPanel(
...     np.array([[[1.0], [2.0]], [[2.0], [1.0]]]),
...     levels=['s1', 's2'],
...     rows=pd.date_range('2023-01-01', periods=2),
...     columns=['close'],
... )
>>> hp2 = hp.rank(by='close')
>>> 'rank_close' in hp2.htypes
True
HistoryPanel.zscore(by: str, *, method: str = 'cs', window: Optional[int] = None, new_htype: Optional[str] = None) HistoryPanel[fuente]

Calcule puntuaciones estandarizadas (zscore) para la columna especificada y agregue una columna, devolviendo un nuevo panel.

Este método distingue explícitamente dos semánticas comunes a través del parámetro method:

  • method='cs' (transversal): corrige cada punto de tiempo y realiza la normalización transversal a lo largo de la dimensión compartida;

  • method='ts' (series de tiempo rodantes): corrige cada recurso compartido y realiza una normalización rodante a lo largo del eje de tiempo.

Parámetros:
  • by (str) – Nombre de columna (htype) para participar en la normalización. Se analizará primero mediante _resolve_price_htype(), lo que admite columnas de sufijo ajustado como close|b.

  • method ({'cs', 'ts'}, default 'cs') – Semántica de normalización: transversal (cs) o serie temporal rodante (ts).

  • window (int, optional) – Longitud de la ventana móvil (número de barras) cuando method='ts'; must be a positive integer; must be None when method='cs'.

  • new_htype (str, optional) – Nombre de la columna de salida; cuando Ninguno, el valor predeterminado es cs_z_{by} or ts_z_{by}_{window}.

Devuelve:

Un nuevo panel con la columna zscore adjunta; no modifica el objeto original. Un panel vacío devuelve un panel vacío.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Generar (mensaje en inglés) cuando los parámetros no son válidos, las columnas no existen o el nombre de la columna de salida entra en conflicto.

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy import HistoryPanel
>>> hp = HistoryPanel(
...     np.array([[[1.0], [2.0]], [[3.0], [4.0]]]),
...     levels=['s1', 's2'],
...     rows=pd.date_range('2023-01-01', periods=2),
...     columns=['x'],
... )
>>> hp_cs = hp.zscore(by='x', method='cs')
>>> hp_ts = hp.zscore(by='x', method='ts', window=2)

Alineación y remuestreo: align_to / resample

Cuando necesita realizar operaciones de elementos en dos HistoryPanel objects (e.g., division, subtraction, correlation, etc.), if their shares or hdates no coinciden, la transmisión NumPy puede causar una desalineación silenciosa. Por lo tanto, este proyecto proporciona un punto de entrada de alineación explícito:

  • align_to(): alinear shares and hdates by labels, supports join='inner'|'outer', and fills missing values with fill_value;

  • resample(): remuestreo a lo largo del eje de tiempo; debe proporcionar explícitamente agg= (covering all htypes) para evitar «resultados aparentemente exitosos pero no interpretables» causados ​​por una semántica de agregación ambigua.

HistoryPanel.align_to(other: HistoryPanel, *, join: str = 'inner', fill_value: float = nan) Tuple[HistoryPanel, HistoryPanel][fuente]

Alinee dos HistoryPanels por etiquetas a lo largo de los ejes de acciones y fechas para evitar una desalineación silenciosa.

Este método no se alinea por iloc/posición; solo realiza una alineación explícita utilizando etiquetas de eje. Después de la alineación, devuelve dos nuevos paneles con exactamente el mismo shares, hdates, and htypes; missing grid points are filled with fill_value.

Parámetros:
  • other (HistoryPanel) – Otro panel para alinear.

  • join ({'inner', 'outer'}, default 'inner') – Método de alineación: - inner: take the intersection of both shares and hdates; - outer: take the union of both shares and hdates. The output order is stable: for the intersection, follow the order of self; for the union, put self first, then append elements that appear in other but not in self.

  • fill_value (float, default np.nan) – Complete el valor para las posiciones faltantes después de la alineación.

Devuelve:

Alineado (self_aligned, other_aligned).

Tipo del valor devuelto:

(HistoryPanel, HistoryPanel)

Muestra:
  • TypeError – Generado cuando other is not a HistoryPanel (mensaje en inglés).

  • ValueError – Generado cuando join is invalid, or when the two htypes no son exactamente idénticos (mensaje en inglés).

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy import HistoryPanel
>>> hp1 = HistoryPanel(np.array([[[1.0],[2.0]]]), levels=['s1'],
...                   rows=pd.date_range('2023-01-01', periods=2), columns=['x'])
>>> hp2 = HistoryPanel(np.array([[[10.0],[11.0]]]), levels=['s2'],
...                   rows=pd.date_range('2023-01-02', periods=2), columns=['x'])
>>> a1, a2 = hp1.align_to(hp2, join='outer', fill_value=np.nan)
>>> a1.shares
['s1', 's2']
HistoryPanel.resample(rule: str, *, agg: Optional[dict] = None) HistoryPanel[fuente]

Vuelva a muestrear a lo largo del eje de tiempo (hdates) de acuerdo con la regla y devuelva un nuevo panel.

Para evitar una desalineación silenciosa causada por una semántica de agregación ambigua, este método requiere agg to be provided explicitly, and it must cover all htypes en el panel actual.

Parámetros:
  • rule (str) – Una cadena de reglas de remuestreo compatible con pandas, como 'W', 'M', '5D', etc.

  • agg (dict, required) – Dictamen de regla de agregación: {htype_name: agg_name}, where agg_name supports 'first'|'last'|'min'|'max'|'sum'|'mean'. Must cover all htypes.

Devuelve:

El nuevo panel después del remuestreo; el objeto original no se modifica. Un panel vacío devuelve un panel vacío.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Generado (con un mensaje en inglés) cuando agg is missing, does not cover all columns, contains unknown column names, the aggregation method is invalid, or rule no es válido.

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy import HistoryPanel
>>> idx = pd.date_range('2023-01-01', periods=10, freq='D')
>>> hp = HistoryPanel(np.arange(10, dtype=float).reshape(1, 10, 1),
...                   levels=['s1'], rows=idx, columns=['x'])
>>> out = hp.resample('W', agg={'x': 'last'})
>>> out.hdates
[Timestamp('2023-01-01 00:00:00'), Timestamp('2023-01-08 00:00:00')]

ventana enrollable

El uso de métodos de ventana móvil permite realizar cálculos deslizantes a lo largo de la dimensión temporal de HistoryPanel, lo que admite operaciones comunes como la media móvil y la desviación estándar móvil:

HistoryPanel.rolling(window: int, min_periods: Optional[int] = None, center: bool = False, by: str = 'share') HistoryPanelRolling[fuente]

Construya un objeto de estadísticas de ventana móvil basado en HistoryPanel.

El desplazamiento se realiza únicamente a lo largo del eje de tiempo (filas/fechas); window es un número entero de barras.

Parámetros:
  • window (int) – Longitud de la ventana enrollable.

  • min_periods (int, optional) – Número mínimo de observaciones válidas; si es menor que esto, el resultado es NaN. Defaults to the same as window.

  • center (bool, default False) – Si se debe utilizar una ventana centrada; la semántica es consistente con pandas.Series.rolling.

  • by ({'share', 'htype'}, default 'share') – Especifique el modo de agrupación para rodar: - “compartir”: rodar independientemente para cada tipo de cada acción (el más común); - “htype”: rueda de forma independiente para cada htype en todas las acciones.

Devuelve:

Un objeto de estadísticas de ventana móvil; admite llamadas a mean(), std(), min(), max(), etc.

Tipo del valor devuelto:

HistoryPanelRolling

Ejemplos

>>> 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.rolling(window=2, by='share').mean()
share 0, label: 000300
            close  open        vol
2020-01-01    NaN   NaN        NaN
2020-01-02   12.45  12.85  1020015.0
share 1, label: 000001
            close  open        vol
2020-01-01    NaN   NaN        NaN
2020-01-02    2.45   2.85  20015.0
class qteasy.history.HistoryPanelRolling(hp: HistoryPanel, window: int, min_periods: int, center: bool, by: str)[fuente]

El objeto de estadísticas de ventana móvil para HistoryPanel.

Este objeto normalmente lo crea HistoryPanel.rolling(), corresponde a una combinación fija de parámetros de ventana y proporciona métodos como mean/std/sum/min/max/apply que devuelven un nuevo HistoryPanel.

apply(func: Callable[[ndarray], float], raw: bool = False, **kwargs) HistoryPanel[fuente]

Aplique una función personalizada sobre la ventana móvil.

Parámetros:
  • func (callable) – Una función personalizada que toma un vector de ventana y devuelve un escalar.

  • raw (bool, default False) – Si True, pass an ndarray to func; otherwise pass a Series.

  • **kwargs – Otros parámetros pasados ​​a func.

Devuelve:

Panel de resultados rodante después de aplicar una función personalizada; las etiquetas share/hdates/htypes permanecen sin cambios.

Tipo del valor devuelto:

HistoryPanel

Notas

  • Igual que pandas: cuando el número de muestras válidas en la ventana es menor que min_periods, el resultado es NaN.

  • func debería devolver un valor numérico escalar; devolver una matriz o un tipo no numérico puede hacer que pandas genere un error o produzca resultados inesperados.

Ejemplos

>>> hp = qt.get_history_data(htype_names='close', shares='000001.SZ', rows=30, as_data_frame=False)
>>> roller = hp.rolling(window=5, min_periods=5)
>>> hp_mean = roller.mean()
>>> hp_mean
share 0, label: 000001
            close
2020-01-01  NaN
2020-01-02  NaN
2020-01-03  NaN
2020-01-04  NaN
2020-01-05  10.0
2020-01-06  10.5
...
2020-01-30  11.2
>>> hp_mad = roller.apply(lambda x: float(np.mean(np.abs(x - np.mean(x)))), raw=True)
>>> hp_mad
share 0, label: 000001
            close
2020-01-01  NaN
2020-01-02  NaN
2020-01-03  NaN
2020-01-04  NaN
2020-01-05  0.0
2020-01-06  0.5
...
2020-01-30  0.4
max() HistoryPanel[fuente]

Calcule el máximo de la ventana móvil y devuelva un nuevo panel.

Devuelve:

Panel rodante de resultado máximo, con etiquetas consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

mean() HistoryPanel[fuente]

Calcule la media de la ventana móvil y devuelva un nuevo panel.

Devuelve:

Panel de resultados medios móviles, con etiquetas consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

min() HistoryPanel[fuente]

Calcule el mínimo de la ventana móvil y devuelva un nuevo panel.

Devuelve:

Panel de resultado mínimo móvil, con etiquetas consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

std() HistoryPanel[fuente]

Calcule la desviación estándar de la ventana móvil y devuelva un nuevo panel.

Devuelve:

Panel de resultados de desviación estándar móvil, con etiquetas consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

sum() HistoryPanel[fuente]

Calcule la suma de la ventana móvil y devuelva un nuevo panel.

Devuelve:

Panel de resultados de suma móvil, con etiquetas consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

Métricas de rentabilidad y riesgo

HistoryPanel.returns(price_htype: str = 'close', method: str = 'simple', periods: int = 1, as_panel: bool = False, dropna: bool = False)[fuente]

Calcule los rendimientos en función de la serie de precios especificada.

Parámetros:
  • price_htype (str, default 'close') – El tipo de precio utilizado para calcular los rendimientos debe existir en htypes.

  • method ({'simple', 'log'}, default 'simple') –

    • simple: r_t = p_t / p_{t-periods} - 1

    • log: r_t = log(p_t) - log(p_{t-periods})

  • periods (int, default 1) – Número de barras en el intervalo de retorno.

  • as_panel (bool, default False) – Cuando es falso, devuelve un marco de datos (índice = hora, columnas = recursos compartidos); cuando es Verdadero, devuelve un HistoryPanel (htypes contiene solo ret_{price_htype}).

  • dropna (bool, default False) – Cuando sea Verdadero, elimine las filas principales que sean todas NaN.

Tipo del valor devuelto:

pandas.DataFrame or HistoryPanel

HistoryPanel.cum_return(htypes: Optional[Union[str, Sequence[str]]] = None, *, method: str = 'simple', mask: Optional[ndarray] = None) HistoryPanel[fuente]

Calcule los rendimientos acumulados por acción a lo largo de la dimensión temporal (orientado a la investigación) y devuelva un nuevo panel.

De forma predeterminada, calcula en la estrategia de nomenclatura close column (resolved via _resolve_price_htype(), supporting close|b etc.). The output column name is cumret_<user-provided column name>, consistent with returns() using the ret_<price_htype>. Si aparecen NaN o precios no positivos a lo largo de la trayectoria temporal, todos los resultados posteriores a partir de ese momento son NaN (ruta rota).

Parámetros:
  • htypes (str, sequence of str, optional) – Nombres de columnas para participar en el cálculo; cuando None, only process close (después del análisis).

  • method ({'simple', 'log'}, default 'simple') – ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧.

  • mask (numpy.ndarray, optional) – Mismas reglas de transmisión que where(); posiciones que son False are treated as missing (NaN) antes del cálculo.

Devuelve:

shares / hdates son los mismos que el panel original; contiene solo la columna de retorno acumulativo.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Levantado (en inglés) cuando method is invalid, columns cannot be parsed, mask cannot be broadcast, or the output column name conflicts with existing htypes.

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy.history import HistoryPanel
>>> hp = HistoryPanel(
...     np.array([[[10.0], [11.0], [12.0]]]),
...     levels=['S'],
...     rows=pd.date_range('2023-01-01', periods=3),
...     columns=['close'],
... )
>>> cr = hp.cum_return(method='simple')
>>> cr
share 0, label: S
            cumret_close
2023-01-01          0.0
2023-01-02          0.1
2023-01-03          0.2
HistoryPanel.normalize(htypes: Optional[Union[str, Sequence[str]]] = None, *, base_index: int = 0, mask: Optional[ndarray] = None) HistoryPanel[fuente]

Escale las columnas especificadas para que sean relativas a 1,0 en el punto de tiempo base (orientado a la investigación) y devuelva un nuevo panel.

De forma predeterminada, utiliza el precio válido en base_index as the denominator; if that time point is excluded by mask, is NaN, or is 0, then the entire time series output for that (share, column) will be NaN. The output column name is norm_<user-provided column name>.

Parámetros:
  • htypes (str, sequence of str, optional) – Columnas para participar en el cálculo; cuando None, only close (después del análisis).

  • base_index (int, default 0) – Índice base en el eje del tiempo (a partir de 0); aumenta ValueError (en inglés) si está fuera de los límites.

  • mask (numpy.ndarray, optional) – Mismas reglas de transmisión que where().

Devuelve:

Mismo shares / hdates que el panel original; contiene sólo las columnas normalizadas.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Se genera cuando las columnas no se pueden resolver, mask cannot be broadcast, base_index está fuera de los límites o los nombres de las columnas de salida entran en conflicto (en inglés).

Ejemplos

>>> import numpy as np
>>> import pandas as pd
>>> from qteasy.history import HistoryPanel
>>> hp = HistoryPanel(
...     np.array([[[10.0], [20.0], [40.0]]]),
...     levels=['S'],
...     rows=pd.date_range('2023-01-01', periods=3),
...     columns=['close'],
... )
>>> nm = hp.normalize(base_index=0)
>>> nm
share 0, label: S
            norm_close
2023-01-01        1.0
2023-01-02        2.0
2023-01-03        4.0
HistoryPanel.portfolio(htypes: Union[str, Sequence[str]] = 'close', *, mode: str = 'equal', weights: Optional[ndarray] = None, mask: Optional[ndarray] = None, groups: Optional[Dict[str, Sequence[str]]] = None, benchmark: Optional[str] = None, benchmark_output: str = 'none', new_share_name: str = 'PORTFOLIO', normalize_weights: bool = True, allow_ungrouped: str = 'error') HistoryPanel[fuente]

Agregue varias acciones en una serie de cartera a lo largo de la dimensión de acciones (orientada a la investigación) y devuelva un nuevo panel.

El valor predeterminado es benchmark_output='none'; if benchmark is set, you can attach benchmark rows with tag_along, or keep only excess-prefixed columns with excess_only (cartera menos punto de referencia, con nombres de columnas precedidos por exceso).

Cuando groups is None, aggregate the entire panel into one row named new_share_name. When groups is not empty, the keys are output share labels (in insertion order) and the values are lists of original shares within each group; shares must not overlap across groups. When allow_ungrouped='error', cada panel compartido debe pertenecer exactamente a un grupo.

Cuando groups is None and benchmark is specified, the benchmark share does not participate in portfolio aggregation (to avoid mixing index and individual-stock weights), and is only used for tag_along or excess_only; if no share is available after exclusion (e.g., the panel contains only the benchmark), raise ValueError.

Las reglas de transmisión para mask are consistent with where(); los puntos de la cuadrícula no válidos no participan en la agregación.

Parámetros:
  • htypes (str or sequence of str, default 'close') – Nombres de columnas que participan en la agregación; resuelto a través de _resolve_price_htype().

  • mode ({'equal', 'weighted'}, default 'equal') – Promedio de igual peso, o un promedio ponderado utilizado junto con weights.

  • weights (numpy.ndarray, optional) – Forma (M,) or (M, L), aligned with the order of self.shares; used only when mode='weighted'.

  • mask (numpy.ndarray, optional) – Mismas reglas de transmisión que where().

  • groups (dict, optional) – Nombre del grupo de salida → lista de etiquetas compartidas dentro del grupo.

  • benchmark (str, optional) – Cuota de referencia; debe estar en self.shares.

  • benchmark_output ({'none', 'tag_along', 'excess_only'}, default 'none') – Formulario de resultados de referencia; cuando no hay benchmark, only 'none', se permite.

  • new_share_name (str, default 'PORTFOLIO') – Nombre compartido para la fila sintetizada cuando no hay groups.

  • normalize_weights (bool, default True) – Al ponderar, normalice las ponderaciones de los miembros que participan en la agregación antes de calcular la suma ponderada (numéricamente equivalente a sum(w*x)/sum(w)).

  • allow_ungrouped ({'error', 'exclude'}, default 'error') – Cuando groups no está vacío, se requiere cubrir todas las acciones.

Devuelve:

Un nuevo objeto; hdates y la duración del tiempo son consistentes con el panel original.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Parámetros no válidos, compartir no en panel, grupos superpuestos, no se puede transmitir máscara, etc. (en inglés).

HistoryPanel.volatility(window: int = 20, price_htype: str = 'close', method: str = 'simple', annualize: bool = True, periods_per_year: Optional[int] = None, as_panel: bool = False)[fuente]

Calcule la volatilidad móvil (desviación estándar) en función de la serie de rendimiento.

Parámetros:
  • window (int, default 20) – Longitud de la ventana enrollable (número de barras).

  • price_htype (str, default 'close') – Tipo de precio utilizado para calcular los rendimientos.

  • method ({'simple', 'log'}, default 'simple') – El método de cálculo de la rentabilidad es coherente con las devoluciones ().

  • annualize (bool, default True) – Ya sea para anualizar (multiplicar por sqrt(periods_per_year)).

  • periods_per_year (int, optional) – Barras por año al anualizar; si no se especifica y anualize=True, intente inferir a partir del intervalo de tiempo y genere un error si no se puede inferir.

  • as_panel (bool, default False) – El formato de devolución es el mismo que el de devoluciones().

Tipo del valor devuelto:

pandas.DataFrame or HistoryPanel

HistoryPanel.alpha_beta(benchmark: Union[Series, DataFrame], price_htype: str = 'close', method: str = 'simple', freq: Optional[str] = None, annualize: bool = True) DataFrame[fuente]

Calcule métricas como alfa/beta para cada acción en relación con la serie de rendimiento de referencia dada.

Parámetros:
  • benchmark (Series or DataFrame) – Serie temporal de precios de referencia; el índice debe alinearse con HistoryPanel.hdates o al menos superponerse. Si se proporciona un DataFrame, solo se utiliza la primera columna como precio base.

  • price_htype (str, default 'close') – Tipo de precio utilizado para calcular los rendimientos.

  • method ({'simple', 'log'}, default 'simple') – El método de cálculo de la rentabilidad es coherente con las devoluciones ().

  • freq (str, optional) – Cadena de frecuencia de retorno, utilizada para inferir el número de barras por año al anualizar alfa, como “D”, “W”, “M”.

  • annualize (bool, default True) – Ya sea para anualizar alfa.

Devuelve:

El índice son acciones; las columnas son [“alfa”, “beta”, “r2”, “n_obs”].

Tipo del valor devuelto:

pandas.DataFrame

Velas e indicadores técnicos

Punto de entrada principal: research_preset

research_preset is used to quickly assemble a “commonly used column set that can be plotted directly” (e.g., OHLCV + MACD + MA), avoiding implicit indicator computation during plotting. If input columns are missing, it raises an English ValueError e indica qué columnas faltan.

HistoryPanel.research_preset(name: str, *, inplace: bool = False) HistoryPanel[fuente]

Genere rápidamente un conjunto de columnas de uso común para la investigación basado en un ajuste preestablecido y devuelva el panel de resultados.

Este método está destinado a servir como el «primer punto de entrada» de HistoryPanel: sin introducir semántica de backtesting, ensamble rápidamente OHLCV + columnas de indicadores técnicos de uso común (como MACD y promedios móviles) para trazado directo o investigación adicional.

Parámetros:
  • name (str) – Nombre preestablecido. Actualmente admitido: - 'ohlcv_macd_ma': requires the panel to contain at least open/high/low/close/vol, and generates macd_12_26_9, macd_signal_12_26_9, macd_hist_12_26_9, and sma_20.

  • inplace (bool, default False) – Si es Verdadero, agregue columnas preestablecidas al panel original en su lugar y devuelva el panel original; si es falso, devolverá un nuevo panel con las columnas agregadas.

Devuelve:

El HistoryPanel after appending preset columns. When inplace=True, devuelve el objeto original.

Tipo del valor devuelto:

HistoryPanel

Muestra:

ValueError – Aparece cuando el nombre preestablecido no es válido o cuando faltan las columnas de entrada requeridas para el preajuste (el mensaje de error está en inglés).

HistoryPanel.kline

Un acceso al indicador técnico de velas japonesas, que proporciona métodos como sma, ema, bbands, macd, kdj, etc.

HistoryPanel.apply_ta(func_name: str, htype: str = 'close', shares: Optional[Iterable[str]] = None, as_panel: bool = True, **kwargs)[fuente]

Llame a las funciones de indicadores técnicos en qteasy.tafuncs y transmita el cálculo a varias acciones.

Parámetros:
  • func_name (str) – Nombres de funciones en qteasy.tafuncs, como “sma”, “ema”, etc.

  • htype (str, default 'close') – El tipo de datos de la serie temporal unidimensional utilizada como entrada.

  • shares (list of str, optional) – Lista de acciones a calcular; de forma predeterminada, se utilizan todas las acciones.

  • as_panel (bool, default True) – Cuando es Verdadero, devuelve un nuevo HistoryPanel con columnas de salida añadidas al final de htypes; cuando es False, devuelve un DataFrame (tiempo × [compartir, nombre_salida]) con columnas MultiIndex.

HistoryPanel.candle_pattern(name: str, price_htypes: tuple[str, str, str, str] = ('open', 'high', 'low', 'close'), as_panel: bool = False, **kwargs)[fuente]

Calcule señales de patrones de velas basadas en funciones de patrones ta-lib.

Parámetros:
  • name (str) – Nombre de la función del patrón, como “cdlhammer”.

  • price_htypes (tuple of str, default ('open','high','low','close')) – Los nombres de htypes correspondientes a OHLC.

  • as_panel (bool, default False) – False devuelve un DataFrame (tiempo × existencias); True devuelve un HistoryPanel de un único tipo h.

Funciones de procesamiento de datos históricos a nivel qteasy

qteasy también proporciona varias funciones independientes de la clase HistoryPanel, lo que admite un procesamiento y análisis de datos históricos más flexible:

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)[fuente]

Dados los instrumentos, tipos de datos y frecuencia especificados, obtenga datos históricos de la fuente de datos local y reúnalos en una estructura que pueda ser utilizada directamente por la estrategia.

Puede especificar los tipos de datos requeridos a través de ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧, la función devuelve un HistoryPanel o un dictado de DataFrames agrupados por instrumento/tipo de datos. Para uso avanzado como inferencia de tipos de datos, conversión de frecuencia y trade_time_only, consulte las secciones relevantes en la documentación «Recuperación de datos históricos get_history_data».

Parámetros:
  • htype_names (str or list of str, optional) – Colección de nombres de datos históricos para recuperar; puede ser una cadena separada por comas (por ejemplo, 'open, high, low, close') or a list (e.g., ['open', 'high', 'low', 'close']). If empty, the system will infer available htypes based on parameters such as freq / asset_type.

  • htypes (list of DataType, optional, deprecated) – Lista de objetos de tipo de datos históricos; la semántica es similar a la interfaz htype_names. Prefer the new htype_names / data_types.

  • data_types (list of DataType, optional) – Una colección de tipos de datos históricos que se van a recuperar, que deben ser objetos de tipos de datos legales. Si se proporciona este argumento, se ignora htype_names; de lo contrario, se crean posibles htypes en función del argumento htype_names.

  • data_source (DataSource, optional) – Fuentes de datos que requieren acceso a datos históricos

  • shares (str or list of str, optional) – Colección de códigos de seguridad; puede ser una cadena separada por comas (por ejemplo, '000001.SZ, 000002.SZ') or a list (e.g., ['000001.SZ', '000002.SZ']).

  • symbols (str or list of str, optional) – Colección de códigos de seguridad; puede ser una cadena separada por comas (por ejemplo, '000001, 000002') or a list (e.g., ['000001', '000002']).

  • start (str, optional) – AAAAMMDD HH:MM:SS formato fecha/hora de la fecha/hora de inicio de los datos históricos adquiridos (si están disponibles)

  • end (str, optional) – AAAAMMDD HH:MM:SS formato fecha/hora, fecha/hora de finalización de los datos históricos adquiridos (si están disponibles)

  • rows (int, default 10) – El número de filas de datos históricos que se recuperarán, si se especifican el inicio y el final, este parámetro se ignora y el rango de tiempo de los datos recuperados es [inicio, fin]. Si no se especifican el inicio y el final, se recuperarán las filas más recientes de la tabla y la velocidad de usar filas para recuperar los datos es mucho más lenta que la de usar la fecha.

  • freq (str, optional) – Frecuencia; admite intervalos de minutos como ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7 ⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧ (por ejemplo, candelabros).

  • asset_type (str or list of str, optional) – Filtro de tipo de activo; puede ser una cadena separada por comas (p. ej. ⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO 6⟧⟦CÓDIGO7⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧, etc.

  • adj (str, optional, deprecated) – Opciones de ajuste obsoletas (⟦CÓDIGO0⟧⟦CÓDIGO1⟧⟦CÓDIGO2⟧⟦CÓDIGO3⟧⟦CÓDIGO4⟧⟦CÓDIGO5⟧⟦CÓDIGO6⟧⟦CÓDIGO7 ⟧⟦CÓDIGO8⟧⟦CÓDIGO9⟧⟦CÓDIGO10⟧⟦CÓDIGO11⟧⟦CÓDIGO12⟧⟦CÓDIGO13⟧⟦CÓDIGO14⟧).

  • as_data_frame (bool, default True) – Devuelve HistoryPanel when True; returns a dictionary of DataFrame when False.

  • group_by (str, default 'shares') – Clave de agrupación al devolver un dictado de DataFrames; comúnmente 'shares'/'share'/'s' or 'htypes'/'htype'/'h'.

  • **kwargs – Parámetros adicionales pasados ​​a la recuperación de datos subyacente/conversión de frecuencia (por ejemplo, drop_nan, resample_method, etc.). For detailed available values and semantics, see the documentation “Historical Data Retrieval get_history_data” and the infer_data_types notas.

Devuelve:

  • HistoryPanel: cuando as_data_frame es falso, devuelve un objeto HistoryPanel que contiene todos los datos solicitados.

  • dict of pandas.DataFrame – Cuando as_data_frame is True, returns a dict of DataFrames grouped by group_by.

Ejemplos

>>> 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: Union[list, dict], dataframe_as: str = 'shares', shares: Optional[Iterable] = None, htypes: Optional[Iterable] = None, fill_value: Optional[Any] = None)[fuente]

Combine varios DataFrame objects into a single HistoryPanel.

Parámetros:
  • dfs (list of pandas.DataFrame or dict of pandas.DataFrame) – Las mesas a apilar; cuando un list, you usually need to explicitly provide axis labels with shares/htypes; when a dict, sus claves se pueden usar como fuente de etiqueta predeterminada.

  • dataframe_as ({'shares', 'htypes'}, default 'shares') – 'shares' means each DataFrame corresponds to one instrument (columns are htypes); 'htypes' means each DataFrame corresponde a un tipo de datos (las columnas son recursos compartidos).

  • shares (str or list of str, optional) – Etiquetas de nivel del panel de salida cuando dataframe_as='shares'; puede ser una cadena separada por comas o una lista.

  • htypes (str or list of str, optional) – Etiquetas de columna del panel de salida cuando dataframe_as='htypes'; puede ser una cadena separada por comas o una lista.

  • fill_value (int or float, optional) – Valor de relleno utilizado al alinear las posiciones faltantes; predeterminado NaN.

Devuelve:

Un objeto HistoryPanel que consta de varios cuadros de datos de índice único.

Tipo del valor devuelto:

HistoryPanel

Ejemplos

>>> 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

El límite entre la investigación y el backtesting formal (lectura adicional)

En HistoryPanel, cum_return, portfolio, plot, etc. are geared toward exploration and quick checks; formal backtesting (settlement, fees, signal types, data windows that avoid look-ahead functions, etc.) is still handled by Strategy / Operator / Backtester. Se recomienda a los lectores leer, junto con esta página de API: