4. HistoryPanel Klasse
Verlaufsdatenklasse HistoryPanel:
HistoryPanel Datenstruktur und Slicing
HistoryPanel ist im Wesentlichen ein dreidimensionaler „numpy.ndarray“, wobei die drei Achsen Folgendes darstellen:
Achse 0 / Ebenen: Instrumentendimension; Jede Ebene entspricht einer Aktie oder einem Index, und die Etikettenliste lautet „shares“.
Achse 1 / Zeilen: Zeitdimension; Jede Zeile entspricht einem Zeitpunkt und die Beschriftungsliste lautet „hdates“.
Achse 2 / Spalten: historische Datentypdimension; Jede Spalte entspricht einem Datentyp und die Beschriftungsliste lautet „htypes“.
Mit diesen drei Achsenbeschriftungen können Sie ein HistoryPanel mithilfe der eckigen Klammern „[]“ flexibel segmentieren. Die Grundregel lautet „[htype_slicer, share_slicer, date_slicer]“; Wenn Dimensionen weggelassen werden, gibt die Einzelsegmentform (z. B. „hp[‚close‘]``) immer noch ein Unter-„HistoryPanel“ (mit Achsenbeschriftungen) zurück. Für eine Rohmatrix verwenden Sie „.values“ / „.to_numpy()“.
Die Zeitachse (die dritte Achse) unterstützt außerdem: einen einzelnen „pandas.Timestamp“, eine Liste von Zeitbezeichnungen, eine 1D-„bool“-Liste der Länge „L = len(hdates)“ oder ein 1D-„numpy“-„bool“-Array; Die schreibgeschützte Eigenschaft „hp.loc[key]“ entspricht „hp[:, :, key]“. Eine boolesche Maske „(M, L, N)“ auf Gitterebene ist nicht Teil der „loc“-/dritten-Achsen-Indizierungssemantik; Verwenden Sie stattdessen where().
Typisches Schreibbeispiel:
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)[Quellcode]
Bei qteasy handelt es sich um einen dreidimensionalen Datencontainer, der zur zentralen Verwaltung historischer Daten über mehrere Instrumente, mehrere Zeitpunkte und mehrere Datentypen hinweg verwendet wird.
- HistoryPanel ist im Wesentlichen ein dreidimensionales „numpy.ndarray“, und die drei Achsen repräsentieren das Instrument (Anteile) und die Zeit
(hdates) und historischen Datentypen (htypes) und unterstützen flexibles Slicing und Relabeling entlang jeder Achse sowie die gegenseitige Konvertierung mit
- pandas DataFrame und dient als Datencontainer für get_history_data und den Visualisierungsstapel
die Kernbrücke (z. B. zwischen „HistoryPanel.plot()` and ``qt.candle`“).
Indizierung und Array-Export: „__getitem__“ gibt immer ein Unter-„HistoryPanel“ mit korrekten Achsenbeschriftungen zurück; Wenn Sie ein rohes „ndarray“ benötigen, verwenden Sie „.values“ oder „.to_numpy(copy=…)“. In-Place-Zuweisung an eine einzelne Spalte „panel[‚column_name‘] = value“ wird durch „__setitem__“ implementiert (nur für nicht leere Panels und nur für „str“-Schlüssel). Der Wert wird an „(number_of_shares, time_length)“ gesendet und als „float64“ gespeichert; Es überschreibt eine vorhandene Spalte oder fügt eine neue hinzu. Informationen zur Semantik, wenn ein Unterpanel den Puffer mit seinem übergeordneten Panel teilt, finden Sie in den Dokumenten für „__getitem__“ / „subpanel“ / „__setitem__“.
Ergonomieorientierte API: Auf Spaltennamen, die gültige Python-Bezeichner sind und in „htypes“ vorhanden sind, kann schreibgeschützt als Attribute zugegriffen werden (z. B. „panel.close“, äquivalent zu „panel[‚close‘]“); Vergleichsoperationen (z. B. „panel.close > panel.open“) geben ein boolesches Array „numpy“ zurück; „panel.loc[key]“ entspricht „panel[:, :, key]“ und filtert nur entlang der Zeitachse (es akzeptiert keine 3D-Maske wie „where“). Benutzerdokumente: die Sphinx-Seite HistoryPanel und das Tutorial „Verwenden von HistoryPanel zum Bearbeiten und Analysieren historischer Daten“ (§6 und §6.1).
Eine detailliertere Strukturbeschreibung (Achsenbeschriftungen, Slicing-Beispiele, Beschriftungsverwaltung usw.) finden Sie im entsprechenden Abschnitt in der Dokumentation „Klasse HistoryPanel“.
- __eq__(other: Any) Any[Quellcode]
Elementweise „self == other`; unsupported types return ``NotImplemented`“.
- Parameter:
other (Any) – Rechter Operand.
- Rückgabe:
Ein „bool` array when comparable; otherwise ``NotImplemented`“.
- Rückgabetyp:
numpy.ndarray or NotImplemented
- __ge__(other: Any) ndarray[Quellcode]
Entspricht dem elementweisen Vergleich von „self` and
otherusinggefrom theoperatormodule; returns anumpy.ndarraywith dtype ``bool`“ (kein Unterpanel).- Parameter:
other (Any) – Rechter Operand; Die Semantik ist dieselbe wie bei
__lt__().- Rückgabe:
Boolesches Ergebnisarray.
- Rückgabetyp:
numpy.ndarray
- __getattr__(name: str) Any[Quellcode]
Einen gültigen Bezeichnerspaltennamen als „self[name]“ auflösen (schreibgeschützt); Verwenden Sie für Nicht-Bezeichner oder unbekannte Spaltennamen die Klammerindizierung.
Verwenden Sie für die Spaltenzuordnung weiterhin „hp[‚col‘] = …“; Es stimmt nicht mit dem attributbasierten Schreibpfad von pandas überein.
- Parameter:
name (str) – Attributname; Es muss ein gültiger Python-Bezeichner sein, um möglicherweise einer „htypes“-Spalte (nicht leeres Feld) zu entsprechen.
- Rückgabe:
Ein Unterpanel, das mit „self[name]`; on an empty panel, delegates to ``__getitem__`“ identisch ist und ein leeres Unterpanel zurückgibt.
- Rückgabetyp:
- Verursacht:
AttributeError – Ein ungültiger Bezeichner oder ein Spaltenname, der im aktuellen Bereich nicht vorhanden ist (auf Englisch, was zur Verwendung der Klammerindizierung führt).
Notes
Vorhandene Methodennamen/Deskriptoren (z. B. „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`“) können keinen Punktzugriff verwenden.Examples
>>> 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[Quellcode]
Schneiden Sie entlang der drei Achsen htypes/shares/hdates und geben Sie einen Unter-
HistoryPanelmit den korrekten Achsenbeschriftungen zurück.Das erste Segment ist der Datentyp (htypes), das zweite das Instrument (shares) und das dritte die Zeit (hdates); Wenn es weggelassen wird, wählt diese Achse alle aus. Wenn Sie einen nackten „ndarray`, use
sub.valuesorsub.to_numpy(). A subpanel’svaluesmay share memory with the parent panel (NumPy view rules); if you need an independent copy, usesubpanel(..., copy=True)or ``sub.copy()`“ benötigen.Beim Anhängen einer neuen Spalte an das übergeordnete Objekt über „__setitem__“ wird der gesamte „Werte“-Block des übergeordneten Panels ersetzt: Standardmäßig zeigt ein Unterpanel mit „copy=False“ nicht den neuen Spaltennamen an, und seine „Werte“ verweisen möglicherweise immer noch auf das alte Array vor der Spaltenerweiterung; Das durch „subpanel(copy=True)“ erhaltene Unterobjekt ist nicht betroffen. Beim Überschreiben einer vorhandenen Spalte im übergeordneten Bereich werden die mit der Unteransicht geteilten geteilten Daten zusammen mit dem übergeordneten Puffer aktualisiert (sofern es sich immer noch um eine Ansicht für denselben zugrunde liegenden Block handelt).
Für ein leeres Panel („is_empty`), indexing with any key returns an empty
HistoryPanel.Notes
Zeitachse (das dritte Segment „hdates“) Zusätzlich zu „Slice“/Ganzzahlen/Intervallzeichenfolgen unterstützt es auch: eine einzelne Zeitbezeichnung, die im „rows“-Dikt zu finden ist (z. B. „pandas.Timestamp“), eine Liste von Zeitbezeichnungen und eine 1D-„bool“-Liste oder 1D „numpy.ndarray“ (boolescher D-Typ) mit einer Länge gleich „row_count“; im Einklang mit dem von
locakzeptierten „Schlüssel“. Boolesche Arrays „(M, L, N)“ auf Gitterebene werden nicht als Indizes der dritten Achse verwendet; Bitte verwenden Siewhere().- Parameter:
keys (list, tuple, slice, str, int or None) – Slice-Schlüssel; Das 3-Tupel „(htypes, shares, hdates)“ stimmt mit dem historischen Verhalten überein.
- Rückgabe:
Unterpanel; Um die Matrix zu erhalten, verwenden Sie deren „.values` / ``.to_numpy()`“.
- Rückgabetyp:
Examples
>>> 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[Quellcode]
Entspricht dem elementweisen Vergleich von „self“ und „other“ unter Verwendung von „gt“ aus dem Modul „operator“; gibt ein „numpy.ndarray“ mit dem Dtype „bool“ zurück (kein Unterpanel).
- Parameter:
other (Any) – Rechter Operand; Die Semantik ist dieselbe wie bei
__lt__().- Rückgabe:
Boolesches Ergebnisarray.
- Rückgabetyp:
numpy.ndarray
- __le__(other: Any) ndarray[Quellcode]
Entspricht dem elementweisen Vergleich von „self“ und „other“ unter Verwendung von „le“ aus dem Modul „operator“; gibt ein „numpy.ndarray“ mit dem Dtype „bool“ zurück (kein Unterpanel).
- Parameter:
other (Any) – Rechter Operand; Die Semantik ist dieselbe wie bei
__lt__().- Rückgabe:
Boolesches Ergebnisarray.
- Rückgabetyp:
numpy.ndarray
- __lt__(other: Any) ndarray[Quellcode]
Entspricht dem elementweisen Vergleich von „self“ und „other“ unter Verwendung von „lt“ aus dem „operator“-Modul; gibt ein „numpy.ndarray“ mit dem Dtype „bool“ zurück (kein Unterpanel).
- Parameter:
other (Any) – Ein Skalar, ein sendefähiger „ndarray`, or another ``HistoryPanel`“ (muss die Ausrichtungsregeln erfüllen).
- Rückgabe:
Boolesches Ergebnisarray.
- Rückgabetyp:
numpy.ndarray
- Verursacht:
TypeError – Nicht unterstützte Operandentypen (auf Englisch).
ValueError – Wird ausgelöst, wenn die beiden Panels nicht gemäß den Regeln ausgerichtet oder gesendet werden können (auf Englisch).
- __ne__(other: Any) Any[Quellcode]
Elementweise „self != other`; unsupported types return ``NotImplemented`“.
- Parameter:
other (Any) – Rechter Operand.
- Rückgabe:
Ein „bool` array when comparable; otherwise ``NotImplemented`“.
- Rückgabetyp:
numpy.ndarray or NotImplemented
- __setitem__(key: Any, value: Any) None[Quellcode]
Hängen Sie eine Spalte anhand des Spaltennamens an oder überschreiben Sie eine vorhandene Spalte (die dritte Achse von „htypes“).
Akzeptiert nur eine Laufzeit-nicht-leere Zeichenfolge „key“; Die mehrspaltige Stapelzuweisung wird von späteren APIs wie „assign“ bereitgestellt. „Wert“ wird an „(Anzahl der Anteile, Zeitlänge)“ gesendet und als „float64“ beibehalten; Vorhandene Spaltennamen werden stillschweigend überschrieben, wobei die Semantik an der Einzelspaltenzuweisung pandas ausgerichtet ist. Durch das Anhängen einer neuen Spalte im übergeordneten Bereich wird der gesamte „Werte“-Block ersetzt: Unteransichten von „subpanel(copy=False)“ / „__getitem__“ können die neue Spalte normalerweise nicht sehen und verweisen möglicherweise immer noch auf den alten Puffer. „subpanel(…, copy=True)“ und „to_numpy(copy=True)“ sind nicht betroffen. Wenn die übergeordnete Spalte eine vorhandene Spalte überschreibt, werden Unteransichten, die den zugrunde liegenden Block mit der übergeordneten Spalte teilen, zusammen mit der übergeordneten Spalte aktualisiert.
- Parameter:
key (Any) – Spaltenname (htype). Muss „str“ sein; Nicht-
strlöst „TypeError“ aus, und eine leere Zeichenfolge löst „ValueError“ (englische Meldung) aus.value (Any) – Ein numerischer Wert, der „np.asarray`’d and broadcast to
(M, L)(scalar,(M, L), ``(M, L, 1)`“ usw. sein kann.
- Rückgabe:
Ändert dieses Objekt an Ort und Stelle; gibt nichts zurück.
- Rückgabetyp:
None
- Verursacht:
TypeError – Wird ausgelöst, wenn „key` is not ``str`“ (englische Nachricht).
ValueError – Wird ausgelöst, wenn das Panel leer ist, „key“ eine leere Zeichenfolge ist oder „value“ nicht an „(M, L)“ (englische Nachricht) gesendet werden kann.
Examples
>>> 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)[Quellcode]
Konvertieren Sie den Datentyp von HistoryPanel in den Typ dtype. Dtype kann nur „float“ oder „int“ sein.
- Parameter:
dtype (str, {'float', 'int'}) – Datentyp, in den konvertiert werden soll
- Rückgabetyp:
self
- Verursacht:
AssertionError – Wenn der Eingabedatentyp falsch ist oder andere Datentypen als float/int eingegeben werden
- candle(*args, **kwargs)[Quellcode]
Zeichnen Sie ein Candlestick-Diagramm basierend auf dem aktuellen „HistoryPanel` data (already handled uniformly by ``plot()`“.
Notes
Für die neue Visualisierung wird empfohlen, „HistoryPanel.plot()“ direkt aufzurufen und mit htypes/layout zu steuern, ob Diagrammtypen wie Candlesticks, Volumen usw. ausgegeben werden sollen.
Intern delegiert diese Methode an den einheitlichen Einstiegspunkt des Visualisierungssubmoduls. Sein Verhalten bleibt konsistent mit „plot()“ und es existiert nur als semantischer Alias.
- property column_count
Rufen Sie die Anzahl der Spalten im HistoryPanel oder die Anzahl der historischen Daten ab
- property columns
Gibt ein Diktat zurück, das die historischen Daten von HistoryPanel darstellt und die historischen Daten Spaltenindizes zuordnet. Dies erleichtert die interne Aufteilung der Daten nach Aktiencode.
- copy(deep: bool = True) HistoryPanel[Quellcode]
Kopieren und erstellen Sie ein neues HistoryPanel-Objekt.
Gibt standardmäßig eine tiefe Kopie zurück, was bedeutet, dass das neue Objekt und das Originalobjekt sich nicht gegenseitig auf das zugrunde liegende „Werte“-Array auswirken; Wenn Sie die Ansichtssemantik von NumPy anpassen und zugrunde liegende Daten in leistungsempfindlichen Szenarien teilen müssen, legen Sie „deep=False“ fest.
- Parameter:
deep (bool, default True) – Ob das zugrunde liegende numerische Array „Werte“ tief kopiert werden soll: – True: tiefe Kopie; Das Ändern der Kopie hat keine Auswirkungen auf das Originalobjekt. - Falsch: flache Kopie (teilt das zugrunde liegende Array); Das Ändern der Kopie wirkt sich synchron auf das Originalobjekt aus.
- Rückgabe:
Das neue kopierte Objekt; Achsenbeschriftungen („shares`/
hdates/``htypes`“) sind die gleichen wie die des Originalobjekts.- Rückgabetyp:
Examples
>>> 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)[Quellcode]
Füllen Sie fehlende Werte vorwärts aus. Wenn in historischen Daten Werte fehlen, verwenden Sie die aktuellsten gültigen Daten vor dem fehlenden Wert, um den fehlenden Wert zu ergänzen
- Parameter:
init_val (float, 如果Nan值出现在第一行时,没有前序有效数据,则使用这个值来填充,默认为np.nan) –
- Rückgabe:
out
- Rückgabetyp:
HistoryPanel, 填充后的HistoryPanel对象
Examples
>>> 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])[Quellcode]
Verwenden Sie with_value, um alle INF-Werte im HistoryPanel zu füllen.
- Parameter:
with_val (float or int) – Füllwert
- Rückgabe:
out
- Rückgabetyp:
HistoryPanel, 填充后的HistoryPanel对象
- fillna(with_val: Union[int, float])[Quellcode]
Nan-Werte im HistoryPanel werden mit with_value gefüllt
- Parameter:
with_val (float or int) – Füllwert
- Rückgabe:
out
- Rückgabetyp:
HistoryPanel, 填充后的HistoryPanel对象
- flatten(along=None)[Quellcode]
Identisch mit HistoryPanel.flatten_to_dataframe()
- Parameter:
along (str, {'col', 'row', 'column'} Default: 'row') – Reduzieren Sie jede Ebene des HistoryPanel entlang der Zeilen- oder Spaltenrichtung. „Spalte“ oder „Spalte“ bedeutet „Abflachen“ entlang der Spaltenrichtung, „Zeile“ bedeutet „Abflachen entlang der Zeilenrichtung“.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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')[Quellcode]
Reduzieren Sie einen HistoryPanel in einen DataFrame
Die mehrschichtigen Daten von HistoryPanel werden auf die Spalten des DataFrame „reduziert“ und werden so zu einem MultiIndex, oder die mehrschichtigen Daten werden auf die Zeilen des DataFrame „reduziert“ und werden so ebenfalls zu einem MultiIndex. Ob es auf Zeilen oder Spalten reduziert wird, hängt vom Parameter entlang ab
- Parameter:
along (str, {'col', 'row', 'column'} Default: 'row') – Reduzieren Sie jede Ebene des HistoryPanel entlang der Zeilen- oder Spaltenrichtung. „Spalte“ oder „Spalte“ bedeutet „Abflachen“ entlang der Spaltenrichtung, „Zeile“ bedeutet „Abflachen entlang der Zeilenrichtung“.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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)[Quellcode]
Geben Sie die ersten paar Zeilen von HistoryPanel in Form eines Multi-Index-DataFrame zurück, standardmäßig fünf Zeilen
- Parameter:
row_count (int, default 5) – Anzahl der zu druckenden Zeilen
- Rückgabe:
Datenrahmen, mehrfach indiziert nach Share und HType als Spalten, mit nur ersten row_count Zeilen * , Ein Datenrahmen mit einem Multiindex aus Share und Htype als Spalten, der nur die ersten row_count Zeilen enthält
Examples
>>> 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)[Quellcode]
Geben Sie die letzten paar Zeilen von HistoryPanel in Form eines Multi-Index-DataFrames zurück, standardmäßig fünf Zeilen
- Parameter:
row_count (int, default 5) – Anzahl der zu druckenden Zeilen
- Rückgabe:
Datenrahmen, mehrfach indiziert nach Share und HType als Spalten, mit nur letzten row_count Zeilen
一个dataframe,以share和htype为列的多重索引,只包含后row_count行
Examples
>>> 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
Ermitteln Sie die Anzahl der historischen Datentypen im HistoryPanel
- property hdates
Rufen Sie die Liste der historischen Datums-Zeitstempel im HistoryPanel ab.
- head(row_count=5)[Quellcode]
Gibt die ersten paar Zeilen von HistoryPanel zurück, standardmäßig sind es fünf Zeilen
- Parameter:
row_count (int, default 5) – Anzahl der zu druckenden Zeilen
- Rückgabe:
Datenrahmen, mehrfach indiziert nach Share und HType als Spalten, mit nur ersten row_count Zeilen * , Ein Datenrahmen mit einem Multiindex aus Share und Htype als Spalten, der nur die ersten row_count Zeilen enthält
Examples
>>> 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
Ermitteln Sie die Anzahl der historischen Datentypen im HistoryPanel
- property htypes
Holen Sie sich die Liste der historischen Datentypen im HistoryPanel
- info()[Quellcode]
Drucken Sie die Informationen dieses HistoryPanel-Objekts
- Rückgabetyp:
None
Examples
>>> 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
Überprüfen Sie, ob HistoryPanel leer ist
- isegment(start_index=None, end_index=None)[Quellcode]
- Holen Sie sich ein Segment von HistoryPanel, start_index und end_index sind beide int-Zahlen, die die Datumssequenznummer darstellen und zurückgeben
Gibt alle Daten zwischen den beiden Sequenznummern zurück. Der zurückgegebene Typ ist ein HistoryPanel, der alle Share- und htypes-Daten enthält
- Parameter:
start_index (pd.TimeStamp) – Startdatumsindex
end_index (pd.TimeStamp) – Enddatumsindex
- Rückgabe:
out – Ein HistoryPanel, der alle Freigabe- und htypes-Daten zwischen start_date und end_date enthält
- Rückgabetyp:
Examples
>>> 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)[Quellcode]
Verbinden Sie ein HistoryPanel-Objekt mit einem anderen HistoryPanel-Objekt, um ein neues HistoryPanel zu generieren:
Die Zeilen-, Spalten- und Ebenenbeschriftungen des neuen HistoryPanel sind die Vereinigung der Zeilen-, Spalten- und Ebenenbeschriftungen der beiden ursprünglichen HistoryPanels. Mit anderen Worten, die Zeilen-, Spalten- und Ebenenbeschriftungen des neuen HistoryPanel enthalten vollständig die entsprechenden Beschriftungen der beiden HistoryPanel-Objekte.
- Parameter:
other (HistoryPanel) – Der andere HistoryPanel soll zusammengeführt werden
same_shares (bool, Default False) – Wenn die Anteile der beiden HPs gleich sind, kann die Beschriftungszusammenführung der Anteilsdimension aus Zeitgründen entfallen. Der Standardwert ist Falsch.
same_htypes (bool, Default False) – Wenn die H-Typen der beiden HPs gleich sind, kann die Zusammenführung der Beschriftung der H-Typen-Dimension weggelassen werden, um Zeit zu sparen. Der Standardwert ist Falsch.
same_hdates (bool, Default False) – Wenn die HD-Daten der beiden HPs gleich sind, kann die Zusammenführung der Beschriftung der HD-Dimension aus Zeitgründen entfallen. Der Standardwert ist Falsch.
fill_value (float, Default np.nan) – Füllwert für leere Daten: Wenn der kombinierte HP leere Daten enthält, welcher Wert zum Füllen verwendet werden soll, ist der Standardwert np.nan
- Rückgabetyp:
HistoryPanel, 一个新的History Panel对象
Examples
>>> # 如果两个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()[Quellcode]
Länge des HistoryPanel-Objekts, d. h. Anzahl der Daten
- Rückgabe:
Anzahl der Termine
- Rückgabetyp:
int
Examples
>>> 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
Anzahl der Aktien oder Vermögensarten im HistoryPanel
- property levels
Gibt das Layer-Label-Diktat von HistoryPanel zurück (eine Zuordnung vom Aktiencode zum Layer-Index).
Innerhalb der Bibliothek kann es mit „Werten“ für eine schichtweise Indizierung kombiniert werden; Extern bevorzugen Sie die Verwendung von Slicing in eckigen Klammern, um auf die Daten für jede Ebene zuzugreifen.
- 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)[Quellcode]
Wählen Sie automatisch den Diagrammtyp basierend auf den vorhandenen H-Typen und Anteilen in HistoryPanel aus und zeichnen Sie das Diagramm.
Diese Methode verbraucht nur vorhandene Daten und führt keine neuen Berechnungen durch. Der Diagrammtyp wird durch eine interne Registrierung basierend auf H-Typen bestimmt (z. B. OHLC→K-Linie, Volumen→Volumen, drei MACD-Spalten→MACD-Diagramm, andernfalls→Liniendiagramm). Es unterstützt Overlay-/Stack-Layouts für einzelne und mehrere Instrumente sowie statische Diagramme auf Matplotlib-Basis und interaktive Diagramme auf Plotly-Basis.
- Parameter:
shares (str or sequence of str, optional) – Die Teilmenge der Ticker, die in die Darstellung einbezogen werden soll; Standardmäßig werden alle Anteile in HistoryPanel verwendet.
layout ({'overlay', 'stack', 'auto'}, default 'auto') – Multi-Instrumenten-Layout-Modus; „overlay“ überlagert innerhalb derselben Gruppe, „stack“ zeigt mehrere Gruppen in separaten Zeilen an, und bei „auto“ verwendet „HP_OVERLAY_GROUP_SHARE_COUNT“ das Overlay nur für so viele Instrumente und den Stack für den Rest.
interactive (bool, default False) – Wenn True, verwenden Sie das interaktive Backend Plotly (erfordert die Installation von plotly und anywidget/ipywidgets); Wenn False, verwenden Sie das statische Matplotlib-Backend.
highlight (dict or str, optional) – Hervorhebungskonfiguration: kann „{‚condition‘: ‚max‘|‘min‘ oder ein boolesches Array, ‚style‘: {…}}`` oder die Abkürzung ‚max‘ / ‚min‘ sein.
plotly_backend_app ({'auto', 'FigureWidget', 'html'}, default 'auto') – Nur wirksam, wenn „interaktiv=True“ ist. Wählen Sie in einem Notebook den Rendering-Modus Plotly: „auto“ bevorzugt „FigureWidget“ und greift bei einem Fehler auf einen HTML-Wrapper zurück; „FigureWidget“ erzwingt das Widget und löst es bei einem Fehler aus; „html“ erzwingt den HTML-Wrapper und löst bei einem Fehler aus. In Nicht-Notebook-Skriptumgebungen gibt „auto“ möglicherweise immer noch die rohe „Figure“ zurück.
max_shares_per_figure (int, default 5) – Die maximale Anzahl von Aktien, die in einem einzelnen Diagramm angezeigt werden sollen. Wenn die angeforderte Anzahl an Freigaben diesen Wert überschreitet, wird sie in Seiten aufgeteilt; Sie können den Parameter „Seite“ verwenden, um auszuwählen, welche Seite angezeigt werden soll.
page (int, default 1) – Die anzuzeigende Seitenzahl (1-basiert). Wenn die Anzahl der Freigaben „max_shares_per_figure“ überschreitet, ist „page=1“ Seite 1, „page=2“ ist Seite 2 und so weiter.
**kwargs – Reservierte Erweiterungsparameter; wird in der aktuellen Version nicht verwendet.
- Rückgabe:
Bei „interactive=False“ wird eine Matplotlib-Figur zurückgegeben. Wenn Interactive=True, wird je nach „plotly_backend_app“ ein FigureWidget, ein HTML-Wrapper oder die Rohfigur zurückgegeben.
- Rückgabetyp:
matplotlib.figure.Figure or plotly.graph_objs.FigureWidget or _PlotlyFigureWrapper
Notes
Wenn die Registrierung ein vollständiges OHLC-Candlestick-Hauptdiagramm ausgibt, wird der obere OHLC-Zusammenfassungsbereich angezeigt: Bei statischen Diagrammen ist er auf die Zusammenfassung des letzten Balkens auf der Zeitachse festgelegt; Bei interaktiven Diagrammen stimmt es zunächst damit überein und wird auf die angeklickte Leiste aktualisiert, nachdem Sie auf eine Leiste geklickt haben (der dem Benutzer angezeigte Zusammenfassungstext ist auf Englisch). Wenn kein Candlestick-Hauptdiagramm vorhanden ist (z. B. nur eine Schlusslinie), wird dieser Zusammenfassungsbereich nicht angezeigt.
Examples
>>> 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')
Siehe auch
qt.get_klineRufen Sie K-Linien-Daten ab und legen Sie optional „as_panel=True“ fest, um einen HistoryPanel zu erhalten.
- re_label(shares: Optional[Union[str, list]] = None, htypes: Optional[Union[str, list]] = None, hdates: Optional[Union[str, list]] = None) None[Quellcode]
Weisen Sie dem HistoryPanel-Objekt Ebenen-, Zeilen- und Spaltenbeschriftungen neu zu
- Parameter:
shares (str or list of str) – Lagerliste
htypes (str or list of str) – Liste der Datentypen
hdates (str or list of str) – Datumsliste
- Rückgabetyp:
None
Examples
>>> 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
Ermitteln Sie die Anzahl der Zeilen im HistoryPanel.
- property rows
Gibt das Datumswörterbuch des HistoryPanel zurück. Dieses Wörterbuch verknüpft Datumsangaben mit Zeilenindizes, sodass es intern schneller auf Daten zugreifen oder diese aufteilen kann.
- Rückgabe:
Datumswörterbuch
- Rückgabetyp:
dict
- segment(start_date=None, end_date=None)[Quellcode]
- Holen Sie sich ein Datumssegment von HistoryPanel, start_date und end_date sind beide Daten vom Typ Datum, Rückgabe
Dadurch werden alle Daten zwischen den beiden Daten zurückgegeben. Der zurückgegebene Typ ist ein HistoryPanel, der alle Share- und htypes-Daten enthält
- Parameter:
start_date (开始日期) –
end_date (结束日期) –
- Rückgabe:
out – Ein HistoryPanel, der alle Freigabe- und htypes-Daten zwischen start_date und end_date enthält
- Rückgabetyp:
Examples
>>> 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
Ermitteln Sie die Größe jeder Dimension von HistoryPanel
Ermitteln Sie die Anzahl der Aktien oder Vermögensarten im HistoryPanel
Gibt die Ebenenbezeichnung der HistoryPanel - Bestandsliste zurück
- slice(shares=None, htypes=None)[Quellcode]
- Rufen Sie ein Segment von HistoryPanel für einen Bestand oder Datentyp ab. Anteile und htypes können eine Liste oder ein durch Kommas getrenntes Zeichen sein
, Angabe der Art des Bestands oder der zu erhaltenden Daten.
- Parameter:
shares (str or list of str) – Liste der benötigten Bestände
htypes (str or list of str) – Liste der erforderlichen Datentypen
- Rückgabe:
out – Ein HistoryPanel, der die Daten der Bestände und Datentypen enthält, die in „shares“ und „htypes“ angegeben sind
- Rückgabetyp:
Examples
>>> 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[Quellcode]
Konvertieren Sie das angegebene Segment im HistoryPanel-Objekt in einen DataFrame
Geben Sie htype oder share an und konvertieren Sie den Datenausschnitt, der diesem htype oder dieser Share entspricht, in einen DataFrame. Da das HistoryPanel-Objekt dreidimensionale Daten enthält, muss bei der Konvertierung einer der htype- oder share-Parameter angegeben werden
- Parameter:
htype (str or int,) – Gibt den Datentyp-Slice an, der zum Generieren eines DataFrame benötigt wird. Wenn dieser Parameter angegeben wird, werden nach dem Auffinden des Slice, das dem H-Typ entspricht, alle Daten aller Bestände und Daten, die dem H-Typ entsprechen, in einen DataFrame konvertiert. Wenn der Typ str ist, gibt er den Namen des htype an, und wenn der Typ int ist, stellt er die Spaltennummer dar, in der sich der htype befindet
share (str or int,) – Gibt den Stock-Code-Slice an, der zum Generieren eines DataFrame benötigt wird. Wenn dieser Parameter angegeben ist, werden nach dem Auffinden des der Freigabe entsprechenden Slice alle Daten aller Datentypen und Daten, die der Freigabe entsprechen, in einen DataFrame konvertiert. Wenn der Typ str ist, gibt er den Aktiencode an, und wenn der Typ int ist, stellt er die Layer-Nummer dar, auf der sich die Freigabe befindet
dropna (bool, Default False) – Wenn „True“, NaN-Werte entfernen
inf_as_na (bool, Default False) – Wenn True, werden Inf-Werte als NaN-Werte behandelt und zusammen entfernt. Ungültig, wenn dropna „False“ ist
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Wählen Sie über Schlüsselwortargumente ein Unterpanel entlang htypes/shares/hdates aus, um Verwirrung über die Achsenreihenfolge des Tripels zu vermeiden.
„Keine“ bedeutet, dass alle auf dieser Achse ausgewählt werden. Standardmäßig „copy=True“, wodurch eine vom Datenpuffer des übergeordneten Objekts getrennte Kopie erstellt wird; Setzen Sie „copy=False“ für Nullkopie (das Unterpanel „Werte“ kann sich den Speicher mit dem übergeordneten Panel teilen). Wenn „__setitem__“ des übergeordneten Objekts eine neue Spalte anfügt, ersetzt es den gesamten „values“-Block des übergeordneten Panels; Ein „copy=False“-Unterfenster schließt die neue Spalte normalerweise nicht automatisch ein und verweist möglicherweise immer noch auf den Puffer vor dem Hinzufügen der Spalte.
- Parameter:
htypes (str, sequence, slice or int, optional) – Auswahl der Spalte (Datentyp); Die Semantik ist dieselbe wie beim ersten Segment von „panel[htypes, …]“.
shares (str, sequence, slice or int, optional) – Auswahl auf Instrumentenebene; Die Semantik ist dieselbe wie beim zweiten Segment von „panel[:, shares, …]“.
hdates (str, sequence, slice or int, optional) – Auswahl der Zeitachse; Die Semantik ist dieselbe wie beim dritten Segment von „panel[…, hdates]“.
copy (bool, default True) – Wenn True, wird eine Array-Kopie des Slicing-Ergebnisses erstellt.
- Rückgabe:
Ein Unterfeld, das aus den ausgewählten Achsen-Untergruppen besteht; Eine leere Eingabe entspricht einem leeren Panel.
- Rückgabetyp:
Notes
Ähnlich wie beim Slicing mit „copy=False“ in „__getitem__“: Nachdem das übergeordnete „__setitem__“ Spalten angehängt hat, enthält ein untergeordnetes „copy=False“-Objekt normalerweise nicht die neuen Spalten; Behalten Sie für einen stabilen Snapshot „copy=True“ bei (Standard).
- tail(row_count=5)[Quellcode]
Gibt die letzten paar Zeilen von HistoryPanel zurück, standardmäßig sind es fünf Zeilen
- Parameter:
row_count (int, default 5) – Anzahl der zu druckenden Zeilen
- Rückgabe:
Datenrahmen, mehrfach indiziert nach Share und HType als Spalten, mit nur letzten row_count-Zeilen * , Ein Datenrahmen mit einem Mehrfachindex aus Share und htype als Spalten, der nur die letzten row_count-Zeilen enthält
Examples
>>> 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[Quellcode]
Konvertieren Sie ein HistoryPanel in ein Diktat: Die Schlüssel sind „share“ oder „htype“ und die Werte sind die entsprechenden „pandas.DataFrame“.
- Parameter:
by (str, default 'share') – Bei Einstellung auf „Aktie“ / „Aktien“ erfolgt die Aufteilung entlang der Aktienachse: Diktierschlüssel sind Börsenticker und Werte sind der entsprechende „DataFrame“; Bei Festlegung auf „htype“ / „htypes“ erfolgt die Aufteilung entlang der Datentypachse: Diktschlüssel sind historische Datentypnamen und Werte sind der entsprechende „DataFrame“.
- Rückgabe:
df_dict
- Rückgabetyp:
dict, {str: pandas.DataFrame}
Examples
>>> 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)[Quellcode]
Identisch mit HistoryPanel.flatten_to_dataframe()
- Parameter:
along (str, {'col', 'row', 'column'} Default: 'row') – Reduzieren Sie jede Ebene des HistoryPanel entlang der Zeilen- oder Spaltenrichtung. „Spalte“ oder „Spalte“ bedeutet „Abflachen“ entlang der Spaltenrichtung, „Zeile“ bedeutet „Abflachen entlang der Zeilenrichtung“.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Geben Sie ein Ndarray mit der gleichen Form wie „values`; use ``copy=True`“ zurück, wenn Sie eine unabhängige Kopie benötigen.
Ein leeres Panel gibt ein Float-Array mit der Form „(0, 0, 0)“ zurück. Wenn „copy=False“ nicht leer ist, hat es die gleiche Semantik wie „numpy.asarray(self.values)“ und kann den Speicher mit dem internen Puffer teilen. Wenn Sie später über „__setitem__“ neue Spalten an das übergeordnete Objekt anhängen, ersetzt das übergeordnete Objekt den gesamten zugrunde liegenden Puffer. Das zuvor mit „copy=False“ erhaltene Array enthält nicht automatisch die neuen Spalten und sollte nicht länger als maßgeblicher Schnappschuss des aktuellen Panels betrachtet werden.
- Parameter:
copy (bool, default False) – Wenn True, wird eine Kopie des Arrays zurückgegeben. Das Ändern des Rückgabewerts hat keine Auswirkungen auf die Daten dieses Objekts.
- Rückgabe:
Ein 3D-Array mit der gleichen Form wie „values`; ``(0, 0, 0)`“ für ein leeres Panel.
- Rückgabetyp:
numpy.ndarray
Examples
>>> 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.]]])
Schneiden Sie alle Datentypen einer einzelnen Aktie im HistoryPanel in einen DataFrame.
Diese Methode ist syntaktischer Zucker für „slice_to_dataframe(share=…)“. Der zurückgegebene DataFrame verwendet die Zeit als Index und alle „htypes“ als Spalten, wodurch er für die Analyse einzelner Aktien und vollständiger Indikatoren geeignet ist.
- Parameter:
share (str or int) – Börsenticker oder Börsenindex; Die Semantik ist dieselbe wie beim Parameter „share“ in „slice_to_dataframe(share=…)“.
- Rückgabe:
Der Zeilenindex ist „hdates`, columns are ``htypes`“ und enthält alle historischen Daten für diesen Bestand zu allen Zeitpunkten.
- Rückgabetyp:
pandas.DataFrame
- unstack(by: str = 'share') dict[Quellcode]
Entspricht der Methode self.to_df_dict(), die ein Alias der Methode self.to_df_dict() ist.
- Parameter:
by (str, {'share', 'htype'}, default 'share') – Geben Sie an, ob nach Share oder HType entstapelt werden soll. Der Standardwert ist Share.
- Rückgabe:
Das Ergebnis nach dem Entstapeln ist ein Wörterbuch mit dem Schlüssel als Share oder HType und dem Wert als entsprechender DataFrame
- Rückgabetyp:
dict
Examples
>>> 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
Gibt den internen 3D-Datenpuffer des aktuellen Objekts zurück (die gleiche Referenz wie „_values“).
Wenn es nicht leer ist, zeigt es auf denselben Speicher wie „to_numpy(copy=False)“; Durch Ändern des Rückgabewerts werden die Daten dieses Objekts direkt geändert. Beim Anhängen neuer Spalten über „__setitem__“ können die Interna das gesamte Array ersetzen; Die von Unteransichten gehaltenen „Werte“ („__getitem__“ / „subpanel(copy=False)“) verweisen möglicherweise immer noch auf den alten Puffer vor der Spaltenerweiterung, und neue Spalten werden nicht automatisch angezeigt. Für einen stabilen Snapshot verwenden Sie „subpanel(…, copy=True)“ oder „to_numpy(copy=True)“. Wenn beim Schreiben von Spalten an Ort und Stelle das ursprüngliche Array nicht „float64“ ist, wird es vor dem Speichern intern auf „float64“ aktualisiert.
- Rückgabe:
Formen Sie „(level_count, row_count, column_count)`; ``None`“ für ein leeres Feld.
- Rückgabetyp:
numpy.ndarray or None
Das HistoryPanel-Objekt stellt häufig verwendete Finanzdatenstatistiken und Aggregationsmethoden bereit, einschließlich deskriptiver Statistiken, rollierender Fensterberechnungen, Rendite- und Risikometrikberechnungen sowie Candlestick- (K-Line) und technischer Indikatorberechnungen. Einzelheiten sind wie folgt:
Grundlegende Statistiken und Aggregation
Die folgenden Methoden bieten pandas-ähnliche statistische Funktionen für die 3D-Daten von HistoryPanel:
- HistoryPanel.describe(by: Optional[str] = 'share', percentiles: tuple = (0.25, 0.5, 0.75), include: str = 'numeric', ddof: int = 1) DataFrame[Quellcode]
Berechnen Sie grundlegende deskriptive Statistiken für einen HistoryPanel, ähnlich wie pandas.DataFrame.describe.
Sie können beschreibende Statistiken wie Anzahl, Mittelwert, Standard, Min., Max. und angegebene Quantile für numerische Daten nach Anteil, historischem Datentyp (htype) oder aus einer globalen Perspektive berechnen.
- Parameter:
by ({'share', 'htype', None}, default 'share') – Statistikperspektive: - „Aktie“: ein Beschreibungsergebnis pro Aktie, verkettet in einem MultiIndex mit Spalten (htype, stat); - ‚htype‘: die Verteilung jedes htype über alle Bestände und Zeiten; - Keine: Behandeln Sie alle numerischen Werte als einen einzigen Gesamtprobenpool.
percentiles (tuple of float, default (0.25, 0.5, 0.75)) – Liste der zu berechnenden Quantile; Die Werte sollten im Intervall (0, 1) liegen.
include ({'numeric', None}, default 'numeric') – Derzeit werden nur numerische Statistiken unterstützt; Nicht numerische Spalten werden automatisch ignoriert.
ddof (int, default 1) – Der Freiheitsgradparameter bei der Berechnung der Standardabweichung; Wird nur wirksam, wenn „by is None“.
- Rückgabe:
Eine deskriptive Statistik-Ergebnistabelle, deren Index-/Spaltenstruktur vom Wert von by abhängt.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Berechnen Sie Durchschnittsstatistiken für einen HistoryPanel nach Anteil oder Datentyp.
- Parameter:
by ({'share', 'htype'}, default 'share') – Aggregationsdimension: - „Anteil“: Berechnen Sie den Mittelwert über die Zeitachse für jede Aktie und geben Sie einen DataFrame mit Index als Anteile und Spalten als htypes zurück; - ‚htype‘: Berechnen Sie den Mittelwert über alle Bestände für jeden htype und geben Sie den transponierten DataFrame zurück.
skipna (bool, default True) – Ob NaN bei der Berechnung des Mittelwerts ignoriert werden soll.
- Rückgabe:
Eine Mittelwert-Ergebnistabelle nach der Aggregation entlang der angegebenen Dimension.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Berechnen Sie die Standardabweichungsstatistik für einen HistoryPanel nach Anteil oder Datentyp (ddof=1).
- Parameter:
by ({'share', 'htype'}, default 'share') – Die Aggregationsdimension; gleiche Semantik wie „mean()“.
skipna (bool, default True) – Ob NaN bei der Berechnung der Standardabweichung ignoriert werden soll.
- Rückgabe:
Eine Standardabweichungs-Ergebnistabelle nach der Aggregation entlang der angegebenen Dimension.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Berechnen Sie die Mindeststatistik für einen HistoryPanel nach Freigabe oder Datentyp.
- Parameter:
by ({'share', 'htype'}, default 'share') – Die Aggregationsdimension; gleiche Semantik wie „mean()“.
skipna (bool, default True) – Ob NaN bei der Berechnung des Minimums ignoriert werden soll.
- Rückgabe:
Eine Tabelle mit minimalen Ergebnissen nach der Aggregation entlang der angegebenen Dimension.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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[Quellcode]
Berechnen Sie die maximale Statistik für HistoryPanel nach Symbol oder Datentyp.
- Parameter:
by ({'share', 'htype'}, default 'share') – Die Aggregationsdimension; gleiche Semantik wie „mean()“.
skipna (bool, default True) – Ob NaN bei der Berechnung des Maximums ignoriert werden soll.
- Rückgabe:
Ergebnistabelle der Maximalwerte nach Aggregation entlang der angegebenen Dimensionen.
- Rückgabetyp:
pandas.DataFrame
Examples
>>> 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
Forschung und Masken (wo)
Normalisieren Sie jede übertragbare Bedingung in ein „bool“-Array mit der gleichen Form wie „values“, zur Verwendung mit dem „mask=“-Parameter nachfolgender Forschungs-APIs (z. B. kumulative Rendite, Normalisierung, Portfolio-Aggregation usw.). Eine 2D-Bedingung „(M, L)“ wird entlang der htype-Achse zu „(M, L, N)“ repliziert; Weitere Informationen finden Sie in der Methodendokumentzeichenfolge und im Tutorial „Verwenden von HistoryPanel zum Bearbeiten und Analysieren historischer Daten“.
- HistoryPanel.where(condition: Union[ndarray, Callable[[HistoryPanel], ndarray]]) ndarray[Quellcode]
Übertragen Sie die Bedingung an eine Bool-Maske mit der gleichen Form wie „Werte“, zur Verwendung durch Parameter wie „mask=“ in der Forschungs-API.
Ändert dieses Objekt nicht. Das zurückgegebene Array hat „dtype=bool“ und die Form „(Anzahl der Anteile, Zeitlänge, Anzahl der htypes)“, konsistent mit „panel.values“. Die Bedingung kann ein Array (an die obige Form sendbar) oder ein „aufrufbares (Panel)“ sein, das ein Array-ähnliches Objekt zurückgibt.
Forschungsmasken haben nichts mit der NaN-Preisabwicklung in Backtester zu tun. Ganzzahlen wie „0“/„1“ werden gemäß den NumPy-Regeln in Bool umgewandelt.
Ein Array, dessen Form genau „(M, L)“ ist, wird so behandelt, als ob „jeder „(Anteil, Zeit)“ denselben booleschen Wert für alle „htype“ verwendet. Intern wird es zuerst in „(M, L, 1)“ konvertiert und dann an „(M, L, N)“ gesendet (da der Standard NumPy ein 2D „(M,L)“ nicht direkt an 3D senden kann). Ein 1D-Array „(M,)“ und ein 2D-Array „(M, 1)“ werden so behandelt, als ob sie nur je nach Instrument variieren würden; Sie werden zu „(M, 1, 1)“ erweitert und dann gesendet.
- Parameter:
condition (numpy.ndarray or callable) – Array-artig: zuerst „np.asarray(…, dtype=bool)“, dann Broadcast an „self.shape“. Wenn es sich um ein „aufrufbares“ Element handelt, rufen Sie „condition(self)“ auf, um ein Array abzurufen, und verarbeiten Sie es dann. Ein bloßer „str“ wird nicht akzeptiert und löst „TypeError“ (auf Englisch) aus.
- Rückgabe:
Ein 3D-Bool-Array mit der gleichen Form wie „self.shape“ (eine Kopie; teilt den Schreibpuffer nicht mit internen „Werten“).
- Rückgabetyp:
numpy.ndarray
- Verursacht:
TypeError – Wird ausgelöst, wenn „condition` is ``str`“ (auf Englisch).
ValueError – Wird ausgelöst, wenn der Rückgabewert nicht in ein Bool-Array konvertiert oder nicht an „self.shape“ (auf Englisch) gesendet werden kann.
Notes
„Bedingung“ kann das direkte Ergebnis von umfangreichen Vergleichen sein (seit 2.2.8): zum Beispiel „panel.where(panel.close > 100.0)“ oder „panel.where(panel[‚close‘] > panel[‚open‘])“. Operators wie „>“ auf einem „HistoryPanel“ und einem Skalar-/Broadcast-Array/einem anderen Panel (muss Ausrichtungsregeln erfüllen) geben ein „numpy.ndarray“ („dtype=bool“) zurück, das dann von dieser Methode in die gleiche Form wie „panel.values“ übertragen wird.
Der „mask=` parameters of
cum_return,normalize, andportfoliocan directly use the return value of this method, or any array of the same shape with ``dtype=bool`“. Weitere Szenarien finden Sie im Tutorial „Verwenden von HistoryPanel zum Bearbeiten und Analysieren historischer Daten“ und im Unterabschnitt „Recherche und Maskierung (wo)“ in der Sphinx HistoryPanel-API.Examples
Ein leeres Panel ergibt ein Bool-Array der Form „(0,0,0)“:
>>> empty = HistoryPanel() >>> empty.where(True).shape (0, 0, 0)
Vergleichsergebnisse mit der gleichen Form wie „values“ können direkt übergeben werden:
>>> 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
Der Skalar „True` / ``False`“ füllt den gesamten Block:
>>> import numpy as np >>> hp.where(True).all() and not hp.where(False).any() True
Eine „(M, L)“-Bedingung wird entlang der htype-Achse gesendet (z. B. Ereignistage):
>>> 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), repliziert entlang der htype-Dimension:>>> c_ml1 = (hp.values[:, :, :1] > 10) >>> m2b = hp.where(c_ml1) >>> m2b.shape == hp.shape True
Verwenden Sie „lambda“, um Bedingungen basierend auf Paneldaten zu erstellen:
>>> m3 = hp.where(lambda p: p.values[:, :, 0] >= 3) >>> m3.shape == hp.shape True
Zusammengesetzte boolesche Bedingungen:
>>> m4 = hp.where(lambda p: (p.values >= 5) & (p.values <= 18)) >>> m4.dtype == bool True
Unten finden Sie ein etwas längeres Beispiel, das das Tutorial ergänzt (kein Netzwerk erforderlich; kann mit dem Doctest im Dokumentstring abgeglichen werden):
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()
Sie können „mask = hp.where(…)“ direkt an den Parameter „mask=“ von cum_return() und normalize() übergeben (Broadcast-Regeln sind die gleichen wie bei „where“).
Zugriff auf Spaltenattribute, Vergleiche und „loc“ (Unterschiede zu Pandas)
Attributzugriff: Für Spaltennamen, die gültige Bezeichner sind, können Sie „hp.close“ (schreibgeschützt) verwenden, äquivalent zu „hp[‚close‘]“. Spaltennamen, die ungültige Bezeichnerzeichen wie „|“ enthalten, sowie unbekannte Namen müssen weiterhin „hp[‘…‘]“ verwenden. Verwenden Sie für die Zuweisung immer „hp[‚col‘] = …“. Wenn eine vorhandene Methode/ein vorhandener Deskriptor (z. B. „where“, „values“) mit einer Spalte mit demselben Namen in Konflikt steht, wird der Punktzugriff weiterhin in die API aufgelöst. Verwenden Sie Klammern für die Spalte.
Vergleich:
hp > 0,hp['close'] > hp['open']usw. geben einnumpy.ndarray(boolescher dtype) zurück, keinHistoryPanel; Sie können mit „hp.where(…)“ verkettet werden. Wenn beide Seiten Panels sind, müssen „shares“ und „hdates“ übereinstimmen; „htypes“ müssen ebenfalls übereinstimmen, oder beide Seiten müssen einspaltige Slices sein (z. B. beim Vergleich zweier Spalten).Loc-Indizierung: „hp.loc[k]“ ist äquivalent zu „hp[:, :, k]“ und filtert nur entlang der Zeitachse („hdates“); Der boolesche Würfel „(M, L, N)“ im „where“-Stil wird nicht akzeptiert. Für Rastermasken verwenden Sie „where“ + „mask=“.
Rechnen und Kopieren:
Arithmetische Operationen wie „hp + 1“ und „hp * arr“ geben ein neues „HistoryPanel“ zurück und verändern das ursprüngliche Objekt nicht.
Direkte Operatoren wie „hp += 1` and ``hp *= arr`“ ändern explizit das ursprüngliche Objekt.
„hp.copy(deep=True)“ (Standard) gibt eine tiefe Kopie zurück; Das Ändern der Kopie hat keine Auswirkungen auf das Originalobjekt. „hp.copy(deep=False)“ teilt das zugrunde liegende Array; Das Ändern der Kopie wirkt sich synchron auf das Originalobjekt aus.
Integration mit „plot“: Hervorhebung mithilfe einer (M,L)-Maske
In Forschungsszenarien geben Ereignistage/Signale/handelbare Universen üblicherweise eine zweidimensionale boolesche Matrix „mask_ml“ mit der Form „(M, L)“ (Anzahl der Instrumente × Zeitdauer) aus. „highlight“ von „HistoryPanel.plot()“ unterstützt die Zuordnung dieser 2D-Maske zu hervorgehobenen Punkten in der aktuellen Abbildung:
Teilmengenmaske: Wenn „mask_ml.shape == (M_plot, L)“ ist, wobei „M_plot“ die Anzahl der von diesem „plot(shares=…)“ ausgewählten Anteile ist, wird sie in der Reihenfolge der Plotanteile abgeglichen;
Vollständige Maske: Wenn „mask_ml.shape == (M_all, L)“ („M_all == len(hp.shares)“), extrahieren Sie die aktuelle Plot-Teilmenge nach Freigabenamen (stilles Abschneiden nach Position ist verboten);
Overlay: Wenn „layout=‘overlay“ und zwei Instrumente überlagert werden, wird standardmäßig nur das Primärinstrument hervorgehoben (im Einklang mit der bestehenden Hervorhebungssemantik von Plotly).
Beispiel:
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
Ein schreibgeschützter Indexer zum Auswählen eines Unterpanels entlang „hdates“ (der Zeitachse).
„hp.loc[key]“ entspricht „hp[:, :, key]“ und wird für Slicing, Zeitbeschriftungen, Beschriftungslisten, „:“ oder eine 1D-boolesche Maske mit einer Länge gleich „row_count“ verwendet. Für boolesche Bedingungen „(M,L,N)“ auf Gitterebene verwenden Sie
where()und das nachfolgendemask=; Übergeben Sie keine Bedingungen auf Gitterebene an „loc“.- Rückgabe:
Ein leichter Proxy; Wenn Sie „[…]“ verwenden, wird ein Unterpanel entlang der Zeitachse ausgewählt.
- Rückgabetyp:
_HistoryPanelLocIndexer
Examples
>>> 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 auf Spaltenebene: zuweisen
„assign“ bietet eine pandas-ähnliche DSL auf Spaltenebene, die mehrere Spalten gleichzeitig ableiten oder aktualisieren kann. Es unterstützt die Konstruktion neuer Faktoren in einem einzigen Aufruf auf der Grundlage vorhandener oder neu hinzugefügter Spalten und unterstützt die Rückgabe eines neuen Panels oder das Erweitern von Spalten an ihrer Stelle im ursprünglichen Panel.
- HistoryPanel.assign(*, inplace: bool = False, **kwargs: Any) HistoryPanel[Quellcode]
Leiten Sie Spalten (htypes) im Batch ab oder aktualisieren Sie sie und unterstützen Sie dabei das gleichzeitige Anhängen oder Überschreiben mehrerer Spalten.
„assign()“ bietet ein pandas-ähnliches DSL auf Spaltenebene: Sie können mehrere neue Spalten gleichzeitig benennen und sie in einem einzigen Aufruf über Callables oder Arrays/Skalare ableiten; Innerhalb desselben Aufrufs können später definierte Spalten von zuvor neu hinzugefügten Spalten abhängen. Diese Methode unterstützt sowohl die Rückgabe eines neuen Panels als auch das direkte Erweitern/Überschreiben von Spalten im ursprünglichen Panel.
- Parameter:
inplace (bool, default False) – Bei „True“ werden die vorhandenen Spalten im aktuellen „HistoryPanel“ angehängt/überschrieben und sich selbst zurückgegeben. Bei „False“ werden Spalten an eine Kopie der aktuellen Daten angehängt/überschrieben und ein neues „HistoryPanel“ zurückgegeben.
**kwargs – Für jedes Schlüsselwortargument ist der Schlüssel der neue Spaltenname (htype) und muss eine nicht leere Zeichenfolge sein; Der Wert kann „Callable[[HistoryPanel], np.ndarray]“ oder ein Array/Skalar sein, das „np.asarray“-ed und an „(M, L)“ gesendet werden kann.
- Rückgabe:
Wenn „inplace=False`, return a new panel with the added columns; when ``inplace=True`“, wird das ursprüngliche Panel zurückgegeben.
- Rückgabetyp:
- Verursacht:
ValueError – Erhöhen (englische Nachricht), wenn das Panel leer ist, der Spaltenname eine leere Zeichenfolge ist oder das vom Callable/Array zurückgegebene Ergebnis nicht an „(M, L)“ gesendet werden kann.
TypeError – Wird ausgelöst, wenn der Spaltenname keine Zeichenfolge ist (englische Meldung).
Ein kurzes Beispiel (kann zusammen mit where() verwendet werden):
# 假设 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
Querschnitt und Normalisierung: Rang / Zscore
„Rang“ und „Zscore“ werden für „tägliches Querschnittsranking/Standardisierung“ und „pro Aktie rollierende Zeitreihenstandardisierung“ in der Lightweight-Faktor-Forschung verwendet. „zscore“ unterscheidet explizit zwei Semantiken über „Methode“:
„method=‘cs‘“: Datum festlegen und Querschnittsstandardisierung entlang der Anteilsdimension durchführen;
„method=‘ts“: Fixieren Sie den Anteil und führen Sie eine rollierende Standardisierung entlang der Zeitachse durch (erfordert „window“).
- HistoryPanel.rank(by: str, *, axis: str = 'share', method: str = 'average', new_htype: Optional[str] = None) HistoryPanel[Quellcode]
Ordnen Sie den Querschnitt (Teilungsdimension) Tag für Tag im Zeitverlauf, fügen Sie eine Spalte hinzu und geben Sie ein neues Panel zurück.
- Parameter:
by (str) – Spaltenname (htype), um am Ranking teilzunehmen. Wird zuerst von
_resolve_price_htype()geparst und unterstützt angepasste Suffixspalten wie „close|b“.axis ({'share'}, default 'share') – Derzeit wird nur ein Querschnittsranking entlang der Aktiendimension unterstützt.
method ({'average', 'min', 'max', 'first', 'dense'}, default 'average') – Umgang mit Rängen für gebundene Werte (Unentschieden); Die Semantik stimmt mit Pandas „Series.rank(method=…)“ überein.
new_htype (str, optional) – Name der Ausgabespalte; Wenn „Keine“ vorhanden ist, wird standardmäßig „rank_{by}“ verwendet.
- Rückgabe:
Das neue Panel nach dem Anhängen der Ranking-Spalte; Das Originalobjekt wird nicht verändert. Ein leeres Panel gibt ein leeres Panel zurück.
- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst (englische Meldung), wenn Parameter ungültig sind, keine Spalten vorhanden sind oder der Name der Ausgabespalte in Konflikt steht.
Examples
>>> 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[Quellcode]
Berechnen Sie standardisierte Bewertungen (zscore) für die angegebene Spalte und hängen Sie eine Spalte an, um ein neues Panel zurückzugeben.
Diese Methode unterscheidet explizit zwei gängige Semantiken über den Parameter „method“:
„method=‘cs“ (Querschnitt): jeden Zeitpunkt festlegen und Querschnittsnormalisierung entlang der Anteilsdimension durchführen;
„method=‘ts‘“ (Zeitreihenrollen): Fixieren Sie jeden Anteil und führen Sie eine rollierende Normalisierung entlang der Zeitachse durch.
- Parameter:
by (str) – Spaltenname (htype), der an der Normalisierung teilnehmen soll. Wird zuerst von
_resolve_price_htype()geparst und unterstützt angepasste Suffixspalten wie „close|b“.method ({'cs', 'ts'}, default 'cs') – Normalisierungssemantik: Querschnitt (cs) oder Zeitreihenrollen (ts).
window (int, optional) – Länge des Rollfensters (Anzahl der Balken), wenn „method=‘ts“; muss eine positive ganze Zahl sein; muss None sein, wenn „method=‘cs“ ist.
new_htype (str, optional) – Name der Ausgabespalte; Wenn „Keine“ vorhanden ist, wird standardmäßig „cs_z_{by}` or ``ts_z_{by}_{window}`“ verwendet.
- Rückgabe:
Ein neues Panel mit angehängter Zscore-Spalte; Das Originalobjekt wird nicht verändert. Ein leeres Panel gibt ein leeres Panel zurück.
- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst (englische Meldung), wenn Parameter ungültig sind, keine Spalten vorhanden sind oder der Name der Ausgabespalte in Konflikt steht.
Examples
>>> 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)
Ausrichtung und Resampling: align_to / resample
Wenn Sie elementweise Operationen an zwei „HistoryPanel“-Objekten durchführen müssen (z. B. Division, Subtraktion, Korrelation usw.) und deren „Anteile“ oder „hdates“ nicht übereinstimmen, kann die NumPy-Übertragung zu einer stillen Fehlausrichtung führen. Daher bietet dieses Projekt einen expliziten Ausrichtungseinstiegspunkt:
align_to(): Richtet „shares“ und „hdates“ nach Labels aus, unterstützt „join=‘inner‘|‘outer“ und füllt fehlende Werte mit „fill_value“;resample(): Neuabtastung entlang der Zeitachse; Sie müssen explizit „agg=“ angeben (das alle „htypes“ abdeckt), um „anscheinend erfolgreiche, aber nicht interpretierbare Ergebnisse“ zu vermeiden, die durch mehrdeutige Aggregationssemantik verursacht werden.
- HistoryPanel.align_to(other: HistoryPanel, *, join: str = 'inner', fill_value: float = nan) Tuple[HistoryPanel, HistoryPanel][Quellcode]
Richten Sie zwei HistoryPanels anhand der Beschriftungen entlang der Shares- und Hdates-Achsen aus, um eine stille Fehlausrichtung zu vermeiden.
Diese Methode richtet sich nicht nach iloc/position aus; Es führt nur eine explizite Ausrichtung mithilfe von Achsenbeschriftungen durch. Nach der Ausrichtung werden zwei neue Panels mit genau den gleichen „shares“, „hdates“ und „htypes“ zurückgegeben; Fehlende Rasterpunkte werden mit „fill_value“ aufgefüllt.
- Parameter:
other (HistoryPanel) – Ein weiteres Panel zum Ausrichten.
join ({'inner', 'outer'}, default 'inner') – Ausrichtungsmethode: - „inner“: Nehmen Sie den Schnittpunkt beider Anteile und Daten; - „äußer“: Nehmen Sie die Vereinigung von Anteilen und Daten. Die Ausgabereihenfolge ist stabil: Befolgen Sie für den Schnittpunkt die Reihenfolge „Selbst“; Setzen Sie für die Vereinigung zuerst „self“ und hängen Sie dann Elemente an, die in „other“, aber nicht in „self“ vorkommen.
fill_value (float, default np.nan) – Füllwert für fehlende Positionen nach der Ausrichtung.
- Rückgabe:
Ausgerichtet „(self_aligned, other_aligned)“.
- Rückgabetyp:
- Verursacht:
Examples
>>> 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[Quellcode]
Entlang der Zeitachse (hdates) gemäß der Regel neu abtasten und ein neues Panel zurückgeben.
Um eine stille Fehlausrichtung zu vermeiden, die durch eine mehrdeutige Aggregationssemantik verursacht wird, erfordert diese Methode die explizite Bereitstellung von „agg“ und sie muss alle „htypes“ im aktuellen Panel abdecken.
- Parameter:
- Rückgabe:
Das neue Panel nach dem Resampling; Das Originalobjekt wird nicht verändert. Ein leeres Panel gibt ein leeres Panel zurück.
- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst (mit einer englischen Meldung), wenn „agg“ fehlt, nicht alle Spalten abdeckt, unbekannte Spaltennamen enthält, die Aggregationsmethode ungültig ist oder „rule“ ungültig ist.
Examples
>>> 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')]
Rollfenster
Die Verwendung von Rolling-Window-Methoden ermöglicht gleitende Berechnungen entlang der Zeitdimension von HistoryPanel und unterstützt gängige Operationen wie gleitender Mittelwert und gleitende Standardabweichung:
- HistoryPanel.rolling(window: int, min_periods: Optional[int] = None, center: bool = False, by: str = 'share') HistoryPanelRolling[Quellcode]
Erstellen Sie ein Rolling-Window-Statistikobjekt basierend auf HistoryPanel.
Das Rollen erfolgt nur entlang der Zeitachse (Zeilen / Daten); „window“ ist eine ganzzahlige Anzahl von Balken.
- Parameter:
window (int) – Rollfensterlänge.
min_periods (int, optional) – Mindestanzahl gültiger Beobachtungen; Wenn weniger als dieser Wert, ist das Ergebnis „NaN`. Defaults to the same as ``window`“.
center (bool, default False) – Ob ein zentriertes Fenster verwendet werden soll; Die Semantik stimmt mit „pandas.Series.rolling“ überein.
by ({'share', 'htype'}, default 'share') – Geben Sie den Gruppierungsmodus für das Rollen an: - „Teilen“: Unabhängiges Rollen für jeden H-Typ jeder Aktie (am häufigsten); - ‚htype‘: Für jeden htype in allen Beständen unabhängig würfeln.
- Rückgabe:
Ein Statistikobjekt mit rollierendem Fenster; unterstützt den Aufruf von mean(), std(), min(), max() usw.
- Rückgabetyp:
Examples
>>> 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)[Quellcode]
Das Rolling-Window-Statistikobjekt für HistoryPanel.
Dieses Objekt wird normalerweise von
HistoryPanel.rolling()erstellt, entspricht einer festen Kombination von Fensterparametern und stellt Methoden wie „mean/std/sum/min/max/apply“ bereit, die ein neues HistoryPanel zurückgeben.- apply(func: Callable[[ndarray], float], raw: bool = False, **kwargs) HistoryPanel[Quellcode]
Wenden Sie eine benutzerdefinierte Funktion auf das Rollfenster an.
- Parameter:
func (callable) – Eine benutzerdefinierte Funktion, die einen Fenstervektor verwendet und einen Skalar zurückgibt.
raw (bool, default False) – Wenn „True`, pass an
ndarrayto func; otherwise pass a ``Series`“.**kwargs – Andere Parameter werden an func übergeben.
- Rückgabe:
Rollierendes Ergebnisfeld nach Anwendung einer benutzerdefinierten Funktion; Die Bezeichnungen „shares/hdates/htypes“ bleiben unverändert.
- Rückgabetyp:
Notes
Dasselbe wie bei Pandas: Wenn die Anzahl der gültigen Proben im Fenster kleiner als „min_periods“ ist, ist das Ergebnis NaN.
„func“ sollte einen skalaren numerischen Wert zurückgeben; Die Rückgabe eines Arrays oder eines nicht numerischen Typs kann dazu führen, dass pandas einen Fehler auslöst oder unerwartete Ergebnisse liefert.
Examples
>>> 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[Quellcode]
Berechnen Sie das Maximum des Rollfensters und geben Sie ein neues Panel zurück.
- Rückgabe:
Rollierendes Maximum-Ergebnis-Panel mit Beschriftungen, die mit dem Original-Panel übereinstimmen.
- Rückgabetyp:
- mean() HistoryPanel[Quellcode]
Berechnen Sie den Mittelwert des rollierenden Fensters und geben Sie ein neues Panel zurück.
- Rückgabe:
Rollierendes Mittelwert-Ergebnispanel mit Beschriftungen, die mit dem Originalpanel übereinstimmen.
- Rückgabetyp:
- min() HistoryPanel[Quellcode]
Berechnen Sie das Minimum des Rollfensters und geben Sie ein neues Panel zurück.
- Rückgabe:
Rollierendes Minimum-Ergebnispanel mit Beschriftungen, die mit dem Originalpanel übereinstimmen.
- Rückgabetyp:
- std() HistoryPanel[Quellcode]
Berechnen Sie die Standardabweichung des rollierenden Fensters und geben Sie ein neues Panel zurück.
- Rückgabe:
Rollierendes Standardabweichungs-Ergebnispanel mit Beschriftungen, die mit dem Originalpanel übereinstimmen.
- Rückgabetyp:
- sum() HistoryPanel[Quellcode]
Berechnen Sie die Summe des rollierenden Fensters und geben Sie ein neues Panel zurück.
- Rückgabe:
Rollierendes Summen-Ergebnispanel mit Beschriftungen, die mit dem Originalpanel übereinstimmen.
- Rückgabetyp:
Rendite- und Risikokennzahlen
- HistoryPanel.returns(price_htype: str = 'close', method: str = 'simple', periods: int = 1, as_panel: bool = False, dropna: bool = False)[Quellcode]
Berechnen Sie die Rendite basierend auf der angegebenen Preisreihe.
- Parameter:
price_htype (str, default 'close') – Der zur Berechnung der Rendite verwendete Preistyp muss in htypes vorhanden sein.
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) – Anzahl der Balken im Rückgabeintervall.
as_panel (bool, default False) – Wenn False, wird ein DataFrame zurückgegeben (index=time, columns=shares); Wenn True, wird ein HistoryPanel zurückgegeben (htypes enthält nur ret_{price_htype}).
dropna (bool, default False) – Wenn True, werden führende Zeilen gelöscht, die alle NaN sind.
- Rückgabetyp:
pandas.DataFrame or HistoryPanel
- HistoryPanel.cum_return(htypes: Optional[Union[str, Sequence[str]]] = None, *, method: str = 'simple', mask: Optional[ndarray] = None) HistoryPanel[Quellcode]
Berechnen Sie die kumulierten Renditen pro Aktie entlang der Zeitdimension (forschungsorientiert) und geben Sie ein neues Panel zurück.
Standardmäßig wird die Spalte „close“ berechnet (aufgelöst über
_resolve_price_htype(), unterstützt „close|b“ usw.). Der Name der Ausgabespalte ist „cumret_<vom Benutzer bereitgestellter Spaltenname>“ und steht im Einklang mit :meth:`returns unter Verwendung der Benennungsstrategie „ret_<price_htype>“. Wenn entlang des Zeitpfads NaN oder nicht positive Preise auftreten, sind alle nachfolgenden Ergebnisse ab diesem Zeitpunkt NaN (Pfad unterbrochen).- Parameter:
htypes (str, sequence of str, optional) – Spaltennamen, die an der Berechnung beteiligt sein sollen; wenn
None, only processclose(nach dem Parsen).method ({'simple', 'log'}, default 'simple') – „simple`: from the first valid positive price
t0,p_t/p_{t0}-1;log: ``log(p_t)-log(p_{t0})`“.mask (numpy.ndarray, optional) – Gleiche Übertragungsregeln wie
where(); Positionen, die „Falsch“ sind, werden vor der Berechnung als fehlend („NaN“) behandelt.
- Rückgabe:
„shares` / ``hdates`“ sind die gleichen wie das Originalpanel; enthält nur die kumulative Rückgabespalte.
- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst (auf Englisch), wenn „method“ ungültig ist, Spalten nicht analysiert werden können, „mask“ nicht gesendet werden kann oder der Name der Ausgabespalte mit vorhandenen „htypes“ in Konflikt steht.
Examples
>>> 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[Quellcode]
Skalieren Sie die angegebenen Spalten relativ zu 1,0 zum Basiszeitpunkt (forschungsorientiert) und geben Sie ein neues Panel zurück.
Verwendet standardmäßig den gültigen Preis bei „base_index“ als Nenner; Wenn dieser Zeitpunkt durch „Maske“ ausgeschlossen ist, „NaN“ beträgt oder 0 ist, dann ist die gesamte Zeitreihenausgabe für diesen (Anteil, Spalte) „NaN“. Der Name der Ausgabespalte lautet „norm_<vom Benutzer bereitgestellter Spaltenname>“.
- Parameter:
htypes (str, sequence of str, optional) – Spalten, die an der Berechnung beteiligt sind; wenn
None, onlyclose(nach dem Parsen).base_index (int, default 0) – Basisindex auf der Zeitachse (beginnend bei 0); Erhöhen Sie „ValueError“ (auf Englisch), wenn es außerhalb der Grenzen liegt.
mask (numpy.ndarray, optional) – Gleiche Übertragungsregeln wie
where().
- Rückgabe:
Gleicher „shares` / ``hdates`“ wie beim Originalpanel; enthält nur die normalisierten Spalten.
- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst, wenn Spalten nicht aufgelöst werden können, „Maske“ nicht gesendet werden kann, „base_index“ außerhalb der Grenzen liegt oder ein Konflikt mit den Namen der Ausgabespalten vorliegt (auf Englisch).
Examples
>>> 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[Quellcode]
Fassen Sie mehrere Aktien zu einer Portfolioreihe entlang der Aktiendimension zusammen (forschungsorientiert) und geben Sie ein neues Panel zurück.
Defaults to
benchmark_output='none'; Wenn „Benchmark“ festgelegt ist, können Sie Benchmark-Zeilen mit „tag_along“ anhängen oder mit „excess_only“ nur Spalten mit Überschuss-Präfix beibehalten (Portfolio minus Benchmark, mit Spaltennamen mit dem Präfix „Überschuss“).Wenn „groups“ den Wert „None“ hat, fassen Sie das gesamte Panel in einer Zeile mit dem Namen „new_share_name“ zusammen. Wenn „Gruppen“ nicht leer ist, sind die Schlüssel ausgegebene Freigabebezeichnungen (in Einfügungsreihenfolge) und die Werte sind Listen der ursprünglichen Freigaben innerhalb jeder Gruppe; Freigaben dürfen sich nicht gruppenübergreifend überschneiden. Bei „allow_ungrouped=‘error“ muss jede Panel-Freigabe genau einer Gruppe angehören.
Wenn „groups“ auf „None“ steht und „benchmark“ angegeben ist, nimmt die Benchmark-Aktie nicht an der Portfolioaggregation teil (um eine Vermischung von Index- und Einzelaktiengewichtungen zu vermeiden) und wird nur für „tag_along“ oder „excess_only“ verwendet; Wenn nach dem Ausschluss keine Freigabe verfügbar ist (z. B. wenn das Panel nur die Benchmark enthält), wird „ValueError“ ausgelöst.
Die Broadcast-Regeln für „mask“ stimmen mit
where(); Ungültige Rasterpunkte nehmen nicht an der Aggregation teil.- Parameter:
htypes (str or sequence of str, default 'close') – Spaltennamen, die an der Aggregation teilnehmen; gelöst über
_resolve_price_htype().mode ({'equal', 'weighted'}, default 'equal') – Gleichgewichtiger Durchschnitt oder ein gewichteter Durchschnitt, der zusammen mit „weights“ verwendet wird.
weights (numpy.ndarray, optional) – Form „(M,)` or
(M, L), aligned with the order ofself.shares; used only when ``mode=‘weighted‘`“.mask (numpy.ndarray, optional) – Gleiche Übertragungsregeln wie
where().groups (dict, optional) – Name der Ausgabegruppe → Liste der Freigabe-Tags innerhalb der Gruppe.
benchmark (str, optional) – Benchmark-Anteil; muss in „self.shares“ sein.
benchmark_output ({'none', 'tag_along', 'excess_only'}, default 'none') – Benchmark-Ausgabeformular; wenn kein „benchmark`, only ``‘none‘`“ vorhanden ist, ist dies zulässig.
new_share_name (str, default 'PORTFOLIO') – Freigabename für die synthetisierte Zeile, wenn kein „groups“ vorhanden ist.
normalize_weights (bool, default True) – Normalisieren Sie beim Gewichten die Gewichtungen der an der Aggregation beteiligten Mitglieder, bevor Sie die gewichtete Summe berechnen (numerisch äquivalent zu „Summe(w*x)/Summe(w)“).
allow_ungrouped ({'error', 'exclude'}, default 'error') – Wenn „groups“ nicht leer ist, wird angegeben, ob die Abdeckung aller Anteile erforderlich ist.
- Rückgabe:
Ein neues Objekt; „hdates“ und die Zeitdauer stimmen mit dem Originalpanel überein.
- Rückgabetyp:
- Verursacht:
ValueError – Ungültige Parameter, Freigabe nicht im Panel, überlappende Gruppen, Maske kann nicht übertragen werden usw. (auf Englisch).
- 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)[Quellcode]
Berechnen Sie die rollierende Volatilität (Standardabweichung) basierend auf der Renditereihe.
- Parameter:
window (int, default 20) – Länge des Rollfensters (Anzahl der Balken).
price_htype (str, default 'close') – Preistyp, der zur Berechnung der Rendite verwendet wird.
method ({'simple', 'log'}, default 'simple') – Die Renditeberechnungsmethode stimmt mit return() überein.
annualize (bool, default True) – Ob auf Jahresbasis umgerechnet werden soll (multiplizieren mit sqrt(periods_per_year)).
periods_per_year (int, optional) – Bars pro Jahr bei Annualisierung; Wenn nicht angegeben und „annualize=True“, versuchen Sie, aus dem Zeitintervall zu schließen, und geben Sie einen Fehler aus, wenn dies nicht möglich ist.
as_panel (bool, default False) – Das Rückgabeformat ist das gleiche wie return().
- Rückgabetyp:
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[Quellcode]
Berechnen Sie Kennzahlen wie Alpha/Beta für jede Aktie im Verhältnis zur gegebenen Benchmark-Renditereihe.
- Parameter:
benchmark (Series or DataFrame) – Basispreis-Zeitreihe; Der Index sollte mit HistoryPanel.hdates übereinstimmen oder sich zumindest überlappen. Wenn ein DataFrame bereitgestellt wird, wird nur die erste Spalte als Basispreis verwendet.
price_htype (str, default 'close') – Preistyp, der zur Berechnung der Rendite verwendet wird.
method ({'simple', 'log'}, default 'simple') – Die Renditeberechnungsmethode stimmt mit return() überein.
freq (str, optional) – Rückgabehäufigkeitszeichenfolge, die bei der Annualisierung von Alpha verwendet wird, um die Anzahl der Balken pro Jahr abzuleiten, z. B. „D“, „W“, „M“.
annualize (bool, default True) – Ob Alpha annualisiert werden soll.
- Rückgabe:
Index sind Aktien; Spalten sind [‚alpha‘, ‚beta‘, ‚r2‘, ‚n_obs‘].
- Rückgabetyp:
pandas.DataFrame
Candlesticks und technische Indikatoren
Primärer Einstiegspunkt: Research_preset
„research_preset“ wird verwendet, um schnell einen „häufig verwendeten Spaltensatz, der direkt dargestellt werden kann“ (z. B. OHLCV + MACD + MA) zusammenzustellen, wodurch eine implizite Indikatorberechnung während der Darstellung vermieden wird. Wenn Eingabespalten fehlen, wird ein englischer „ValueError“ ausgelöst und angegeben, welche Spalten fehlen.
- HistoryPanel.research_preset(name: str, *, inplace: bool = False) HistoryPanel[Quellcode]
Generieren Sie schnell einen häufig verwendeten Spaltensatz für Forschungszwecke basierend auf einer Voreinstellung und geben Sie das Ergebnisfenster zurück.
Diese Methode soll als „erster Einstiegspunkt“ von „HistoryPanel“ dienen: Ohne Einführung der Backtesting-Semantik können Sie schnell OHLCV + häufig verwendete technische Indikatorspalten (wie MACD und gleitende Durchschnitte) für die direkte Darstellung oder weitere Forschung zusammenstellen.
- Parameter:
name (str) – Voreingestellter Name. Derzeit unterstützt: - „ohlcv_macd_ma“: erfordert, dass das Panel mindestens „open/high/low/close/vol“ enthält und generiert „macd_12_26_9“, „macd_signal_12_26_9“, „macd_hist_12_26_9“ und „sma_20“.
inplace (bool, default False) – Bei „True“ werden voreingestellte Spalten an der ursprünglichen Stelle angehängt und die ursprüngliche Fläche zurückgegeben. Wenn False, wird ein neues Panel mit den hinzugefügten Spalten zurückgegeben.
- Rückgabe:
Der
HistoryPanelafter appending preset columns. Wheninplace=Truegibt das ursprüngliche Objekt zurück.- Rückgabetyp:
- Verursacht:
ValueError – Wird ausgelöst, wenn der Voreinstellungsname ungültig ist oder wenn erforderliche Eingabespalten für die Voreinstellung fehlen (Fehlermeldung erfolgt auf Englisch).
- HistoryPanel.kline
Ein technischer Candlestick-Indikator-Accessor, der Methoden wie sma, ema, bbands, macd, kdj usw. bereitstellt.
- HistoryPanel.apply_ta(func_name: str, htype: str = 'close', shares: Optional[Iterable[str]] = None, as_panel: bool = True, **kwargs)[Quellcode]
Rufen Sie technische Indikatorfunktionen in qteasy.tafuncs auf und übertragen Sie die Berechnung über mehrere Aktien hinweg.
- Parameter:
func_name (str) – Funktionsnamen in qteasy.tafuncs, wie „sma“, „ema“ usw.
htype (str, default 'close') – Der Datentyp der als Eingabe verwendeten eindimensionalen Zeitreihe.
shares (list of str, optional) – Liste der zu berechnenden Bestände; Standardmäßig werden alle Freigaben verwendet.
as_panel (bool, default True) – Wenn True, wird ein neues HistoryPanel mit an das Ende von htypes angehängten Ausgabespalten zurückgegeben. Wenn False, wird ein DataFrame (Zeit × [Freigabe, Ausgabename]) mit MultiIndex-Spalten zurückgegeben.
- HistoryPanel.candle_pattern(name: str, price_htypes: tuple[str, str, str, str] = ('open', 'high', 'low', 'close'), as_panel: bool = False, **kwargs)[Quellcode]
Berechnen Sie Candlestick-Mustersignale basierend auf Ta-Lib-Musterfunktionen.
- Parameter:
name (str) – Name der Musterfunktion, z. B. „cdlhammer“.
price_htypes (tuple of str, default ('open','high','low','close')) – Die htypes-Namen, die OHLC entsprechen.
as_panel (bool, default False) – False gibt einen DataFrame (Zeit × Aktien) zurück. True gibt einen HistoryPanel eines einzelnen H-Typs zurück.
Funktionen zur Verarbeitung historischer Daten auf qteasy-Ebene
qteasy bietet außerdem mehrere von der HistoryPanel-Klasse unabhängige Funktionen und unterstützt eine flexiblere Verarbeitung und Analyse historischer Daten:
- 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)[Quellcode]
Rufen Sie anhand der angegebenen Instrumente, Datentypen und Häufigkeit historische Daten aus der lokalen Datenquelle ab und fügen Sie sie in einer Struktur zusammen, die direkt von der Strategie verwendet werden kann.
Sie können die erforderlichen Datentypen über „htype_names“ oder „data_types“ angeben und diese mit „shares“ / „symbols“, einem Zeitbereich und „freq“ kombinieren, um den Abrufumfang zu steuern; Abhängig von den Einstellungen von „as_data_frame“ und „group_by“ gibt die Funktion einen HistoryPanel oder ein Diktat von DataFrames zurück, gruppiert nach Instrument/Datentyp. Informationen zur erweiterten Verwendung wie Datentypinferenz, Frequenzkonvertierung und trade_time_only finden Sie in den entsprechenden Abschnitten in der Dokumentation „Historical Data Retrieval get_history_data“.
- Parameter:
htype_names (str or list of str, optional) – Sammlung historischer Datennamen zum Abrufen; kann eine durch Kommas getrennte Zeichenfolge (z. B. „open, high, low, close“) oder eine Liste (z. B. „[‚open‘, ‚high‘, ‚low‘, ‚close‘]`` sein). Wenn leer, leitet das System verfügbare htypes basierend auf Parametern wie „freq“ / „asset_type“ ab.
htypes (list of DataType, optional, deprecated) – Liste historischer Datentypobjekte; Die Semantik ähnelt „htype_names“. Bevorzugen Sie die neue Schnittstelle „htype_names“ / „data_types“.
data_types (list of DataType, optional) – Eine Sammlung abzurufender historischer Datentypen, bei denen es sich um zulässige Datentypobjekte handeln muss. Wenn dieses Argument angegeben wird, wird htype_names ignoriert, andernfalls werden mögliche Htypes basierend auf dem Argument htype_names erstellt
data_source (DataSource, optional) – Datenquellen, die Zugriff auf historische Daten erfordern
shares (str or list of str, optional) – Sammlung von Sicherheitscodes; kann eine durch Kommas getrennte Zeichenfolge (z. B. „000001.SZ, 000002.SZ“) oder eine Liste (z. B. „[‘000001.SZ‘, ‚000002.SZ‘]“ sein).
symbols (str or list of str, optional) – Sammlung von Sicherheitscodes; kann eine durch Kommas getrennte Zeichenfolge (z. B. „000001, 000002“) oder eine Liste (z. B. „[‘000001‘, ‚000002‘]“ sein).
start (str, optional) – JJJJMMTT HH:MM:SS Format Datum/Uhrzeit des Startdatums/der Startuhrzeit der erfassten historischen Daten (falls verfügbar)
end (str, optional) – JJJJMMTT HH:MM:SS Format Datum/Uhrzeit, Enddatum/Uhrzeit der erfassten historischen Daten (falls verfügbar)
rows (int, default 10) – Die Anzahl der abzurufenden Zeilen historischer Daten. Wenn Start und Ende angegeben sind, wird dieser Parameter ignoriert und der Zeitbereich der abgerufenen Daten beträgt [Start, Ende]. Wenn Start und Ende nicht angegeben sind, werden die neuesten Zeilen in der Tabelle abgerufen, und die Geschwindigkeit beim Abrufen der Daten mithilfe von Zeilen ist viel langsamer als bei der Verwendung von Datum.
freq (str, optional) – Frequenz; unterstützt Minutenintervalle wie „1 Minute“/„5 Minuten“/„15 Minuten“/„30 Minuten“ sowie stündliche/tägliche/wöchentliche/monatliche Intervalle wie „H“/„T“/„W“/„M“ (z. B. Kerzen).
asset_type (str or list of str, optional) – Asset-Typ-Filter; kann eine durch Kommas getrennte Zeichenfolge (z. B. „E, IDX“) oder eine Liste (z. B. „[‘E‘, „IDX‘]“ sein). Zu den gängigen Werten gehören „any“, „E“, „IDX“, „FT“, „FD“ usw.
adj (str, optional, deprecated) – Veraltete Anpassungsoptionen (
none/n,back/b,forward/fw/f). Verwenden Sie für neuen Code explizit den angepassten Spaltennamen in htype (z. B. „close|b“).as_data_frame (bool, default True) – Gibt „HistoryPanel` when
True; returns a dictionary ofDataFramewhen ``False`“ zurück.group_by (str, default 'shares') – Gruppierungsschlüssel bei der Rückgabe eines Diktats von DataFrames; üblicherweise
'shares'/'share'/'s'oder'htypes'/'htype'/'h'.**kwargs – Zusätzliche Parameter, die an die zugrunde liegende Datenabfrage/Frequenzkonvertierung weitergegeben werden (z. B. „drop_nan“, „resample_method“ usw.). Ausführliche Informationen zu den verfügbaren Werten und zur Semantik finden Sie in der Dokumentation „Historical Data Retrieval get_history_data“ und in den Hinweisen zu „infer_data_types“.
- Rückgabe:
HistoryPanel – Wenn „as_data_frame“ False ist, wird ein HistoryPanel-Objekt zurückgegeben, das alle angeforderten Daten enthält.
dict of pandas.DataFrame – Wenn
as_data_frameis True, returns a dict of DataFrames grouped bygroup_by.
Examples
>>> 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)[Quellcode]
Kombinieren Sie mehrere „DataFrame` objects into a single ``HistoryPanel`“.
- Parameter:
dfs (list of pandas.DataFrame or dict of pandas.DataFrame) – Die zu stapelnden Tische; Bei einer „Liste“ müssen Sie in der Regel explizit Achsenbeschriftungen mit „Shares“/„htypes“ angeben. Bei einem „Dikt“ können seine Schlüssel als Standard-Label-Quelle verwendet werden.
dataframe_as ({'shares', 'htypes'}, default 'shares') – „Shares“ bedeutet, dass jeder „DataFrame“ einem Instrument entspricht (Spalten sind H-Typen); „htypes“ bedeutet, dass jeder „DataFrame“ einem Datentyp entspricht (Spalten sind Anteile).
shares (str or list of str, optional) – Ebenenbeschriftungen des Ausgabefelds, wenn „dataframe_as=‘shares‘“; kann eine durch Kommas getrennte Zeichenfolge oder eine Liste sein.
htypes (str or list of str, optional) – Spaltenbeschriftungen des Ausgabebereichs, wenn „dataframe_as=‘htypes‘“; kann eine durch Kommas getrennte Zeichenfolge oder eine Liste sein.
fill_value (int or float, optional) – Füllwert, der beim Ausrichten fehlender Positionen verwendet wird; Standard
NaN.
- Rückgabe:
Ein HistoryPanel-Objekt, das aus mehreren Einzelindex-Datenfeldern besteht.
- Rückgabetyp:
Examples
>>> 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
Die Grenze zwischen Forschung und formalem Backtesting (weiterführende Literatur)
Auf „HistoryPanel“ sind „cum_return“, „portfolio“, „plot“ usw. auf Erkundung und schnelle Überprüfungen ausgerichtet; Formales Backtesting (Abrechnung, Gebühren, Signaltypen, Datenfenster, die Look-Ahead-Funktionen vermeiden usw.) wird weiterhin von „Strategy“ / „Operator“ / Backtester abgewickelt. Den Lesern wird empfohlen, neben dieser API-Seite Folgendes zu lesen:
Tutorial Verwenden von HistoryPanel zum Bearbeiten und Analysieren historischer Daten §9 (Forschung → „FactorSorter“ / „Operator“), §10 (Multi-Source-Datenpaneling), §11 (Export nach pandas / Statistikmodelle);
Designhinweise HistoryPanel und die optionale FactorResearch-Ebene (Bewertungsschlussfolgerungen dazu, ob ein unabhängiges Faktorstatistikmodul hinzugefügt werden soll).