事實上,backtrader雖然沒有直接提供接口給我們做這樣的優化,但是我們可以通過繼承DataBase基類重寫DataFeed實現目的。下面就給大家演示一下如何從MySQL中提取數據并增加換手率指標進行回測。
本文完整源代碼和數據均在開源代碼倉庫中:
https://github.com/Ckend/pythondict-quant
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,請訪問這篇文章:超詳細Python安裝指南 進行安裝。如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
此外,推薦大家用VSCode編輯器,因為它可以在編輯器下方的終端運行命令安裝依賴模塊:Python 編程的最好搭檔—VSCode 詳細指南。
Windows環境下打開 Cmd (開始-運行-CMD),蘋果系統環境下請打開 Terminal (command+空格輸入Terminal),準備開始輸入命令安裝依賴。
在終端輸入以下命令安裝我們所需要的依賴模塊:
pip install backtrader
pip install numpy
pip install matplotlib
看到 Successfully installed xxx 則說明安裝成功。
2.自定義DataFeed
何為DataFeed?DataFeed 即 backtrader 中的“數據源”,任何數據進入策略回測前都要通過DataFeed,而DataFeed中會對數據進行處理,使得策略可以高效地進行計算。
我們今天要做的,就是增加一個基于MySQL的DataFeed,使得整個流程變得更加自動化。
首先,需要定義一個類,使其繼承與backtrader的數據基類 DataBase
:
from backtrader.feed import DataBase
from backtrader import date2num
class MySQLData(DataBase):
pass
如果需要從外部傳入所需股票數據的代碼和其一定范圍內的K線數據,需要提前定義params. 此外,如果你有除了:datetime(時間)、open(開盤價)、close(收盤價)、high(最高價)、low(最低價)、volume(成交量) 之外的指標。需要提前定義lines,如下所示:
從上圖可見,在lines中我增加了兩個自定義指標:turnover(成交額) 和 turnover_rate(換手率)。
接下來,編寫一個函數根據params參數從MySQL中獲取數據:
代碼本身沒有什么可說的,記得替換你本地的mysql配置,值得注意的是最后一行,拿到mysql數據后需要轉化為迭代器。
在類初始化的時候,需要定義相關的數據存放變量并調用上述函數獲取數據:
接下來到了關鍵的步驟,在調用回測策略前,cerebro會遍歷Datafeed的所有數據,此時會調用_load函數, 因此我們需要在這里,將數據庫中提取的每列數據對應到lines上:
如果你完整地看完了我的上述分析,那么理解下面整個DataFeed,甚至自己寫一個DataFeed,是非常容易的。
3.使用自定義數據流進行回測
接下來,讓我們嘗試使用這個自定義數據流輸入數據,采用第二章的macd策略輔助增加換手率指標進行回測。
這里當然需要你先讀懂第二章的內容,如果有點忘記了,可以回頭閱讀一下,非常簡單:
首先,在回測模塊及next函數中,引入換手率指標:
next函數買入時增加判斷換手率必須小于3%的條件:
最后,引入我們剛剛編寫完成的MySQLData Feed,傳入相關參數讀取股票為603520.SH的數據流,取2017年1月1日至2020年4月12日的數據,并調用回測函數:
-
接口
+關注
關注
33文章
8694瀏覽量
151931 -
數據
+關注
關注
8文章
7145瀏覽量
89593 -
終端
+關注
關注
1文章
1156瀏覽量
30008 -
database
+關注
關注
0文章
5瀏覽量
10830 -
MySQL
+關注
關注
1文章
829瀏覽量
26745
發布評論請先 登錄
相關推薦
如果從采集的數據串中提取一個完整的脈沖數據?
怎么從EXA中提取IQ數據進行后期處理
如何從特征值中提取兩個字節?
如何以編程方式從STL庫中提取版本信息?
如何通過M480系列的PDMAA步態模式從RGB顏色陣列中提取
如何從HTML或XML文件中提取數據的Python爬蟲庫Beautiful Soup概述
新加坡研發從空氣中提取水的氣凝膠
MySQL端口可以從MySQL數據庫中存儲和檢索數據
如何使用OpenCV和Python從圖像中提取感興趣區域
OST中提取郵箱數據和重置丟失的WindowsServer 密碼的工具
![OST<b class='flag-5'>中提取</b>郵箱<b class='flag-5'>數據</b>和重置丟失的WindowsServer 密碼的工具](https://file1.elecfans.com/web2/M00/8A/87/wKgaomSWafCAPL46AAAPmkkQmAU823.jpg)
評論