1. 安裝方法及初始配置

qteasy是一個完全本地化部署和運行的量化交易分析工具包,具備以下功能:

  • 金融數據的獲取、清洗、存儲以及處理、可視化、使用

  • 量化交易策略的創建,並提供大量內置基本交易策略

  • 向量化的高速交易策略回測及交易結果評價

  • 交易策略參數的優化以及評價

  • 交易策略的部署、實盤運行

qteasy使用python創建,使用向量化回測及交易模擬引擎實現了策略的高速回測,同時又兼顧策略框架的靈活性,使得用戶可以根據需要靈活定製各種高級策。qteasy提供了多種策略參數優化算法,幫助優化及評價交易策略,同時提供了實時運行模式,使交易策略可以直接部署使用。

通過本系列教程,您將會通過一系列的實際示例,充分了解qteasy的主要功能以及使用方法。

1.1. qteasy安裝前的準備工作

創建安裝環境

qteasy可以通過pip來安裝,由於依賴包較多,爲了避免各依賴包與現有環境中的包產生衝突,建議創建一個獨立的python環境來安裝qteasy

創建虛擬環境的方法有很多種,這裏介紹兩種方法,分別是使用venvconda

要使用venv創建虛擬環境,macOS和Linux用戶可以打開終端,進入您需要創建環境的路徑,輸入以下命令,在當前目錄下創建一個名爲qteasy-env的虛擬環境,並激活環境:

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

Windows用戶可以打開命令提示符,進入您需要創建環境的文件夾,輸入以下命令,創建虛擬環境並激活:

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

要使用conda創建虛擬環境,可以打開終端,輸入以下命令,創建一個名爲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 數據庫,強烈推薦使用mysql數據庫並確保磁盤有至少1TB的存儲空間,速度快

  • hdf5 文件 佔用空間大,數據量大時速度慢

  • feather 文件 佔用空間較小,數據量大時速度慢

爲了實現最佳的數據存儲效率,建議使用mysql數據庫作爲本地數據源。

如果需要使用數據庫作爲本地數據源,參照以下方法安裝MySQL數據庫,如果使用文件作爲本地數據源,可以跳過這一步。

MySQL官網可以直接找到社區開源版本下載: 網站提供了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 token (可選)

qteasy可以從多個不同的網絡金融數據提供商獲取金融數據,將他們清洗、整理、一致化以後保存在本地數據庫中。

儘管qteasy在不斷地增加金融數據獲取渠道,不過目前仍然主要依賴tushare。系統內建了比較完整的tushare接口API。鑑於tushare的接口均有權限或積分要求,建議用戶提前準備好相應的tushare積分,並開通相應權限。

png

註冊tushare賬號和權限的方法請參見tushare pro主頁:

png

如果不創建tushare賬號,qteasy仍然可以獲得一些數據,但是數據的種類非常有限,訪問頻率和次數也受到限制,很多qteasy功能的使用將會受到限制,如下圖所示:

png

目前已經有部分高頻金融數據可以通過akshare或者東方財富網免費獲取,未來的版本更新中會進一步增加通過其他網絡渠道獲取的數據。

安裝TA-lib (可選)

qteasy內置了大量的技術指標,這些技術指標的計算依賴於TA-lib,如果需要使用qteasy內置的所有技術指標,需要安裝TA-lib。 如果跳過這一步,將只能使用以下內置策略,這裏有完整的內置策略清單及詳細說明參考文檔以及內置交易策略回測結果:

ID

策略名稱

說明

crossline

TimingCrossline

crossline擇時策略類,利用長短均線的交叉確定多空狀態
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擇時策略,使用股票價格的三重平滑指數移動平均價格進行多空判斷:
計算價格的三重平滑指數移動平均價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

雙均線交叉策略——SMA均線(簡單移動平均線):
基於EMA均線計算規則生成快慢兩根均線,根據快與慢兩根均線的相對位置設定持倉比例

slema

SLPEMA

均線斜率交易策略——EMA均線(指數平滑移動平均線):
基於EMA計算規則生成移動均線,根據均線的斜率設定持倉比例目標

signal_none

SignalNone

空交易信號策略:不生成任何交易信號的策略

sellrate

SellRate

變化率賣出信號策略:當價格的變化率超過閾值時,產生賣出信號
1,當change > 0,且day日漲幅大於change時,產生-1賣出信號
2,當change < 0,且day日跌幅大於change時,產生-1賣出信號

buyrate

BuyRate

變化率買入信號策略:當價格的變化率超過閾值時,產生買入信號
1,當change > 0,且day日漲幅大於change時,產生1買入信號
2,當change < 0,且day日跌幅大於change時,產生1買入信號

long

TimingLong

簡單擇時策略,整個歷史週期上固定保持多頭全倉狀態

short

TimingShort

簡單擇時策略,整個歷史週期上固定保持空頭全倉狀態

zero

TimingZero

簡單擇時策略,整個歷史週期上固定保持空倉狀態

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

以股票過去N天的價格或數據指標的變動值作爲選股因子選股

ndayvol

SelectingNDayVolatility

根據股票以前N天的股價波動率作爲選股因子

下面簡單介紹TA-lib的安裝方法:

完整的TA-Lib包無法通過pip安裝,因爲通過pip install ta-lib安裝的只是TA-Lib包的一個python wrapper, 用戶必須首先安裝C語言的TA-Lib才能在python中使用它。

有些用戶可以用下面的方法安裝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.cfg文件,這個文件用於存儲qteasy的環境配置變量,用戶可以通過修改這個文件來修改qteasy的環境配置變量。

用戶可以將一些關鍵配置資訊存放在qteasy.cfg文件中,這樣qteasy在導入時會自動讀取這些配置資訊。

訪問QTEASY初始配置文件的兩種方法

爲了方便用戶編輯qteasy的初始配置文件,qteasy提供了兩種方法:

方法1,使用qteasy.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即可生效

方法2,直接訪問qteasy.cfg文件

用戶可以在資源管理器、訪達或者終端中找到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 token

注意tushare是一個收費的數據服務,用戶需要獲取積分,積分越多,獲取的數據種類越多,權限也越大,如果不配置tushare token,將無法正常使用tushare的數據服務。

如果您按照教程前一節的內容創建了tushare賬號並獲取了token,可以將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在解析配置文件的時候,會根據配置的類型,自動轉換爲正確的格式,例如,數據庫端口3306應該是int變量,直接使用:

local_db_port = 3306

即可。qteasy會將字符串3306轉換爲int3306。·

下面這個配置文件的例子是正確的:

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,其他兩種渠道的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中,所有數據都保存在特定的數據表中,而且每一種數據都有數據ID,例如pe表示市盈率,open表示開盤價,等等;通過數據ID,用戶可以在qteasy中隨時獲取所需的數據——只要數據已經下載到本地。

同時,數據ID也是qteasy中交易策略的核心,用戶可以通過數據ID在交易策略中」訂閱」所需要的數據類型,並根據這些數據生成交易信號(關於交易信號和交易策略,請參見教程第四章)。

根據您的網絡環境和數據量大小,下載數據的時間可能會有所不同,下載完成後,2023年內的所有股票數據就可以直接獲取了。

要獲取歷史數據,可以使用get_history_data函數,在參數中指定數據類型、股票代碼、開始日期和結束日期, 下面的代碼可以獲取2023年1月1日到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來獲取並管理金融數據。

API 參考

關於qteasy環境變量的AP,以及所有的環境變量,請參考 Configuration APIs