1. インストールと構成

qteasy は、以下の機能を備えた定量的取引分析ツールキットの完全にローカライズされた展開と運用です。

  • 財務データの取得、クリーニング、保管、処理、可視化、および使用

  • 定量的な取引戦略を作成し、多数の組み込みの基本的な取引戦略を提供します

  • ベクトル化された高速取引戦略のバックテストと取引結果の評価

  • 取引戦略パラメーターの最適化と評価

  • 取引戦略の展開と実際の運用

ここでは、一連の実践的な例を通じて、qteasy の主な機能と使用法を理解するのに役立つ一連のチュートリアルを示します。

qteasypythonを利用して作成されており、ベクトル化されたバックテストおよびトレーディングシミュレーションエンジンを使用して戦略の高速バックテストを実現するとともに、戦略フレームワークの柔軟性も考慮しており、ユーザーは必要に応じてさまざまな高度な戦略をカスタマイズできます。 qteasy は、取引戦略の最適化と評価を支援するさまざまな戦略パラメーター最適化アルゴリズムを提供し、リアルタイム操作モードを提供して、取引戦略を直接展開して使用できるようにします。

1.1. qteasy インストール前の準備

設置環境の作成

qteasypip 経由でインストールできます。依存パッケージが多いため、依存パッケージと既存環境のパッケージとの競合を避けるため、独立したpython環境を作成してqteasyをインストールすることをお勧めします。

ここでは、venvconda を使用して仮想環境を作成する 2 つの方法を示します。

macOS および Linux のユーザーは、ターミナルを開き、環境を作成する必要があるパスを入力し、次のコマンドを入力して、現在のディレクトリに qteasy-env という名前の仮想環境を作成し、環境をアクティブ化できます。

python -m venv qteasy-env  
source qteasy-env/bin/activate

Windows ユーザーは、コマンド プロンプトを開き、環境を作成する必要があるフォルダーを入力し、次のコマンドを入力して仮想環境を作成し、アクティブ化できます。

py -m venv qteasy-env  
.venv\Scripts\activate

ユーザーはターミナルを開き、次のコマンドを入力して qteasy-env という名前の仮想環境を作成し、その環境をアクティブ化できます。

conda create -n qteasy-env python=3.8
conda activate qteasy-env

次のコマンドを使用して、アクティブ化された仮想環境に qteasy をインストールします。

pip install qteasy

MySQL データベースをインストールします (オプション)

qteasy は大量の財務データを管理できます。 qteasy の仕組みは、すべての財務データをローカル マシンにダウンロードし、クリーンアップして、事前定義されたデータ テーブルに保存することです。必要に応じて (K ライン チャートの生成、取引シグナルの生成、取引バックテストのシミュレーション、取引結果の評価など、すべてのリンクに財務データが必要です)、必要なデータはローカル データ ソースから直接読み込まれます。したがって、データ管理環境をローカルにセットアップする必要があります。

qteasy は、データ管理環境としてデータベースとファイル システムの両方をサポートします。財務データの量を考慮すると、データベースをローカル データ ソースとして使用することを強くお勧めします。 qteasy でサポートされるローカル データ ソースには次のものがあります。

  • csv ファイル をデフォルトのデータ ソースとして使用します。多くのスペースを消費しますが、Excel を使用してローカル データを読み取ることができます。データ量が多いと遅い

  • mysql データベースを使用し、ディスクに少なくとも 1TB の高速なストレージ容量があることを確認することを強くお勧めします。

  • hdf5 ファイルは多くのスペースを占有し、データ量が大きいと速度が遅くなります

  • feather ファイル は使用するスペースが少なく、データ量が多いと速度が遅くなります

最高のデータストレージ効率を実現するには、mysql データベースをローカル データ ソースとして使用することをお勧めします。

データベースをローカル データ ソースとして使用する必要がある場合は、次の方法を参照して MySQL データベースをインストールします。ファイルをローカル データ ソースとして使用する場合は、この手順を省略できます。

公式 Web サイト でコミュニティ オープン ソース バージョンを直接見つけてダウンロードできます。Web サイトでは、dmg や tar などのさまざまなインストール方法が提供されており、Apple M1 チップ用に利用可能なバージョンもあります。

png

データベースをインストールし、ユーザーを作成し、アクセス方法を設定し、パスワードを設定します。

# 创建新的用户,并允许客户通过localhost连接
mysql> CREATE USER '用户名'@'localhost' IDENTIFIED BY '初始密码';
Query OK, 0 rows affected (0.46 sec)

# 设置用户的权限
mysql> GRANT ALL ON *.* TO '用户名'@'localhost';
Query OK, 0 rows affected (0.06 sec)

# 创建新的用户,并允许客户通过远程连接
mysql> CREATE USER '用户名'@'%' IDENTIFIED BY '初始密码';
Query OK, 0 rows affected (0.46 sec)

# 设置用户的权限
mysql> GRANT ALL ON *.* TO '用户名'@'%';
Query OK, 0 rows affected (0.06 sec)

データベースがセットアップされ、qteasy は自動的にデータベース テーブルを作成し、データベースに財務データを保存します。

pymysql をインストールします

pip install pymysql

tushare アカウントを作成して API トークンを取得する方法 (オプション)

qteasy は、複数の異なるネットワーク財務データ プロバイダーから財務データを取得し、整合性を保った後、それらをクリーンアップ、整理し、ローカル データベースに保存できます。

qteasy は財務データ取得チャネルを継続的に追加していますが、依然として主に tushare に依存しています。システムには、比較的完全な tushare インターフェース API があります。 tushareインターフェースには権限またはポイントが必要なため、ユーザーは対応するtushareポイントを事前に準備し、対応する権限を開くことをお勧めします。

png

tushareアカウントの登録方法と権限については、tushare proホームページを参照してください。

png

tushare アカウントを作成しない場合でも、qteasy は一部のデータを取得できますが、データの種類は非常に限られており、アクセス頻度やリクエスト数も制限されます。以下の図に示すように、多くの qteasy 機能の使用が制限されます。

png

現在、一部の高頻度金融データは、akshare または East Money を通じて無料で取得できますが、他のネットワーク チャネルを通じて取得されるデータは、将来のバージョン更新で追加される予定です。

TA-lib のインストール (オプション)

qteasyには多数のテクニカル指標が組み込まれています。これらのテクニカル指標の計算は、TA-lib に依存します。 qteasy のすべての組み込みテクニカル指標を使用する必要がある場合は、TA-lib をインストールする必要があります。このステップをスキップすると、次の組み込み戦略のみを使用できます。 組み込み戦略の完全なリストと詳細なリファレンス ドキュメント組み込み取引戦略のバックテスト結果 は次のとおりです。

ID

戦略名

説明書

crossline

TimingCrossline

クロスライン タイミング戦略クラス。長移動平均と短移動平均のクロスを使用してロングとショートの状態を決定します。
1.短期移動平均が長期移動平均を上回り、距離が l*m% より大きい場合、目標位置を 1
2 に設定します。短期移動平均が長期移動平均を下回り、距離が l*m% より大きい場合、目標位置を -1 に設定します
3。長移動平均と短移動平均の間の距離が l*m% 以下の場合、ポジションターゲットを 0 に設定します。

macd

TimingMACD

MACD タイミング戦略クラス。MACD 移動平均戦略を使用してターゲット ポジション パーセンテージを生成します。
1. MACD値が0より大きい場合、ポジションターゲットを1
2に設定します。 MACD値が0未満の場合、ポジションターゲットを0に設定します

dma

TimingDMA

DMA タイミング戦略
1. DMA が AMA よりも高い場合、長い間隔になります。つまり、DMA ラインが AMA ラインを下から上に横切った後、出力は 1
2 になります。 DMA が AMA を下回る場合、それは短い間隔です。つまり、DMA ラインが AMA ラインを上から下まで横切った後、出力は 0 になります。

trix

TimingTRIX

TRIX タイミング戦略、株価の 3 倍平滑指数移動平均価格を長短の判断に使用する:
価格の 3 倍平滑指数移動平均価格 TRIX を計算し、M 日 TRIX の移動平均を計算します。
1. TRIX が MATRIX より上の場合、位置目標を 1
2 に設定します。 TRIX が MATRIX を下回る場合、位置ターゲットを -1 に設定します

ssma

SCRSSMA

単一移動平均クロス戦略 - SMA移動平均(単純移動平均):株価とSMA移動平均の相対位置に基づいてポジション比率を設定

sema

SCRSEMA

単一移動平均クロス戦略 - EMA移動平均(指数平滑移動平均):株価とEMA移動平均の相対位置に基づいてポジション比率を設定

dsma

DCRSSMA

ダブル移動平均クロス戦略 - SMA 移動平均 (単純移動平均):
高速移動平均と低速移動平均を生成するための SMA 移動平均の計算ルールに基づいて、高速移動平均と低速移動平均の相対位置に基づいて位置比率を設定します。

dema

DCRSEMA

ダブル移動平均クロス戦略 - EMA 移動平均 (指数平滑移動平均):
高速移動平均と低速移動平均を生成するための EMA 移動平均の計算ルールに基づいて、高速移動平均と低速移動平均の相対位置に基づいてポジション比率を設定します。

slema

SLPEMA

移動平均傾斜取引戦略 - EMA 移動平均 (指数平滑移動平均):
移動平均を生成するための EMA 計算ルールに基づいて、移動平均の傾きに基づいてポジション比率目標を設定します。

signal_none

SignalNone

空の取引シグナル戦略: 取引シグナルを生成しない戦略

sellrate

SellRate

変化率売りシグナル戦略:価格の変化率が閾値を超えた場合に売りシグナルを生成
1.変化 > 0 で日次増加量が変化より大きい場合、-1 の売りシグナルが生成されます
2.変化が 0 未満で、日次下落が変化よりも大きい場合、-1 の売りシグナルが生成されます。

buyrate

BuyRate

変化率買いシグナル戦略:価格の変化率が閾値を超えた場合、買いシグナルが生成される
1.変化 > 0 で、毎日の増加が変化よりも大きい場合、1 の買いシグナルが生成されます。
2.変化が 0 未満で、日々の下落が変化よりも大きい場合、1 の買いシグナルが生成されます。

Long

TimingLong

シンプルなタイミング戦略、全歴史期間を通じて固定ロングポジション

short

TimingShort

シンプルなタイミング戦略、全歴史期間を通じて固定ショートポジション

zero

T

シンプルなタイミング戦略、全歴史期間を通じて固定の空のポジション

all

SelectingAll

過去の株式プール内のすべての株式を選択したままにし、投資比率を均等に配分します。

select_none

SelectingNone

過去の株式プール内のすべての株式を選択解除したままにし、投資ポジションは 0 になります。

random

SelectingRandom

各履歴セグメントにおいて、指定された割合に従って特定の数の銘柄をランダムに選択する (p<1)、または指定された数の銘柄をランダムに選択する (p>=1) 投資ポートフォリオに入力し、投資比率は均等に配分されます。

finance

SelectingAvgIndicator

一定期間にわたる株式の財務指標の平均値に基づいて株式に投資します。銘柄選択の基本戦略: 銘柄の過去の指標の平均値を銘柄選択要素として使用します。ファクターソートパラメータを戦略パラメータとして渡して、戦略データタイプを変更したり、さまざまな履歴データに基づいて銘柄を選択したり、選択した銘柄パラメータをparsを介して渡すことができます。

ndaylast

SelectingNDayLast

N 日前の株式の価格またはデータ指標に基づいて銘柄を選択します

ndayavg

SelectingNDayAvg

過去 N 日間の株式の価格またはデータ指標の平均値に基づいて銘柄を選択します

ndayrate

SelectingNDayRateChange

過去N日間の株式の価格またはデータ指標の変化率に基づいて銘柄を選択します

ndaychg

SelectingNDayChange

S

ndayvol

SelectingNDayVolatility

銘柄選択要素として過去 N 日間の株式の株価変動率に基づく

次に、TA-libのインストール方法を簡単に紹介します。

pip install ta-lib によってインストールされるのは単なる Python であるため、完全な TA-Lib` パッケージを pip 経由でインストールすることはできません。

一部のユーザーは、次の方法を使用して 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

$ brew install ta-lib

Apple Silicon チップを使用している場合は、以下を使用できます。

$ 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をインストールした後、TA-Libpython wrapperをインストールしてください

pip install TA-Lib

TA-Libのより完全なインストール方法は、こちらを参照してください。

1.2. QTEASYを初期化します

qteasy の依存パッケージがすべて正しくインストールされている場合、IDE に qteasy をインポートできます。

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

初めてqteasyをインポートすると、自動的に初期化されます。初期化プロセスでは、qteasy の環境構成変数を保存するために使用される qteasy.cfg ファイルが作成されます。ユーザーはこのファイルを変更して、qteasy の環境構成変数を変更できます。

ユーザーは、いくつかの主要な構成情報を qteasy.cfg ファイルに保存して、インポート時に qteasy がこれらの構成情報を自動的に読み取ることができます。

QTEASYの初期設定ファイルの2つの方法をご覧ください。

ユーザーがqteasy の初期設定ファイルを編集できるように、qteasy には 2 つの方法が用意されています。

方法 1qteasy.update_start_up_setting() メソッドを使用します

qteasy は、ユーザーが起動後に起動構成情報を表示および変更できるようにする一連の組み込み関数を提供します。

現在の起動構成を表示するには、関数 qteasy.start_up_settings() を使用して現在の起動構成情報を出力します。

>>> qt.start_up_settings()

qteasy を初めて起動するときは、起動設定ファイルは空で、出力される情報も空です。

出力は次のとおりです。

Start up settings:
--------------------

起動設定ファイルを変更または更新するには、関数 qteasy.update_start_up_setting(**kwargs) を直接呼び出します。渡されたパラメータは起動設定ファイルに書き込まれます。

>>> qt.update_start_up_setting(tushare_token='你的tushare token', 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='qt_db')
Start up settings updated successfully! The settings will be effective next time you start qteasy.
>>> qt.start_up_settings()  # 启动配置参数设置完毕后,再次查看启动设置

出力は次のとおりです。

Start up settings:
--------------------
tushare_token = 你的tushare token
local_data_source = database
local_db_host = localhost
local_db_user = user_name
local_db_password = pass_word
local_db_name = qt_db
local_db_port = 3306

起動設定ファイルが正常に変更されたことがわかります。上記の情報が間違っている場合は、いつでも変更できます。 IDE を閉じて、import qteasy を再実行して有効にします。

方法 2qteasy.cfg ファイルに直接アクセスします

ユーザーは、ファイル エクスプローラー、Finder、またはターミナルで qteasy のルート ディレクトリを見つけて、qteasy.cfg ファイルを開いてその内容を変更できます。

qteasy では、qt.QT_ROOT_PATH を介して qteasy のルート ディレクトリを表示できます。

>>> print(qt.QT_ROOT_PATH)

最初の初期化後のqteasy.cfg ファイルの内容は次のとおりです。

# qteasy configuration file
# following configurations will be loaded when initialize qteasy

# example:
# local_data_source = database

ユーザーは、ファイルに構成情報を直接追加し、ファイルを保存して、qteasy を再インポートして、構成を有効にすることができます。例:

local_data_source = database

以下は、qteasy を使用する前にユーザーが構成する必要があるいくつかの構成情報です。

tushareのAPIトークンを設定します

tushare は有料データサービスであることに注意してください。ユーザーはポイントを取得する必要があります。ポイントが多いほど、取得できるデータの種類が増え、権限も大きくなります。 tushare tokenを設定しない場合、tushareデータサービスを正常に利用することができません。

チュートリアルの前のセクションの内容に従って tushare アカウントを作成し、token を取得した場合は、トークンを qteasy.cfg ファイルに書き込むことができます。これにより、qteasy をインポートするときに token が自動的に読み取られます。

次の内容を qteasy.cfg ファイルに追加します。

tushare_token = 你的tushare token

ローカルデータソースの構成

デフォルトでは、qteasy は csv ファイルを使用してローカル データを保存しますが、これは遅く、多くのスペースを占有します。 qteasy をより効果的に使用するには、ユーザーはローカル データ ソースの基本構成も完了する必要があります。

チュートリアルの前のセクションの内容に従って mysql データベースを作成した場合は、データベースの構成情報を qteasy.cfg ファイルに書き込むことができます。これにより、qteasy は指定したデータベースに接続し、データベースに財務データを保存します。

qteasyの起動設定ファイルに以下の内容を追加し、

local_data_source = database
local_db_host = <你的数据库主机名,如localhost>
local_db_port = <你的数据库端口,如3306>
local_db_user = <你的数据库用户名>
local_db_password = <你的数据库连接密码>
local_db_name = <保存金融数据的数据库名,如qt_database>

上記の設定が行われていない場合、qteasy はデフォルトの csv ファイルをローカル データ ソースとして使用します。

注意: 起動設定ファイルを直接変更する場合、ファイルに設定情報を指定するときに <> を追加しないでください。そうしないと、これらの文字も token またはデータベース名の一部とみなされ、データベース接続が失敗します。

qteasy は、設定ファイルを解析するときに、設定の種類に応じて正しい形式に自動的に変換します。たとえば、データベース ポート 3306int 変数である必要があります。直接使用:

local_db_port = 3306

それでおしまい。 qteasy は、文字列 3306int タイプ 3306 に変換します。

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

tushare_token = xxxxxxxxxxxxxxxxxxxxx

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 = qt_db

1.3. 財務データの最初のバッチのダウンロードを開始する

上記の設定を完了し、qteasy.cfg ファイルを保存して閉じます。おめでとうございます。qteasy がインストールされ、設定されました。これで、qteasy の使用を開始できます。

まず、財務データをダウンロードする必要があります。取引戦略のバックテスト、最適化、評価などのすべての機能には財務データが必要です。ここでは、最初に後続のチュートリアルで使用するためにいくつかのストック データをダウンロードできます。

qt.refill_data_sourceは汎用のデータ取得APIです。データテーブル名、データソースチャネル(デフォルトtushare)、開始日/終了日、銘柄コードを指定することで、qteasyは対応するオンラインデータプロバイダーに接続し、データをバッチで自動的にダウンロードできます。ダウンロードするデータ量が多い場合、この機能によりデータが自動的に分割されます。また、ネットワーク遅延によるダウンロードの失敗を自動的に処理し、過剰なダウンロード トラフィックによる接続の失敗を防ぐレート制限オプションを提供します。ダウンロードされたデータは自動的にクリーンアップ、整理、重複除去され、DataSource に書き込まれるデータがクリーンであることが保証されます。 refill_data_source() 関数の詳細については、api_reference を参照してください。

refill_data_source 機能を通じて、株、先物、指数、ファンドなどの財務データだけでなく、マクロ経済、財務諸表、財務指標、会社の基本情報などの非取引データもダウンロードできます。 qteasy は、データをローカルにバッチでダウンロードでき、マルチスレッドの並列ダウンロードも使用でき、ダウンロードの進行状況バーを提供し、大量の履歴データを一度にローカルにダウンロードするのに特に適しています。今月または今週のすべてのデータをダウンロードして月次または週次で追加するなど、増分データを定期的に追加する定期的な操作に適しています。

現在はtushare / akshare / eastmoney などのチャンネルからデータを取得できますが、当面はtushare がメインチャンネルとなります。 tushare チャネルはすべてのデータ API をカバーしており、他の 2 つのチャネルの API はバージョン更新により徐々に追加されます。

# 从tushare下载股票数据 (从2023年1月1日到2023年12月31日之间的所有股票数据)
qt.refill_data_source(channel='tushare', tables='stock_daily', start_date='20230101', end_date='20231231')

qteasy はすべてのデータを自動的にダウンロードし、データのグループ化、分割ダウンロード、切断時の再試行、データ クリーニング、重複排除を自動的に処理します。ダウンロード中に進行状況バーが表示されます。ダウンロードが完了すると、データはローカル データ ソースに書き込まれます。

出力は次のとおりです。

Filling data source file://csv@qt_root/data/ ...
into 3 table(s) (parallely): {'trade_calendar', 'index_basic', 'stock_basic'}
<trade_calendar> 72609 wrn: 100%|███████████████████████████████████| 8/8 [00:03<00:00,  2.39task/s]
<index_basic> 12456 wrn: 100%|██████████████████████████████████████| 8/8 [00:00<00:00,  9.68task/s]
<stock_basic> 5484 wrn: 100%|███████████████████████████████████████| 4/4 [00:00<00:00,  5.45task/s]

Data refill completed! 90549 rows written into 3/3 table(s)!

qteasy では、すべてのデータが特定のデータテーブルに保存され、各タイプのデータには、株価収益率を表す pe、始値を表す open などのデータ ID があります。データ ID を介して、データがローカルにダウンロードされている限り、ユーザーはいつでも qteasy で必要なデータを取得できます。

同時に、データIDはqteasyにおける取引戦略の中核でもあります。ユーザーは、データ ID を通じて取引戦略に必要なデータ タイプを「サブスクライブ」し、これらのデータに基づいて取引シグナルを生成できます (取引シグナルと取引戦略については、チュートリアルの第 4 章を参照してください)。

ネットワーク環境やデータサイズにより、ダウンロードにかかる時間が異なる場合があります。ダウンロードが完了すると、2023年のすべての株価データを直接取得できるようになります。

履歴データを取得するには、get_history_data 関数を使用し、パラメーターでデータ型、銘柄コード、開始日、終了日を指定します。次のコードは、2023 年 1 月 1 日から 2023 年 3 月 1 日までの株式 000001.SZ の始値、高値、安値、終値、取引高、出来高などを取得できます。

>>> qt.get_history_data(
...         'open, high, low, close, vol',  # 数据类型,分别为开盘价、最高价、最低价、收盘价、成交量
...         shares='000001.SZ',   # 股票代码:平安银行
...         start='20230101',   # 数据开始日期
...         end='20230301',  # 数据结束日期
... )

出力は次のとおりです。

{'000001.SZ': 
             open   high    low  close         vol
2023-01-04  13.71  14.42  13.63  14.32  2189682.53
2023-01-05  14.40  14.74  14.37  14.48  1665425.18
2023-01-06  14.50  14.72  14.48  14.62  1195744.71
...
2023-02-27  13.75  13.88  13.68  13.69   621461.93
2023-02-28  13.75  13.85  13.61  13.78   607935.92
2023-03-01  13.80  14.19  13.74  14.17  1223451.78}

この時点で上記のデータが表示されていれば、qteasyのインストールと初期化が完了し、qteasyの使用を開始できることになります。

次の章では、qteasyの基本的なデータ型と、qteasyを使用して財務データを取得および管理する方法を紹介します。

qteasy 環境変数の AP およびすべての環境変数については、設定 API を参照してください。