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.ndarraytridimensional, 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()andqt.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 returnNotImplemented.- 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
selfandotherusinggefrom theoperatormodule; returns anumpy.ndarraywith dtypebool(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:
- 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 ashp['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-
HistoryPanelcon 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, usesub.valuesorsub.to_numpy(). A subpanel’svaluesmay share memory with the parent panel (NumPy view rules); if you need an independent copy, usesubpanel(..., copy=True)orsub.copy().Al agregar una nueva columna en el objeto principal a través de
__setitem__, the entirevaluesblock of the parent panel will be replaced: by default, a subpanel withcopy=Falsewill not show the new column name, and itsvaluesmay still point to the old array before the column expansion; the sub-object obtained bysubpanel(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 emptyHistoryPanel.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:
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
selfandotherusinggtfrom theoperatormodule; returns anumpy.ndarraywith dtypebool(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
selfandotherusinglefrom theoperatormodule; returns anumpy.ndarraywith dtypebool(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
selfandotherusingltfrom theoperatormodule; returns anumpy.ndarraywith dtypebool(no es un subpanel).- Parámetros:
other (Any) – Un escalar, un
ndarray, or anotherHistoryPaneltransmitible (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 returnNotImplemented.- 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-strraisesTypeError, and an empty string raisesValueError(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
keyis notstr(mensaje en inglés).ValueError – Generado cuando el panel está vacío,
keyis an empty string, orvaluecannot 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
HistoryPaneldata (already handled uniformly byplot()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
valuesarray; when you need to match NumPy’s view semantics and share underlying data in performance-sensitive scenarios, setdeep=Falsesubyacente 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:
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:
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
valuespara 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_COUNTusa 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
pagepara 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=1is page 1,page=2es 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_klineObtenga datos de la línea K y, opcionalmente, configure
as_panel=Truepara 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:
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
Obtenga la cantidad de acciones o variedades de activos en HistoryPanel
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:
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:
Notas
Similar a cortar con
copy=Falsein__getitem__: after the parent__setitem__appends columns, acopy=Falsechild object usually does not include the new columns; for a stable snapshot, keepcopy=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.DataFramecorrespondiente.- 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 correspondingDataFrame; when set to'htype'/'htypes', split along the data-type axis: dict keys are historical data type names and values are the correspondingDataFrame.- 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; usecopy=Truecuando necesites una copia independiente.Un panel vacío devuelve una matriz flotante con la forma
(0, 0, 0). When non-empty,copy=Falsehas the same semantics asnumpy.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 withcopy=Falseno 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.]]])
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 allhtypescomo 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
shareparameter inslice_to_dataframe(share=...).- Devuelve:
El índice de fila es
hdates, columns arehtypesy 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);Nonepara un panel vacío.- Tipo del valor devuelto:
numpy.ndarray or None
- HistoryPanel es esencialmente un
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 asmask=en la API de investigación.No modifica este objeto. La matriz devuelta tiene
dtype=booland shape(number of shares, time length, number of htypes), consistent withpanel.values. The condition can be an array (broadcastable to the above shape) or acallable(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/1se 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 toself.shape. If it is acallable, callcondition(self)to get an array and then process it. A barestris not accepted and will raiseTypeError(en inglés).- Devuelve:
Una matriz bool 3D con la misma forma que
self.shape(a copy; does not share the write buffer with internalvalues).- Tipo del valor devuelto:
numpy.ndarray
- Muestra:
TypeError – Generado cuando
conditionisstr(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 ofcum_return,normalize, andportfoliocan directly use the return value of this method, or any array of the same shape withdtype=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
valuesse 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/Falsellena 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
lambdapara 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 + 1andhp * arrreturn a newHistoryPanely no modifican el objeto original.Los operadores locales como
hp += 1andhp *= arrmodifican 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), whereM_plotis the number of shares selected by thisplot(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 currentHistoryPaneland return itself; whenFalse, append/overwrite columns on a copy of the current data and return a newHistoryPanel.**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 benp.asarray-ed and broadcast to(M, L).
- Devuelve:
Cuando
inplace=False, return a new panel with the added columns; wheninplace=True, devuelve el panel original.- Tipo del valor devuelto:
- 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 comoclose|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:
- 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 comoclose|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 whenmethod='cs'.new_htype (str, optional) – Nombre de la columna de salida; cuando Ninguno, el valor predeterminado es
cs_z_{by}orts_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:
- 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(): alinearsharesandhdatesby labels, supportsjoin='inner'|'outer', and fills missing values withfill_value;resample(): remuestreo a lo largo del eje de tiempo; debe proporcionar explícitamenteagg=(covering allhtypes) 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, andhtypes; missing grid points are filled withfill_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 ofself; for the union, putselffirst, then append elements that appear inotherbut not inself.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:
- Muestra:
TypeError – Generado cuando
otheris not aHistoryPanel(mensaje en inglés).ValueError – Generado cuando
joinis invalid, or when the twohtypesno 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
aggto be provided explicitly, and it must cover allhtypesen 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}, whereagg_namesupports'first'|'last'|'min'|'max'|'sum'|'mean'. Must cover allhtypes.
- 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:
- Muestra:
ValueError – Generado (con un mensaje en inglés) cuando
aggis missing, does not cover all columns, contains unknown column names, the aggregation method is invalid, orruleno 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);
windowes 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 aswindow.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:
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 comomean/std/sum/min/max/applyque 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 anndarrayto func; otherwise pass aSeries.**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:
Notas
Igual que pandas: cuando el número de muestras válidas en la ventana es menor que
min_periods, el resultado es NaN.funcdeberí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:
- 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:
- 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:
- 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:
- 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:
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
closecolumn (resolved via_resolve_price_htype(), supportingclose|betc.). The output column name iscumret_<user-provided column name>, consistent withreturns()using theret_<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 processclose(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 sonFalseare treated as missing (NaN) antes del cálculo.
- Devuelve:
shares/hdatesson los mismos que el panel original; contiene solo la columna de retorno acumulativo.- Tipo del valor devuelto:
- Muestra:
ValueError – Levantado (en inglés) cuando
methodis invalid, columns cannot be parsed,maskcannot be broadcast, or the output column name conflicts with existinghtypes.
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_indexas the denominator; if that time point is excluded bymask, isNaN, or is 0, then the entire time series output for that (share, column) will beNaN. The output column name isnorm_<user-provided column name>.- Parámetros:
htypes (str, sequence of str, optional) – Columnas para participar en el cálculo; cuando
None, onlyclose(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/hdatesque el panel original; contiene sólo las columnas normalizadas.- Tipo del valor devuelto:
- Muestra:
ValueError – Se genera cuando las columnas no se pueden resolver,
maskcannot be broadcast,base_indexestá 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'; ifbenchmarkis set, you can attach benchmark rows withtag_along, or keep only excess-prefixed columns withexcess_only(cartera menos punto de referencia, con nombres de columnas precedidos por exceso).Cuando
groupsisNone, aggregate the entire panel into one row namednew_share_name. Whengroupsis 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. Whenallow_ungrouped='error', cada panel compartido debe pertenecer exactamente a un grupo.Cuando
groupsisNoneandbenchmarkis specified, the benchmark share does not participate in portfolio aggregation (to avoid mixing index and individual-stock weights), and is only used fortag_alongorexcess_only; if no share is available after exclusion (e.g., the panel contains only the benchmark), raiseValueError.Las reglas de transmisión para
maskare consistent withwhere(); 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 ofself.shares; used only whenmode='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
groupsno está vacío, se requiere cubrir todas las acciones.
- Devuelve:
Un nuevo objeto;
hdatesy la duración del tiempo son consistentes con el panel original.- Tipo del valor devuelto:
- 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 leastopen/high/low/close/vol, and generatesmacd_12_26_9,macd_signal_12_26_9,macd_hist_12_26_9, andsma_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
HistoryPanelafter appending preset columns. Wheninplace=True, devuelve el objeto original.- Tipo del valor devuelto:
- 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 asfreq/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 newhtype_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
HistoryPanelwhenTrue; returns a dictionary ofDataFramewhenFalse.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 theinfer_data_typesnotas.
- Devuelve:
HistoryPanel: cuando
as_data_framees falso, devuelve un objeto HistoryPanel que contiene todos los datos solicitados.dict of pandas.DataFrame – Cuando
as_data_frameis True, returns a dict of DataFrames grouped bygroup_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
DataFrameobjects into a singleHistoryPanel.- 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 withshares/htypes; when adict, sus claves se pueden usar como fuente de etiqueta predeterminada.dataframe_as ({'shares', 'htypes'}, default 'shares') –
'shares'means eachDataFramecorresponds to one instrument (columns are htypes);'htypes'means eachDataFramecorresponde 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:
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:
Tutorial Using HistoryPanel to manipulate and analyze historical data §9 (investigación →
FactorSorter/Operator), §10 (paneles de datos de múltiples fuentes), §11 (exportación a pandas/modelos de estadísticas);Notas de diseño HistoryPanel and the optional FactorResearch layer (conclusiones de la evaluación sobre si agregar un módulo de estadísticas de factores independientes).