2. Informationen auf standardisierte Weise aus Datentabellen extrahieren
In den vorherigen Kapiteln haben wir die Konzepte von Datenquellen vorgestellt und erklärt, wie diese mit Finanzdaten gefüllt werden. In diesem Kapitel erklären wir, wie man nützliche Informationen aus Datenquellen extrahiert, anstatt einfach nur Daten zu lesen.
QTEASY Datenverwaltungsmodul: 
2.1. Informationen != Daten
Beim quantitativen Handel müssen wir eine große Menge an Finanzdaten vorbereiten. Allerdings sind die Daten selbst nicht das ultimative Ziel; Wir müssen daraus nützliche Informationen extrahieren. In unseren Handelsstrategien nutzen wir diese Informationen, um Handelsentscheidungen zu treffen.
Informationen sind nicht dasselbe wie Daten. Einige Informationen können direkt aus Datentabellen abgelesen werden, beispielsweise der Schlusskurs und der Eröffnungskurs einer Aktie. Für einige Informationen sind jedoch bestimmte Berechnungen erforderlich, beispielsweise der angepasste Preis einer Aktie.
Beispielsweise müssen wir in unserer Handelsstrategie den vorab angepassten Preis einer Aktie verwenden. Wir wissen, dass der angepasste Preis anhand des Aktienkurses und des Anpassungsfaktors berechnet wird und diese in den folgenden beiden Tabellen gespeichert sind:
„stock_daily“: Ein tägliches Candlestick-Diagramm der Aktienkurse, einschließlich Informationen wie Eröffnungskurs, Schlusskurs, Höchstkurs und Tiefstkurs.
„stock_adj_factor“: Diese Tabelle enthält Informationen über die angepassten Aktienpreisfaktoren der Aktie.
Zu diesem Zeitpunkt sind in den beiden obigen Tabellen die von uns benötigten Daten gespeichert, es handelt sich jedoch nicht um die von uns benötigten Informationen. Wir müssen Berechnungen durchführen, um die benötigten Informationen zu erhalten.
Um die angepassten Preisinformationen zu erhalten, kommen wir daher nicht um den langwierigen Berechnungsprozess herum.
Darüber hinaus muss berücksichtigt werden, dass wir, wenn wir den angepassten täglichen Candlestick-Preis anstelle des angepassten stündlichen Candlestick-Preises benötigen, auch die täglichen Candlestick-Daten in die stündlichen Candlestick-Daten umrechnen müssen, was den Berechnungsprozess noch komplizierter macht.
Wenn bei der Umsetzung einer Handelsstrategie der obige Umrechnungs- und Berechnungsprozess bei jeder Verwendung angepasster Preise berücksichtigt wird, wird die Umsetzung der Strategie komplex und fehleranfällig. Es wird auch dazu führen, dass wir unsere begrenzte Energie auf diese trivialen Berechnungen streuen, anstatt uns auf die Umsetzung der Strategie zu konzentrieren.
Deshalb brauchen wir eine Möglichkeit, diese trivialen Rechenprozesse zu kapseln, sodass wir uns bei der Umsetzung einer Strategie nur auf die Strategie selbst konzentrieren müssen, ohne uns um diese trivialen Rechenprozesse kümmern zu müssen.
Um dieses Problem zu beheben, bietet das Datenverwaltungsmodul „qteasy“ eine standardisierte Möglichkeit, Informationen aus Datentabellen zu extrahieren. Dieser Weg führt über das Objekt „DataType“.
2.2. DataType-Objekt
Das Objekt „DataType“ ist ein wichtiges Objekt im Datenverwaltungsmodul „QTEASY“. Es wurde offiziell in Version 1.4 eingeführt und kapselt eine standardisierte Datenverarbeitungslogik zum Extrahieren von Informationen aus Datentabellen. Dadurch können Benutzer ein einzelnes „DataType“-Objekt definieren und sich auf die Umsetzung ihrer Strategien konzentrieren, anstatt Zeit mit mühsamer Datenerfassung und -berechnung zu verbringen.
„qteasy“ bietet eine große Anzahl integrierter vordefinierter „DataType“-Objekte, und Benutzer können „DataType“-Objekte auch an ihre eigenen Bedürfnisse anpassen.
Nehmen wir als einfaches Beispiel an, wir müssten den angepassten Preis einer Aktie nach Aktiensplits oder Dividenden ermitteln. Wir können das integrierte Objekt „DataType“: „close|b“ direkt verwenden, wie unten gezeigt:
# 获取格力电器 2025-02-01 到 2025-02-27 的后复权收盘价
import qteasy
from qteasy.datatypes import DataType
close_b = DataType(name='close|b', asset_type='E', freq='D')
# 获取数据
close_b.get_data_from_source(
datasource=qteasy.QT_DATA_SOURCE,
symbols='000651.SZ',
starts='2025-02-01',
ends='2025-02-27',
)
ts_code 000651.SZ
trade_date
2025-02-05 9234.85
2025-02-06 9194.82
2025-02-07 9295.95
2025-02-10 9245.38
2025-02-11 9199.03
2025-02-12 9220.10
2025-02-13 9232.74
2025-02-14 9268.56
2025-02-17 9201.14
2025-02-18 9066.29
2025-02-19 8836.63
2025-02-20 8817.67
2025-02-21 8714.43
2025-02-24 8695.47
2025-02-25 8533.23
2025-02-26 8621.72
2025-02-27 8729.18
2.3. 所有 DataType 清单(罗列并简短介绍)
qteasy 2.0 内置了大量 DataType,每种数据类型由 name(名称)、freq(频率)、asset_type(资产类型)唯一确定,并对应到具体数据表及列或计算方式。完整清单可通过 qteasy.datatypes.get_dtype_map() 获取,返回的 DataFrame 索引为 (dtype, freq, asset_type),列包含 description(用途描述)、acquisition_type(获取方式)等。
获取完整清单
import qteasy
from qteasy import datatypes
# 仅内置类型
dtype_map = datatypes.get_dtype_map()
print(dtype_map.head(20))
# 含用户自定义类型(若有)
dtype_map_all = datatypes.get_dtype_map(include_user_defined=True)
常见数据类型示例
name(名称) |
freq |
asset_type |
用途简述 |
|---|---|---|---|
trade_cal |
d |
None |
交易日历 |
close|b |
D |
E |
股票后复权收盘价 |
close|f |
D |
E |
股票前复权收盘价 |
open, high, low, close, vol |
D/1min/5min/… |
E/IDX/FD 等 |
K 线开高低收、成交量 |
open|b, high|b 等 |
D |
E |
后复权开高低收 |
stock_symbol, stock_name, industry |
None |
E |
股票代码、名称、行业等基本信息 |
wt_idx|% |
d |
E |
指数成分股权重 |
… |
… |
… |
完整列表见 get_dtype_map() 输出 |
上表中 freq 常用取值:D 日线,1min/5min 等为分钟线,None 表示与频率无关(如基本信息)。asset_type:E 股票,IDX 指数,FD 基金,None 表示不限定资产。每种类型的详细说明、对应数据表及列见 get_dtype_map() 返回的 description 与 kwargs。
当需要在同一时间轴上同时携带多只标的、多种数据类型(例如 OHLC 与成交量一并参与计算或出图)时,下一章 HistoryPanel(历史数据面板) 介绍如何把 get_history_data 的结果收拢为三维面板;制图入口则见再下一章 HistoryPanel 可视化。