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 は、文字列 3306int3306 に変換します。

次の構成ファイルの例は正しいです。

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 分あたりの読み取り頻度制限があります。十分なポイントがない場合、ダウンロード頻度が制限され、次のような一部のデータのダウンロードが不完全になる可能性があります。

スクリプトを実行します。

>>> qt.refill_data_source(tables='events', start_date='20230101', end_date='20240403',reversed_par_seq=True)

次のエラー メッセージが表示されました。

[##############--------------------------]6000/16923-35.5% <fund_share:016407.OF>37107wrtn/about 19 minleftC:\ProgramData\anaconda3\envs\qteasy-env-p311\Lib\site-packages\qteasy*database.py:5134*: UserWarning:
抱歉,您每分钟最多访问该接口600次,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108。:
download process interrupted at [fund_share]:<F180003.OF>-<016408.OF>
37107 rows downloaded, will proceed with next table!
warnings.warn(msg)
[#######################-----------------]10000/16923-59.1% <fund_manager:012277.OF>1264483wrtn/about 15 minleftC:\ProgramData\anaconda3\envs\qteasy-env-p311\Lib\site-packages\qteasy\database.py:5134: UserWarning:
抱歉,您每分钟最多访问该接口500次,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108。:
download process interrupted at [fund_manager]:<F180003.OF>-<012278.OF>
1264483 rows downloaded, will proceed with next table!
warnings.warn(msg)

この問題に対処するために、qteasy は、この問題を回避または軽減するための専用の再試行メカニズムを設計しました。

qteasy で次の設定を変更して、データのダウンロード時の再試行回数と遅延設定を調整してみることができます。これらの構成パラメータは、tushare の読み取り頻度制限に対処するために特別に設定されています。

QT_CONFIG.hist_dnld_retry_cnt - データのダウンロード時の再試行回数、デフォルトは 7 です。 QT_CONFIG.hist_dnld_retry_wait - 最初のダウンロード失敗後の待機時間 (秒単位)、デフォルトは 1 秒です。 QT_CONFIG.hist_dnld_backoff - 待機後にダウンロードが再び失敗した場合の待機時間の乗数、デフォルトは 2 です。

qteasy が tushare 関数を呼び出すと、自動的に再試行され、各再試行の間隔が徐々に長くなります。たとえば、最初のダウンロードが失敗した場合、1 秒間停止して再試行します。それでも再試行が失敗する場合は、すべての再試行が終了するまで 2 秒、次に 4 秒、次に 8 秒というように待機し、その時点で処理が開始されます。

通常、7 回の再試行後の遅延は 2 倍の 32 秒になります。先ほどの遅延を加えると1分を超えてしまいます。通常、これによって周波数エラーが発生することはありません。ただし、ネットワーク速度が速すぎる場合、または同時に実行されているスレッドが多すぎる場合、上記の問題が発生する可能性があります。

この時点で、再試行回数を 10 回以上に増やすか (これによりダウンロード時間が大幅に長くなります)、または最初の待機時間を増やすことができます。

>>> qt.configure(hist_dnld_retry_cnt=10, hist_dnld_retry_wait=2.)
>>> qt.refill_data_source(tables='events', start_date='20230101', end_date='20240403',reversed_par_seq=True)

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_stepbacktest_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 の構成手順を参照してください。