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 other using ge from the operator module; returns a numpy.ndarray with 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:

HistoryPanel

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 as hp['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-HistoryPanel mit 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.values or sub.to_numpy(). A subpanel’s values may share memory with the parent panel (NumPy view rules); if you need an independent copy, use subpanel(..., copy=True) or ``sub.copy()`“ 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 loc akzeptierten „Schlüssel“. Boolesche Arrays „(M, L, N)“ auf Gitterebene werden nicht als Indizes der dritten Achse verwendet; Bitte verwenden Sie where().

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:

HistoryPanel

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-str lö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:

HistoryPanel

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:

HistoryPanel

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_kline

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

HistoryPanel

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

property share_count

Ermitteln Sie die Anzahl der Aktien oder Vermögensarten im HistoryPanel

property shares

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:

HistoryPanel

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:

HistoryPanel

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.]]])
to_share_frame(share: Union[str, int]) DataFrame[Quellcode]

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, and portfolio can 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 ein numpy.ndarray (boolescher dtype) zurück, kein HistoryPanel; 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 nachfolgende mask=; Ü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:

HistoryPanel

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:

HistoryPanel

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:

HistoryPanel

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:

(HistoryPanel, HistoryPanel)

Verursacht:
  • TypeError – Wird ausgelöst, wenn „other` is not a ``HistoryPanel`“ (englische Nachricht).

  • ValueError – Wird ausgelöst, wenn „join` is invalid, or when the two ``htypes`“ nicht genau identisch sind (englische Meldung).

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:
  • rule (str) – Eine mit Pandas kompatible Resampling-Regelzeichenfolge, z. B. „‘W‘`, 'M', ``‘5D‘`“ usw.

  • agg (dict, required) – Aggregationsregel-Diktat: „{htype_name: agg_name}“, wobei „agg_name“ „‘first‘|‘last‘|‘min‘|‘max‘|‘sum‘|‘mean‘` unterstützt. Muss alle „htypes“ abdecken.

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:

HistoryPanel

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:

HistoryPanelRolling

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 ndarray to 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:

HistoryPanel

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:

HistoryPanel

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:

HistoryPanel

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:

HistoryPanel

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:

HistoryPanel

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:

HistoryPanel

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 process close (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:

HistoryPanel

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, only close (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:

HistoryPanel

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 of self.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:

HistoryPanel

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 HistoryPanel after appending preset columns. When inplace=True gibt das ursprüngliche Objekt zurück.

Rückgabetyp:

HistoryPanel

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 of DataFrame when ``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_frame is True, returns a dict of DataFrames grouped by group_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:

HistoryPanel

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: