FAQ
さまざまな Python バージョンのインストール環境をセットアップする方法
qteasyチュートリアルでは、venvで作成した仮想環境を使用してqteasyをインストールする方法を紹介しました。ただし、場合によっては、Python 3.9、Python 3.10、Python 3.11、Python 3.12 などの異なる Python バージョンに qteasy をインストールする必要がある場合があります。ここでは、異なる Python バージョンに qteasy をインストールする方法を紹介します。
Anaconda を使用して、さまざまな Python バージョンで環境を作成します。
Anaconda は、conda、Python、180 を超える科学パッケージとその依存関係を含む科学コンピューティング用の Python ディストリビューションです。したがって、Anaconda を使用してさまざまな Python バージョンの環境を作成し、それらの環境内に qteasy をインストールできます。
Anaconda は公式 Web サイト Anaconda からダウンロードできます。オペレーティング システムに対応するバージョンをダウンロードしてインストールします。
Anaconda をインストールした後、conda コマンドを使用して、さまざまな Python バージョンの環境を作成し、その中に Python パッケージをインストールできます。例えば:
$ conda create -n py39 python=3.9 # 创建python3.9环境
$ conda activate py39 # 激活python3.9环境
$ pip install qteasy # 在python3.9环境下安装qteasy
conda 環境では、pip を使用してインストールされたパッケージも正しく識別および管理できます。
よく使用される conda コマンドをいくつか示します。
$ 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环境下安装的包
国産ピップミラーソースを使用
中国では、ネットワーク状況により、pip を使用した Python パッケージのインストールが遅くなったり、失敗したりすることがあります。このような場合、清華大学のピップミラーソースなど、国産のピップミラーソースを使用できます。
pip を使用して Python パッケージをインストールする場合、-i パラメータを使用して pip ミラー ソースを指定できます。たとえば、次のようになります。
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qteasy
QtEasy を最新バージョンにアップグレードするにはどうすればよいですか?
Qteasy を使用する場合、最新バージョンにアップグレードする必要がある場合があります。アップグレードする前に、リリース履歴 を確認して、各バージョンのユーザーに見える変更点を理解することをお勧めします。 Qteasy を最新バージョンにアップグレードする方法は次のとおりです。
$ pip install qteasy --upgrade
あるいは、次のコマンドを使用します。
$ pip isntall qteasy -U
中国国内で清華大学のミラー ソースを使用するには、次のコマンドを使用できます。
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qteasy --upgrade
TA-Libのインストール方法
pip install ta-lib は TA-Lib パッケージの Python ラッパーのみをインストールするため、完全な TA-Lib パッケージを pip 経由でインストールすることはできません。ユーザーは、Python で使用する前に、TA-Lib の C 言語バージョンをインストールする必要があります。
一部のユーザーは、次の方法を使用して C 言語 TA-Lib パッケージをインストールできます:
conda install -c conda-forge libta-lib
C 言語 TA-Lib パッケージをさまざまなオペレーティング システムにインストールする方法:
Windows
ta-lib-0.4.0-msvc.zipをダウンロードし、
C:\ta-libに解凍します。Visual Studio Community(2015 以降) をダウンロードしてインストールし、[Visual C++]機能を選択します。Windows のスタート メニューを開き、
[VS2015 x64 Native Tools Command Prompt]を起動しますC:\ta-lib\c\make\cdr\win32\msvcに移動しますnmake
Mac OS
まず、Homebrew をインストールし、次に Homebrew を通じて C 言語 TA-LIB パッケージをインストールします。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install ta-lib
Apple Silicon チップを使用している場合は、次のことができます。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ arch -arm64 brew install ta-lib
Linux
ta-lib-0.4.0-src.tar.gz をダウンロードして、次のようにします。
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
C 言語 TA-LIB パッケージをインストールした後、pip 経由で Python TA-Lib パッケージをインストールできます。
$ pip install ta-lib
arm64 ベースの Mac に TA-Lib をインストールするには、次のコマンドを使用できます。
$ arch -arm64 python -m pip install --no-cache-dir ta-lib
Arm64 アーキテクチャのコンピュータを使用していて、ta-lib のインストール後にインポート エラー ImportError: が発生した場合は、環境の問題が原因である可能性があります。問題を解決するには、この記事 (https://blog.csdn.net/Shepherdppz/article/details/138253619) を参照してください。
Python 環境の上位バージョンに Qteasy をインストールする
解決策は、qteasy の最新バージョンにアップグレードすることです。 qteasy の新しいバージョンは Python 3.7 ~ 3.12 環境でテストされており、これらの環境で正しく機能します。
$ pip install qteasy --upgrade
qteasy の以前のバージョンは、新しいバージョンの python で適切にテストされていないため、互換性の問題が発生しました。これらの問題は主に、バージョン 1.1.4 以前のqteasy ディストリビューションに存在します。
一方、以前のバージョンの qteasy は、pandas および numpy の上位バージョンで廃止される予定の API を使用していました。これにより、pandas および numpy の上位バージョンとの互換性の問題が発生した可能性があります。これらの問題は、v1.1.7 以降の qteasy のバージョンで修正されています。
qteasy.cfg に構成情報を追加すると、データベース接続エラーのメッセージが表示されます。
一部のユーザーは、qteasy.cfg ファイルでデータベース接続情報を構成した後でも、データベース接続エラー メッセージが表示され、次のようなエラーが表示されると報告しています。
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",'
この問題が初めて発生する場合は、まず qteasy.cfg ファイルを確認する必要があります。主に次の 2 つの点を確認します。
設定したキーが間違っていませんか?
qteasyの安定版では、database_hostの代わりに、local_db_host/local_db_portなどのデータベース接続情報構成キーが使用されます。以前の公式ドキュメントにはいくつかの誤りがありましたが、最新のドキュメントではこれらの誤りが修正されています。ファイルに構成情報を指定する場合は、
"、<、>などの他の文字を追加しないでください。追加しないと、これらの文字がtokenまたはデータベース名の一部として解釈され、データベース接続が失敗します。
設定ファイルを解析する際、qteasy は設定タイプに基づいて正しい形式に自動的に変換します。たとえば、データベース ポート 3306 は、直接使用できる int 変数である必要があります。
local_db_port = 3306
それでおしまい。 qteasy は、文字列 3306 を int 型 3306 に変換します。
次の構成ファイルの例は正しいです。
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
データベースからデータを読み取るときに、sqlalchemy のインストールを提案するプロンプトが表示されます。
データベースをデータ ソースとして使用し、データベースからデータを読み取るときに、次のメッセージが表示されることがあります。
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.
上記のメッセージは、ユーザーが sqlalchemy を使用することを示唆しています。
要約すると、これは UserWarning です。実際にはエラーは発生しませんでした。データの読み取りは成功しました。この警告メッセージが表示される理由は、インストールされている pandas のバージョンに関連しています。 sqlalchemy をインストールする必要はありません。 qteasy は、sqlalchemy への依存関係を削除しました。この警告が表示される理由を確認するには、pandas のバージョンを確認してください。
import pandas as pd
pd.__version__
pandas バージョン 1.1 以降を使用している場合、この UserWarning が発生する可能性がありますが、通常は使用に影響を与えることはありません。これは、qteasy がデータベース接続 API として pymysql を使用しているためですが、pandas はバージョン 1.1 以降、pymysql のサポートを段階的に削除しています。テストの結果、qteasy は pandas バージョン 1.5 でもデータを正しく読み取ることができますが、警告メッセージが表示されます。
上記の問題は私の修正リストに載っています。今後のマイナー アップグレードでは、pandas SQL API への依存関係が削除され、pymysql がデータベースの読み取りに直接使用されます。これにより、この警告メッセージが表示されなくなります。この警告メッセージを表示したくない場合は、pandas バージョンを 1.1.0 にダウングレードすることもできます。 qteasy は、開発初期に一貫して pandas の下位バージョンを使用しており、ほとんどの安定性テストは pandas バージョン 1.1 に基づいています。 pandas バージョン 1.1 を使用している場合、この警告メッセージは表示されず、他のすべての機能は正常に動作します。
tushareからデータを一括ダウンロード
場合によっては、データをバッチでダウンロードし、各バッチの間に一定期間一時停止する必要があることがあります。たとえば、tushare の一部のデータ テーブルには頻度制限があり、1 分あたりの最大ダウンロード数が制限されています。この制限を超えると、ダウンロードが失敗する原因になります。この場合、次の 2 つの構成パラメータを使用して、このようなバッチ ダウンロードと一時停止を実現できます。
QT_CONFIG.hist_dnld_delay: デフォルト値は 0 です。正の整数に設定すると、バッチでダウンロードする場合の各バッチのダウンロード数を表します。QT_CONFIG.hist_dnld_delay_evy: デフォルト値は 0 です。正の整数に設定すると、2 つのダウンロード バッチ間で待機する秒数を表します。次の設定では、600 セットのデータをダウンロードした後に 1 分間待機します。
>>> qt.configure(hist_dnld_delay=60, hist_dnld_delay_evy=600)
>>> qt.configure(hist_dnld_retry_cnt=3) # 同时减少重试的次数以缩短报错前等待的时间,这个配置并不是必要的
上記のように設定すると、並列ダウンロードを使用している場合でも、qteasy はすべてのタスクを同時にプロセス プールに投入しません。代わりに、バッチで送信し、一定期間待機してから次のバッチを送信します。
上記の機能は、qteasy のバージョン v1.1.11 で追加されました。 qteasy のバージョンが低い場合は、最新バージョンにアップグレードしてください。
データからバックテスト/最適化までの最小限のワークフローを機能させるにはどうすればよいですか?
「クイック スタート ガイド」に記載されているように、tushare トークンの構成 → データのダウンロード → 組み込み戦略を使用したバックテストの実行というプロセスを 1 分で完了することをお勧めします。完全なワークフロー (データ ソースの構成 → データのダウンロード → 戦略とバックテストの定義 → パラメーターの最適化 → シミュレーション/ライブ実行) および対応するチュートリアルについては、[クイック スタート ガイド - エンドツーエンド ロードマップ / チュートリアル](getting_started.md#エンドツーエンド ロードマップ - チュートリアル)を参照してください。このロードマップのチュートリアルの順序に従うと、プロセス全体を最初から完了できます。
バックテスト/最適化が遅いのはなぜですか?
考えられる理由は次のとおりです。
データ量とウィンドウの長さ: バックテスト間隔が長くなるほど、資産プールが大きくなり、戦略の
window_lengthが大きくなるほど、1 回のバックテストでより多くのデータを準備して計算する必要があります。パラメータ グループの数: 最適化モード (mode=2) では、パラメータの組み合わせが増えるほど、1 つのバックテストを実行する必要がある回数も増えます。これはマルチプロセスの並列処理によって軽減されていますが、依然としてマシン コアの数とタスクの規模に関連しています。
初期 Numba コンパイル: コア バックテスト関数 (
backtest_stepやbacktest_batch_stepsなど) は Numba JIT を使用します。コンパイルは最初の実行時、またはパラメーターの型が変更されたときにトリガーされるため、1 回だけ遅延が発生します。同じタイプの後続のバックテストではキャッシュが再利用されるため、速度が大幅に向上します。データの準備: DataSource 内のデータが事前に準備されていない場合、バックテストの前にデータの取得とウィンドウのアセンブリがトリガーされ、初回の実行時間も長くなります。
バックテスト エンジンとパフォーマンス設計の詳細については、「アーキテクチャと設計」の バックテスト エンジンとパフォーマンス および バックテスト エンジンとパフォーマンス (設計の観点) を参照してください。
「将来性のある機能」をどう理解するか?
Qteasy は、そのメカニズムによって、バックテスト中に将来のデータを「見る」ことをストラテジーが回避します。各タイム ステップで、エンジンは そのタイム ステップで表示される履歴データのウィンドウのみをストラテジーに挿入します。この戦略では、realize() の get_data(dtype_id) を使用して、そのウィンドウ内のデータのみを取得します。このウィンドウで計算された指標 (EMA など) は、ライブ取引で「その時点でのみ表示される」履歴データと一致しているため、将来のデータの意図しない使用が回避されます。詳細な設計理論的根拠 (なぜフルタイム軸量子化を実行しないのか、データ ウィンドウを段階的に挿入する方法など) については、「アーキテクチャと設計」の 設計意図と独自の利点 を参照してください。
use_latest_data_cycle とは何ですか?またどのように設定されますか?
use_latest_data_cycle (ulc と略されることが多い) は、ストラテジーで使用されるデータ ウィンドウに 現在のルート ローソク足 (現時点での最新データ) を含めるかどうかを制御します。 True に設定すると、ウィンドウには「取引中にその時点の最新価格が許可されるかどうか」に対応する現在のバー (終値など) を含めることができます。 False に設定すると、ウィンドウには「過去の終値」のデータが厳密に含まれます。この選択は長期的なバックテストのリターンに大きな影響を与えるため、qteasy は戦略宣言とランタイム設定で設定可能な項目としてそれを公開します。その意味と影響については、設計意図と独自の利点 - use_latest_data_cycle を参照してください。特定の設定については、ストラテジー クラスの data_types / window_length 宣言と ストラテジーによるデータの宣言と使用方法、および現在のバージョンのドキュメントと API の構成手順を参照してください。