QTEASY Schnellstart-Anleitung

Installation und Import

使用 pip 安装(要求 Python >= 3.9, <3.13):部分功能(如全部内置策略、数据库存储等)需要可选依赖,详见 FAQ 与安装说明。

pip install qteasy

Nach dem Start können Sie qteasy importieren und die Versionsnummer anzeigen:

>>> import qteasy as qt
>>> print(qt.__version__)

Die Ausgabe lautet wie folgt:

2.6.0
  • qteasy Versionsverlauf — Änderungshinweise für jede Version, die vor dem Upgrade eingesehen werden können.


In einer Minute durchstarten

In diesem Abschnitt führen wir Sie durch: tushare Token konfigurieren → Zehn Jahre Indexdaten des CSI 300 herunterladen → Daten und K-Linien ansehen → mit der integrierten DMA-Strategie ein Timing-Backtesting für 000300.SH durchführen und ein nutzbares Backtest-Ergebnis erhalten.

1. 配置 tushare Token

qteasy verwendet standardmäßig Tushare, um Finanzdaten herunterzuladen. Um Daten herunterladen zu können, müssen Sie zunächst den API-Token von tushare in der Startkonfigurationsdatei des Systems konfigurieren (bitte registrieren Sie sich zuerst auf der tushare-Website und holen Sie sich den Token).

Es gibt zwei Möglichkeiten, die Startkonfigurationsdatei zu ändern:

Methode 1: Startkonfiguration im Code setzen Führen Sie vor dem ersten Daten-Download update_start_up_setting() aus, um die Startkonfiguration zu ändern und sie automatisch in der Startkonfigurationsdatei zu speichern:

>>> qt.update_start_up_setting(tushare_token='你的tushare_API_Token')  # 启动配置将被保存到启动配置文件中
>>> qt.start_up_settings()  # 查看启动配置文件的内容

Die Ausgabe lautet wie folgt:

Start up settings:
--------------------
tushare_token = <你的tushare_API_token>
...

Methode 2: Startkonfigurationsdatei direkt bearbeiten Die Startkonfigurationsdatei qteasy.cfg wird im qteasy-Root-Verzeichnis gespeichert (Sie können den Pfad der Konfigurationsdatei über qt.QT_ROOT_PATH einsehen). Öffnen Sie die Datei mit einem beliebigen Texteditor und fügen Sie darin eine Zeile hinzu:

tushare_token = 你的tushare_API_Token  # 直接打开文件并在其中新增配置,字符串配置不需要使用双引号

2. 下载 000300.SH 十年指数数据

Nachdem Sie den tushare Token konfiguriert haben, laden Sie die Tagesdaten des CSI-300-Index (000300.SH) herunter. Es wird empfohlen, zuerst den Handelskalender und die Index-Grundinformationen herunterzuladen und anschließend die Index-Tagesdaten (ca. zehn Jahre):

Mit der Funktion qteasy.refill_data_source() lädt qteasy automatisch Daten über die konfigurierten Download-Kanäle herunter. Wenn die Datenmenge zu groß ist, werden die Daten automatisch in Blöcken heruntergeladen, geprüft und bereinigt und anschließend in der Datenbank gespeichert.

>>> # 下载交易日历与指数基础信息
>>> qt.refill_data_source(tables=['trade_calendar', 'index_basics'])
>>> # 下载 000300.SH 近十年日线数据
>>> qt.refill_data_source(
...     tables=['index_daily'],
...     start_date='20140101',
...     end_date='20241231',
...     symbols=['000300.SH'],
... )

Die Ausgabe lautet wie folgt:

Filling data source file://csv@qt_root/data/ ...
into 1 table(s) (parallely): {'trade_calendar'}
<trade_calendar> 35000 wrn: 100%|█████████████████████████████████████████████████████| 8/8 [00:05<00:00,  1.58task/s]
Data refill completed! 35000 rows written into 1/1 table(s)!

Filling data source file://csv@qt_root/data/ ...
into 2 table(s) (parallely): {'index_daily', 'index_basic'}
<index_daily> 152760 wrn: 100%|███████████████████████████████████████████████████████| 2/2 [00:05<00:00,  2.51s/task]
<index_basic> 1327 wrn: 100%|█████████████████████████████████████████████████████████| 8/8 [00:05<00:00,  1.58task/s]
Data refill completed! 154087 rows written into 2/2 table(s)!

3. 查看数据与 K 线图

Nachdem die Daten gespeichert wurden, können Sie mit get_history_data Daten abrufen und mit HistoryPanel.plot sowie qt.candle K-Linien zeichnen, um zu prüfen, ob Daten und Marktdaten normal sind:

>>> # 获取近一年日线,直接返回 HistoryPanel
>>> hp = qt.get_history_data(
...     htypes='open, high, low, close',  # 需要获取的数据类型分别为开盘价、最高价、最低价、收盘价
...     shares='000300.SH',  # 资产类型为沪深300指数
...     start='20230101',  # 数据起始日期
...     end='20231231',  # 数据结束日期
... )
>>> print(hp)  # 查看数据结构与范围
>>> # 在 HistoryPanel 上绘制静态 K 线 + 成交量
>>> hp.plot(interactive=False)
>>> # 或者使用 qt.candle 快速绘制 K 线(内部同样基于 HistoryPanel)
>>> qt.candle('000300.SH', start='2023-06-01', end='2023-12-01', asset_type='IDX')

3.1 Interaktive Diagramme (Plotly) und Abhängigkeiten

Wenn du im Notebook zoomen, verschieben und die konkreten Werte zu jeder einzelnen K-Linie/zu jedem Indikator anzeigen möchtest, kannst du interaktive Diagramme verwenden:

>>> hp.plot(interactive=True)

Interaktive Diagramme basieren auf Plotly. Es wird empfohlen, die Installation entsprechend Ihrer Umgebung auszuwählen:

  • Grundlegende Interaktion (Plotly Figure):

pip install plotly
  • Vollständigere Interaktion im Notebook (FigureWidget + Callbacks):

pip install ipywidgets anywidget

In Notebook-Umgebungen versucht qteasy vorrangig, ein vollständigeres FigureWidget-Erlebnis bereitzustellen; wenn der aktuelle Kernel/die Abhängigkeiten dies nicht erfüllen, wird auf eine HTML-Darstellung zurückgegriffen. Ist Plotly nicht installiert, wirft interactive=True direkt eine englische Fehlermeldung (meist mit „requires plotly“).

3.2 Die am häufigsten verwendeten Interaktionsparameter

  • plotly_backend_app='auto'|'FigureWidget'|'html': Ausgabeart im Notebook auswählen (Standard: 'auto').

  • layout='auto'|'overlay'|'stack': Layout für mehrere Basiswerte. 'overlay' wird am häufigsten für den überlagerten Vergleich von zwei Basiswerten verwendet; 'auto' wählt automatisch zwischen „zwei Basiswerte → overlay, sonst → stack“.

  • highlight='max'|'min': Maximal-/Minimalwert-Punkte hervorheben (sowohl statisch als auch interaktiv verfügbar).

Die Ausgabe lautet wie folgt:

{'000300.SH':
               open     high      low    close
2023-01-03  3864.84  3893.99  3831.25  3887.90
2023-01-04  3886.25  3905.90  3873.65  3892.95
2023-01-05  3913.49  3974.88  3912.26  3968.58
...             ...      ...      ...      ...
2023-10-10  3696.25  3701.26  3655.59  3657.13
2023-10-11  3674.75  3689.53  3658.35  3667.55
2023-10-12  3697.93  3711.50  3682.84  3702.38

[186 rows x 4 columns]
}

png

3.5 Historische Daten bedienen (HistoryPanel)

In der praktischen Forschung müssen wir oft nicht nur „K-Linien ansehen“, sondern auch historische Daten im Code statistisch auswerten und Faktoren generieren. get_history_data() kann nicht nur ein DataFrame zurückgeben, sondern auch direkt ein dreidimensionales HistoryPanel, was einheitliche Berechnungen über mehrere Instrumente und mehrere Kennzahlen hinweg erleichtert:

>>> # 获取 000300.SH 的 OHLCV 历史数据,并返回 HistoryPanel
>>> hp = qt.get_history_data(
...     htypes='open, high, low, close, vol',
...     shares='000300.SH',
...     start='20230101',
...     end='20231231',
...     as_data_frame=False,          # 关键:返回 HistoryPanel
... )
>>> print(hp.shape, hp.shares, hp.htypes)

>>> # 1) 计算简单收益率矩阵(时间 × 股票)
>>> ret = hp.returns(price_htype='close', method='simple')
>>> print(ret.head())

>>> # 2) 计算 20 日滚动波动率
>>> vol = hp.volatility(window=20, price_htype='close', annualize=True)
>>> print(vol.tail())

>>> # 3) 生成 K 线技术指标(如 20 日均线、MACD)
>>> hp_ma = hp.kline.sma(window=20)              # 在 htypes 中新增 'sma_20'
>>> hp_ma_macd = hp_ma.kline.macd()              # 再追加 MACD 指标
>>> print(hp_ma_macd.htypes)

>>> # 4) 识别蜡烛形态(如锤头线)
>>> hammer = hp.candle_pattern('cdlhammer')      # 返回 DataFrame,非 0 代表出现形态
>>> print(hammer[hammer['000300.SH'] != 0].head())

>>> # 5) 单只股票切片成 DataFrame,方便与 pandas / sklearn 等联动
>>> df_300 = hp_ma_macd.to_share_frame('000300.SH')
>>> print(df_300.tail())

Das obige Beispiel zeigt, wie man nach dem Erhalt eines HistoryPanel aus get_history_data(..., as_data_frame=False) in ein bis zwei Zeilen Code die Berechnung von Rendite, Volatilität, technischen Indikatoren und Chart-/Formationssignalen abschließt und jederzeit zurück zum vertrauten DataFrame wechseln kann, um weiter zu analysieren.

Für eine systematischere Verwendung von HistoryPanel siehe im „Benutzerhandbuch“ das Kapitel „Operation und Analyse historischer Daten“ sowie die HistoryPanel API-Referenz.

4. 使用 DMA 策略做择时回测

Verwenden Sie die integrierte DMA-Gleitdurchschnitts-Timing-Strategie, mit 000300.SH als Handelsinstrument, und führen Sie einen Backtest auf den heruntergeladenen Daten der letzten zehn Jahre durch. Im Folgenden wird eine gängige und relativ stabile Parametersatz verwendet (kurzer MA 20, langer MA 60, DMA-Periode 10), um direkt Backtest-Ergebnisse und Diagramme zu erhalten:

>>> # 设置qteasy的运行配置参数
>>> qt.configure(
...     asset_pool='000300.SH',  # 交易资产池包括沪深300指数
...     asset_type='IDX',  # 投资资产类型为IDX-指数
...     invest_cash_amounts=[100000],  # 回测初始投资金额为十万元
...     invest_start='20150101',  # 回测投资初始日期
...     invest_end='20241231',  # 回测投资结束日期
...     cost_rate_buy=0.0003,  # 交易费率:买入手续费万分之三
...     cost_rate_sell=0.0001,  # 交易费率:卖出手续费万分之一
...     visual=True,  # 是否输出回测结果可视化图表:是
...     trade_log=True,  # 是否输出回测记录:是
... )
>>> op = qt.Operator(strategies='dma')  # 创建一个交易员对象,执行一个DMA交易策略
>>> op.set_parameter('dma', par_values=(20, 60, 10))  # 设置交易策略的参数
>>> res = qt.run(op, mode=1)  # 启动交易,运行模式为1(回测交易)

Die Ausgabe lautet wie folgt:

====================================
|                                  |
|         BACKTEST REPORT          |
|                                  |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 81.3 ms
time consumption for operation back testing:  4.9 ms
investment starts on      2015-01-05 15:00:00
ends on                   2024-12-30 15:00:00
Total looped periods:     10.0 years.
-------------operation summary:------------
Only non-empty shares are displayed, call 
"loop_result["oper_count"]" for complete operation summary
          Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH   340       41    381   44.7%     -0.0%     55.3%  

Total operation fee:     ¥    3,261.19
total investment amount: ¥  100,000.00
final value:              ¥  115,601.73
Total return:                    15.60% 
Avg Yearly return:                1.46%
Skewness:                         -1.16
Kurtosis:                         16.95
Benchmark return:                 1.67% 
Benchmark Yearly return:          0.17%

------strategy loop_results indicators------ 
alpha:                            0.006
Beta:                             0.975
Sharp ratio:                      0.113
Info ratio:                       0.001
250 day volatility:               0.130
Max drawdown:                    36.85% 
    peak / valley:        2015-04-27 / 2018-11-27
    recovered on:         Not recovered!


==================END OF REPORT===================

png

Nach dem Ausführen erhalten Sie die Ertragskurve, den maximalen Drawdown, die Sharpe-Ratio und weitere Bewertungskennzahlen sowie Visualisierungsdiagramme. Wenn Sie andere Parameter ausprobieren oder den Optimierungsbereich anpassen möchten, können Sie sich am Abschnitt „Was kann qteasy?“ im nächsten Kapitel orientieren, insbesondere an der Parameteroptimierung und der Backtest-Dokumentation.


Was kann qteasy leisten

Finanzhistorische Daten abrufen und verwalten:

  • Bequem große Mengen historischer Finanzdaten aus mehreren Quellen beziehen, nach der Datenbereinigung lokal in einem einheitlichen Format speichern

  • Mit dem DataType-Objekt lassen sich die verfügbaren Informationen in Finanzdaten strukturiert verwalten. Selbst komplexe Informationen wie adjustierte Kurse oder Indexbestandteile lassen sich mit nur einer Zeile Code abrufen.

  • Finanzdatenvisualisierung, statistische Analyse sowie Visualisierung der Analyseergebnisse auf Basis von DataType-Objekten

  • Lokale Datenspeicherung und bedarfsgerechter Abruf: eine konsistente Datenbasis für Backtests und Live-Handel, leicht reproduzierbar

png

Handelsstrategien auf einfache und sichere Weise erstellen

  • Über die Klasse BaseStrategy ist die Definition von Handelsstrategien intuitiv und logisch klar

  • Über 70 integrierte Strategien sind sofort einsatzbereit. Dank des einzigartigen Mechanismus zum Mischen und Gruppieren von Strategien lassen sich komplexe Strategien aus einfachen Strategien zusammensetzen – wie beim Bauen mit Bausteinen.

  • Die Dateneingabe und Nutzungsmethoden der Handelsstrategie sind vollständig gekapselt und sicher, wodurch Probleme wie unbeabsichtigte Future-Funktionen, Datenlecks usw. vollständig vermieden werden und die Authentizität und Zuverlässigkeit der Strategieergebnisse gewährleistet wird.

  • Dieselbe Strategielogik wird sowohl für Backtests als auch für den Live-Handel verwendet und reduziert so die Diskrepanz zwischen „im Backtest sieht es gut aus, im Live-Handel weicht es ab“.

png

Backtest-Bewertung, Optimierung und Simulation automatisierten Handels für Handelsstrategien

  • Die Strategieausführung über die Trader-Klasse Operator verwalten, Strategien im Backtest gemäß dem realen Markthandelsrhythmus testen, die Handelsergebnisse multidimensional und umfassend bewerten und Handelsberichte sowie Ergebnisdiagramme erstellen.

  • Bietet verschiedene Optimierungsalgorithmen, darunter Simulated Annealing, genetische Algorithmen und Bayes’sche Optimierung, um die Strategieleistung in großen Parameter-Räumen zu optimieren.

  • Echtzeit-Marktdaten abrufen, Strategien ausführen, um automatisierten Handel zu simulieren, und Handelsprotokolle, Aktienpositionen, Änderungen der Kontomittel usw. nachverfolgen und aufzeichnen.

  • Backtesting, Optimierung und Live-Betrieb verwenden denselben Ausführungsmechanismus: Strategie einmal schreiben und in allen Modi ausführen; klare Konfiguration, leicht zu reproduzieren und zu analysieren.

  • In Zukunft wird über die QMT-Schnittstelle die von Brokern bereitgestellte Live-Handelsschnittstelle angebunden, um automatisierten Handel zu realisieren.

png
png
png


End-to-End-Roadmap / Tutorial

Wenn Sie den vollständigen Ablauf „von der Konfiguration über Backtest, Optimierung bis hin zu Simulation/Live“ durchlaufen möchten, können Sie die Tutorials und Dokumente in der folgenden Reihenfolge lesen; jeder Schritt hat entsprechende Kapitel und Beispiele:

  1. Datenquelle und Token konfigurierenTutorial: EinstiegTutorial: Daten abrufen

  2. Daten herunterladenTutorial: Daten abrufenFinanzhistorische Daten herunterladen und verwalten

  3. Strategie definieren und backtestenTutorial: Erste StrategieTutorial: Integrierte StrategienTutorial: Benutzerdefinierte StrategieSo führen Sie einen Backtest aus

  4. ParameteroptimierungTutorial: Optimierung von HandelsstrategienHandelsstrategien optimieren

  5. Simulation/Live-HandelTutorial: Deployment und Ausführung von HandelsstrategienÜberblick über Simulation und Live-Betrieb

Die obigen Tutorials decken die komplette Kette von der Konfiguration über Backtesting und Optimierung bis hin zu Simulation/Live-Handel ab; bei Problemen können Sie in den FAQ nach gängigen Erklärungen wie „Wie bekomme ich es zum Laufen“, „Warum ist es langsam“ oder „Look-ahead-Bias vermeiden“ suchen.


Als Nächstes