Häufig gestellte Fragen
Wie man Installationsumgebungen für verschiedene Python-Versionen einrichtet
Im Tutorial zu qteasy haben wir die Installation von qteasy mithilfe einer virtuellen Umgebung (erstellt mit venv) beschrieben. Manchmal ist es jedoch erforderlich, qteasy auf verschiedenen Python-Versionen zu installieren, beispielsweise auf Python 3.9, Python 3.10, Python 3.11, Python 3.12 usw. Hier stellen wir eine Methode zur Installation von qteasy auf verschiedenen Python-Versionen vor.
Erstellen von Umgebungen mit unterschiedlichen Python-Versionen mithilfe von Anaconda:
Anaconda ist eine Python-Distribution für wissenschaftliches Rechnen, die conda, Python und über 180 wissenschaftliche Pakete sowie deren Abhängigkeiten umfasst. Daher können wir Anaconda verwenden, um Umgebungen mit verschiedenen Python-Versionen zu erstellen und anschließend qteasy in diesen Umgebungen zu installieren.
Anaconda kann von der offiziellen Website heruntergeladen werden: Anaconda. Laden Sie die Version herunter, die zu Ihrem Betriebssystem passt, und installieren Sie sie anschließend.
Nach der Installation von Anaconda können wir mit dem Befehl conda Umgebungen mit verschiedenen Python-Versionen erstellen und darin Python-Pakete installieren. Zum Beispiel:
$ conda create -n py39 python=3.9 # 创建python3.9环境
$ conda activate py39 # 激活python3.9环境
$ pip install qteasy # 在python3.9环境下安装qteasy
In einer Conda-Umgebung können auch mit pip installierte Pakete korrekt identifiziert und verwaltet werden.
Hier sind einige häufig verwendete conda-Befehle:
$ conda env list # 查看所有的环境
$ conda activate py39 # 激活python3.9环境
$ conda deactivate # 退出当前环境
$ conda remove -n py39 --all # 删除python3.9环境
$ conda list # 查看当前环境下安装的包
$ conda list -n py39 # 查看python3.9环境下安装的包
Verwenden Sie eine inländische Pip-Spiegelquelle
In China kann die Installation von Python-Paketen mit pip aufgrund der Netzwerkbedingungen mitunter langsam sein oder sogar fehlschlagen. In solchen Fällen können wir auf lokale pip-Mirror-Quellen zurückgreifen, beispielsweise auf die pip-Mirror-Quelle der Tsinghua-Universität.
Bei der Installation von Python-Paketen mit pip können Sie den Parameter -i verwenden, um die pip-Mirror-Quelle anzugeben, zum Beispiel:
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qteasy
Wie kann ich QtEasy auf die neueste Version aktualisieren?
Bei der Verwendung von Qteasy kann ein Upgrade auf die neueste Version erforderlich sein. Vor dem Upgrade empfiehlt es sich, die Versionshistorie zu prüfen, um die für den Benutzer sichtbaren Änderungen in den einzelnen Versionen zu verstehen. Die Vorgehensweise zum Aktualisieren von Qteasy auf die neueste Version ist wie folgt:
$ pip install qteasy --upgrade
Alternativ können Sie folgenden Befehl verwenden:
$ pip isntall qteasy -U
Um den Spiegelserver der Tsinghua-Universität innerhalb Chinas zu nutzen, können Sie folgenden Befehl verwenden:
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qteasy --upgrade
Wie installiert man TA-Lib?
Das komplette TA-Lib-Paket kann nicht über pip installiert werden, weil pip install ta-lib nur einen python wrapper für das TA-Lib-Paket installiert, und der Benutzer muss zuerst TA-Lib für C installieren, bevor er es in Python benutzen kann.
Einige Benutzer können das TA-Lib-Paket für C mit der folgenden Methode installieren:
conda install -c conda-forge libta-lib
Die Methode zur Installation von TA-Lib-Paketen für C auf verschiedenen Systemen:
Windows (Computer)
Laden Sie [ta-lib-0.4.0-msvc.zip] (http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip) herunter und entpacken Sie es nach
C:\ta-lib.Laden Sie
Visual Studio Community(2015 oder höher) herunter und installieren Sie es, wählen Sie die Funktion[Visual C++].Windows-Startmenü, starten Sie
[VS2015 x64 Native Tools Eingabeaufforderung]Nach „C:\ta-lib\c\make\cdr\win32\msvc“ verschieben.
`nmake‘
Mac OS
Installieren Sie zuerst Homebrew und anschließend das C-Sprachpaket TA-LIB über Homebrew:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install ta-lib
Apple Silicon Chips können verwendet werden, wenn sie verwendet werden:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ arch -arm64 brew install ta-lib
Linux
Laden Sie ta-lib-0.4.0-src.tar.gz herunter und.
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
Nach der Installation des C-Sprachpakets TA-Lib kann das Python-Paket TA-Lib über pip installiert werden:
$ pip install ta-lib
Um TA-Lib auf einem arm64-basierten Mac zu installieren, können Sie folgenden Befehl verwenden:
$ arch -arm64 python -m pip install --no-cache-dir ta-lib
Wenn Sie einen Computer mit Arm64-Architektur verwenden und nach der Installation von ta-lib der Importfehler ImportError: auftritt, liegt dies möglicherweise an einem Umgebungsproblem. Zur Behebung des Problems lesen Sie bitte diesen Artikel (https://blog.csdn.net/Shepherdppz/article/details/138253619).
Installieren Sie Qteasy in einer höheren Python-Version.
Die Lösung besteht darin, auf die neueste Version von qteasy zu aktualisieren. Neuere Versionen von qteasy wurden in Python-Umgebungen von 3.7 bis 3.12 getestet und funktionieren in diesen Umgebungen einwandfrei.
$ pip install qteasy --upgrade
Frühere Versionen von qteasy wurden in neueren Versionen von python nicht ausreichend getestet, was zu Kompatibilitätsproblemen führte. Diese Probleme treten hauptsächlich in qteasy-Distributionen der Version 1.1.4 und älter auf.
Frühere Versionen von qteasy verwendeten APIs, die in neueren Versionen von pandas und numpy als veraltet markiert werden. Dies konnte zu Kompatibilitätsproblemen mit diesen neueren Versionen führen. Diese Probleme wurden in qteasy ab Version 1.1.7 behoben.
Nach dem Hinzufügen von Konfigurationsinformationen zu qteasy.cfg erscheint eine Fehlermeldung bezüglich eines Datenbankverbindungsfehlers.
Einige Benutzer haben berichtet, dass sie selbst nach der Konfiguration der Datenbankverbindungsinformationen in der Datei qteasy.cfg immer noch eine Fehlermeldung bezüglich der Datenbankverbindung erhalten, die in etwa wie folgt lautet:
C:\Users\yuewe\Documents\GitHub\qteasy-1.0.26\qteasy\database.py:2504: RuntimeWarning: (1045, "Access denied for user 'yuewe'@'localhost' (using password: NO)"), Can not set data source type to "db", will fall back to default type
warnings.warn(f'{str(e)}, Can not set data source type to "db",'
Sollten Sie dieses Problem zum ersten Mal haben, überprüfen Sie am besten zuerst Ihre qteasy.cfg-Datei. Achten Sie dabei insbesondere auf die folgenden beiden Aspekte:
Ist der konfigurierte Schlüssel falsch? Die stabile Version von
qteasyverwendet Datenbankverbindungsinformationen über Schlüssel wielocal_db_host/local_db_portusw. anstelle vondatabase_host. Früher gab es einige Fehler in der offiziellen Dokumentation, diese wurden jedoch in der neuesten Version korrigiert.Bitte fügen Sie beim Angeben von Konfigurationsinformationen in der Datei keine anderen Zeichen wie
",<und>usw. hinzu. Andernfalls werden diese Zeichen als Teil desTokensoder des Datenbanknamens interpretiert, was zu einem Fehlschlagen der Datenbankverbindung führt.
Wenn qteasy die Konfigurationsdatei parst, konvertiert es sie automatisch in das richtige Format, je nach Art der Konfiguration, z.B. sollte der Datenbankport 3306 eine int-Variable sein und direkt verwendet werden:
local_db_port = 3306
Kann gemacht werden. qteasy konvertiert den String 3306 in den int Typ 3306. -
Das folgende Beispiel für eine Konfigurationsdatei ist korrekt:
tushare_token = 2dff3f034aa966479c81e4b4b0736fb081b740abb2xxxxxxxxxxxxxxxxxxxxx
local_data_source = database
local_db_host = localhost
local_db_port = 3306
local_db_user = user_name
local_db_password = pass_word
local_db_name = ts_db
Beim Lesen von Daten aus der Datenbank wird eine Aufforderung zur Installation von sqlalchemy angezeigt.
Manchmal, wenn Sie eine Datenbank als Datenquelle verwenden und Daten aus der Datenbank lesen, kann die folgende Meldung angezeigt werden:
UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
Die obige Meldung legt nahe, dass Benutzer sqlalchemy verwenden.
Zusammenfassend handelt es sich um eine Benutzerwarnung. Es ist kein Fehler aufgetreten; die Daten wurden erfolgreich gelesen. Der Grund für diese Warnmeldung hängt mit der installierten Version von pandas zusammen. Sie müssen sqlalchemy nicht installieren; qteasy benötigt diese Abhängigkeit nicht mehr. Um die Ursache dieser Warnung zu ermitteln, überprüfen Sie bitte Ihre pandas-Version.
import pandas as pd
pd.__version__
Bei Verwendung von Pandas Version 1.1 oder höher kann diese Warnung auftreten, die die Nutzung jedoch in der Regel nicht beeinträchtigt. Der Grund dafür ist, dass Qteasy pymysql als Datenbankverbindungs-API nutzt, Pandas die Unterstützung für pymysql aber seit Version 1.1 schrittweise entfernt hat. Obwohl Tests zeigen, dass Qteasy auch in Pandas Version 1.5 noch Daten korrekt lesen kann, wird eine Warnmeldung angezeigt.
Die oben genannten Probleme stehen auf meiner Änderungsliste. Im kommenden kleineren Upgrade wird die Abhängigkeit von der pandas SQL-API entfernt und pymysql direkt zum Lesen der Datenbank verwendet. Dadurch wird diese Warnmeldung nicht mehr angezeigt. Falls Sie diese Warnmeldung nicht sehen möchten, können Sie die pandas-Version auch auf 1.1.0 herabstufen. qteasy hat während der frühen Entwicklungsphase durchgehend eine niedrigere Version von pandas verwendet, und die meisten Stabilitätstests basieren auf pandas Version 1.1. Wenn Sie pandas Version 1.1 verwenden, wird diese Warnmeldung nicht angezeigt, und alle anderen Funktionen funktionieren einwandfrei.
Daten in Batches von tushare herunterladen
Manchmal müssen Daten in Batches heruntergeladen werden, wobei zwischen den einzelnen Batches eine bestimmte Pause eingelegt wird. Beispielsweise ist bei einigen Datentabellen auf tushare die Downloadfrequenz begrenzt, sodass die maximale Anzahl an Downloads pro Minute nicht überschritten wird. In diesem Fall lassen sich solche Batch-Downloads und Pausen mithilfe der folgenden beiden Konfigurationsparameter realisieren:
QT_CONFIG.hist_dnld_delay: Der Standardwert ist 0. Bei Angabe einer positiven ganzen Zahl gibt er die Anzahl der Downloads in jedem Batch beim Herunterladen in Batches an.QT_CONFIG.hist_dnld_delay_evy: Der Standardwert ist 0. Bei Angabe einer positiven Ganzzahl wird die Wartezeit in Sekunden zwischen zwei Download-Batches festgelegt. Die folgende Konfiguration bewirkt, dass nach dem Herunterladen von 600 Datensätzen eine Minute gewartet wird:
>>> qt.configure(hist_dnld_delay=60, hist_dnld_delay_evy=600)
>>> qt.configure(hist_dnld_retry_cnt=3) # 同时减少重试的次数以缩短报错前等待的时间,这个配置并不是必要的
Nach der oben beschriebenen Einrichtung übermittelt qteasy auch bei parallelem Download nicht alle Aufgaben gleichzeitig an den Prozesspool. Stattdessen werden sie in Batches übermittelt, und es wird eine gewisse Zeit gewartet, bevor der nächste Batch übermittelt wird.
Die oben genannten Funktionen wurden in Version v1.1.11 von qteasy hinzugefügt. Falls Sie eine ältere Version von qteasy verwenden, aktualisieren Sie bitte auf die neueste Version.
Wie lässt sich der minimale Workflow von der Datenerfassung bis zum Backtesting/zur Optimierung realisieren?
Es wird empfohlen, den Vorgang wie in der „Schnellstartanleitung“ beschrieben in einer Minute abzuschließen: tushare-Token konfigurieren → Daten herunterladen → Backtest mit der integrierten Strategie durchführen. Den vollständigen Workflow (Datenquelle konfigurieren → Daten herunterladen → Strategie und Backtest definieren → Parameteroptimierung → Simulation/Live-Lauf) sowie die zugehörigen Tutorials finden Sie in der [Schnellstartanleitung – Komplettübersicht/Tutorial](getting_started.md#End-to-End Roadmap–Tutorial). Wenn Sie die Tutorials in dieser Übersicht in der richtigen Reihenfolge befolgen, können Sie den gesamten Prozess von Grund auf durchführen.
Warum ist Backtesting/Optimierung langsam?
Mögliche Gründe sind:
Datenvolumen und Fensterlänge: Je länger das Backtesting-Intervall, je größer der Asset-Pool und je größer die
window_lengthder Strategie, desto mehr Daten müssen für einen einzelnen Backtest aufbereitet und berechnet werden.Anzahl der Parametergruppen: Im Optimierungsmodus (Modus=2) gilt: Je mehr Parameterkombinationen es gibt, desto häufiger muss ein einzelner Backtest durchgeführt werden. Dies wurde zwar durch die Parallelverarbeitung mehrerer Prozesse abgemildert, hängt aber immer noch von der Anzahl der Maschinenkerne und dem Umfang der Aufgabe ab.
Erste Numba-Kompilierung: Die Kernfunktionen für Backtesting (wie
backtest_stepundbacktest_batch_steps) verwenden Numba JIT. Die Kompilierung wird beim ersten Durchlauf oder bei einer Änderung des Parametertyps ausgelöst, was zu einer einmaligen Verzögerung führt. Nachfolgende Backtests desselben Typs nutzen den Cache wieder, wodurch die Geschwindigkeit deutlich verbessert wird.Datenvorbereitung: Wenn die Daten in der DataSource nicht im Voraus vorbereitet werden, werden Datenabruf und Fensterzusammenstellung vor dem Backtesting ausgelöst, was die erste Laufzeit ebenfalls verlängert.
Weitere Informationen zum Backtesting von Engines und zum Performance-Design finden Sie in den Abschnitten Backtesting Engines and Performance und Backtesting Engines and Performance (Design Perspective) im Abschnitt „Architecture and Design“.
Wie lassen sich „zukunftssichere Funktionen“ verstehen?
Qteasy verhindert durch seinen Mechanismus, dass die Strategie während des Backtests zukünftige Daten „sieht“: In jedem Zeitschritt wird der Strategie nur ein Fenster historischer Daten zugeführt, das zu diesem Zeitpunkt sichtbar ist. Die Strategie ruft die Daten innerhalb dieses Fensters mit get_data(dtype_id) in realize() ab. Metriken, die auf diesem Fenster berechnet werden (z. B. EMA), sind im Live-Handel konsistent mit den historischen Daten, die „nur zu diesem Zeitpunkt sichtbar“ sind. Dadurch wird die unbeabsichtigte Verwendung zukünftiger Daten vermieden. Die detaillierte Designbegründung (warum keine durchgehende axiale Quantisierung durchgeführt wird, wie Datenfenster schrittweise zugeführt werden usw.) finden Sie unter Design Intent and Unique Advantages in „Architecture and Design“.
Was ist use_latest_data_cycle und wie wird es festgelegt?
use_latest_data_cycle (oft abgekürzt als ulc) steuert, ob das von der Strategie verwendete Datenfenster den aktuellen Root-Candlestick (die aktuellsten Daten zum aktuellen Zeitpunkt) enthält: Bei True kann das Fenster den aktuellen Balken (z. B. den Schlusskurs) enthalten, was der Frage entspricht, ob der aktuellste Kurs während des Handels zulässig ist. Bei False enthält das Fenster ausschließlich Daten von vergangenen Schlusskursen. Diese Wahl hat einen erheblichen Einfluss auf die Rendite bei langfristigen Backtests. qteasy stellt sie als konfigurierbare Option in der Strategiedeklaration und der Laufzeitkonfiguration bereit. Weitere Informationen zu Bedeutung und Auswirkungen finden Sie unter Design Intent and Unique Advantages - use_latest_data_cycle. Spezifische Einstellungen finden Sie in den Deklarationen data_types / window_length in der Strategieklasse und in How the Strategy Declares and Uses Data sowie in den Konfigurationsanweisungen in der Dokumentation und API der aktuellen Version.