1. 程式人生 > >量化投資學習筆記03——封裝回測操作

量化投資學習筆記03——封裝回測操作

從前兩篇文章中,我們使用pyalgotrade框架進行了量化策略的回測的基本操作。使用框架確實比較方便,但是仍有很多每次都要進行的重複操作,比如建立資料來源,建立策略,繫結策略與分析器,執行回測,取得回測結果,繪圖等。能不能進行進一步的封裝?我想要的是,指定要交易的股票程式碼,基準股票程式碼,初始資金,手續費率,回測時間等引數,然後執行回測,就能得到各種回測資料,還可以繪圖。
現在就開始幹吧。

class Backtesting():
    def __init__(self):
        pass

先建立建構函式,傳入上面所說的各種初始值。

"""
封裝回測過程
引數:
instrument: 要回測的股票程式碼
startYear: 回測開始年份
endYear: 回測結束年份
base: 基準股票程式碼,預設為300etf
cash: 初始資金,預設為1000000元
feeRate: 手續費費率,預設為0.0003
"""
"""
封裝回測過程
引數:
 instrument: 要回測的股票程式碼
 startYear: 回測開始年份
 endYear: 回測結束年份
 strategy: 回測的策略
 base: 基準股票程式碼,預設為300etf
 cash: 初始資金,預設為1000000元
 feeRate: 手續費費率,預設為0.0003
"""
class Backtesting():
 def __init__(self, instrument, startYear, endYear, strategy, base = "510300", cash = 1000000, feeRate = 0.0003):
  self.__instrument = instrument
  self.__startYear = startYear
  self.__endYear = endYear
  self.__strategy = strategy
  self.__base = base
  self.__cash = cash
  self.__feeRate = feeRate
  # 要建立的內部變數
  self.__strategyTest = None
  self.__feed = None
  self.__strategyBase = None
  self.__feedBase = None
  self.__brk = None
  self.__brkBase = None
  self.__return = returns.Returns()
  self.__returnBase = returns.Returns()
  self.__sharpe = sharpe.SharpeRatio()
  self.__drawdown = drawdown.DrawDown()
  self.__trade = trades.Trades()

接著分別實現createBarfeed(self),createBroker(self),createStrategy(self)成員函式,具體實現跟之前的一樣,就不粘上來了。
跟著要建立策略分析器並與策略物件繫結。

# 建立策略並繫結分析器
def createStrategy(self):
    self.__strategyTest =     self.__strategy(self.__feed, self.__instrument, self.__brk)
      self.__strategyTest.attachAnalyzer(self.__return)
    self.__strategyTest.attachAnalyzer(self.__sharpe)
    self.__strategyTest.attachAnalyzer(self.__drawdown)
    self.__strategyTest.attachAnalyzer(self.__trade)
    self.__strategyBase
= self.__strategy(self.__feedBase, self.__base, self.__brk)
    self.__strategyTest.attachAnalyzer(self.__returnBase)

接下來就要把上面的流程串起來,本來我想在一個函式裡面搞定,先建立barfeed和broker,然後建立策略,執行回測,計算指標並返回結果。但是發現有錯誤,執行以後程式就不停地在執行回測那裡反覆,最後回溯超過最大值程式停止。可能是因為pyalgotrade是事件驅動型的框架吧。只好妥協:封裝的類建立了策略以後返回策略,由類的呼叫者手動呼叫run執行回測,然後再手動獲取回測指標。像這樣。

    bt = Backtesting(["000001"], 2016, 2018, MyStrategy)
    strategy = bt.getStrategy()
    strategy[0].run()
    strategy[1].run()
    result = bt.getResult()
    bt.outputResult()


輸出的結果跟之前的程式一樣。接下來再把繪圖的功能加上吧。

圖還是有點問題,我是想把策略收益跟基準收益畫到一起的。另外類裡面也沒有做錯誤處理等。不過基本功能還是實現了。其它的用到再說吧。
程式碼:https://github.com/zwdnet/MyQuant/tree/master/03

我發文章的四個地方,歡迎大家在朋友圈等地方分享,歡迎點“在看”。
我的個人部落格地址:https://zwdnet.github.io
我的CSDN部落格地址:https://blog.csdn.net/zwdnet
我的部落格園部落格地址: https://www.cnblogs.com/zwdnet/
我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地

相關推薦

量化投資學習筆記03——封裝操作

從前兩篇文章中,我們使用pyalgotrade框架進行了量化策略的回測的基本操作。使用框架確實比較方便,但是仍有很多每次都要進行的重複操作,比如建立資料來源,建立策略,繫結策略與分析器,執行回測,取得回測結果,繪圖等。能不能進行進一步的封裝?我想要的是,指定要交易的股票程式碼,基準股票程式碼,初始資金,手續費

量化投資學習筆記05——檢驗計算指標程式

因為對前面計算回測指標的程式的準確性還有疑問,我決定再驗證一次。驗證的方法是找一個帶資料的完整的程式,先實現其程式,再用它的資料和我的程式計算,對比一下二者的結果。 在知乎上找到一篇,https://zhuanlan.zhihu.com/p/55425806 是用貴州茅臺,工商銀行和中國平安三隻股票做回測。我

量化投資學習筆記06——《開啟量化投資的黑箱》讀書筆記

讀了一本量化投資的書,筆記如下。 書名:開啟量化投資的黑箱 作者:Rishi K. Narang 譯者:郭建光 出版者:機械工業出版社 版次:2012年3月第一版第一刷 前言 量化交易是人類經過嚴格研究後得到的交易策略,然後交付給系統去實施。其與主觀判斷型的交易策略的主要差別在於策略如何生成及如何實施。 阿爾

量化投資學習筆記11——關於時間序列你所能做的一切

關於時間序列你所能做的一切 Siddharth Yadav 翻譯自https://www.kaggle.com/thebrownviking20/everything-you-can-do-with-a-time-series 資料檔案也在上面連結裡。或者上我的github程式碼庫:https://githu

量化投資學習筆記12——時間序列分析實操

還是宅在家裡,繼續學習。 用真實的股票資料來實踐一下剛學的時間序列分析的內容吧。分析一下我定投的兩支股票:300etf(510300),納指etf(513100)。 首先用tushare下載股價資料,時間範圍從其創立到2020年1月31日。然後將資料處理後存入csv檔案,再把下載資料的程式碼註釋掉,以後直接從

量化投資學習筆記13——各種指標的繪圖、計算及交易策略

《量化投資:以python為工具》第五部分筆記 先來畫k線圖,要注意finance模組已經從matplotlib庫中去除,現在要用mpl_finance庫,單獨安裝。 其中有candlestick_ohlc函式,用來畫k線圖或者叫蠟燭圖。函式接受的日期格式是浮點型別,接受的資料格式是列表型,要進行相應的轉換,

量化投資學習筆記16——迴歸分析:多元線性迴歸

理論模型 y = β0 + β1x1 + β2x2 + … + βpxp + ε 意義與一元線性迴歸相同。 E(y) = E(β0 + β1x1 + β2x2 + … + βpxp + ε) => y = β0 + β1x1 + β2x2 + … + βpxp 列線性方程組 y1 = β0 + β1x1

量化投資學習筆記18——迴歸分析:變數的選擇、多重共線性及迴歸分析的改進

如果模型包含了所有影響因素,稱為全模型。如果只包含部分影響因素,稱為選模型。 影響:①未選入的引數不全為0時,選模型的迴歸引數為有偏估計。②選模型的預測結果是有偏預測。③選模型的引數估計有較小的方差。④選模型的預測殘差有較小的方差。⑤選模型預測的均方誤差比全模型小。 自變數選擇的準則: ①殘差平方和SSE越小

量化投資學習筆記19——迴歸分析:實操,泰坦尼克號乘客生還機會預測,線性迴歸方法。

用kaggle上的泰坦尼克的資料來實操。 https://www.kaggle.com/c/titanic/overview 在主頁上下載了資料。 任務:使用泰坦尼克號乘客資料建立機器學習模型,來預測乘客在海難中是否生存。 在實際海難中,2224位乘客中有1502位遇難了。似乎有的乘客比其它乘客更有機會獲救。

量化投資學習筆記30——《Python機器學習應用》課程筆記04

有監督學習 常用分類演算法 KNN:K近鄰分類器。通過計算待分類資料點,與已知資料中所有點的距離,取距離最小的前K個點,根據"少數服從多數"的原則,將這個資料點劃分為出現次數最多的那個類別。 在sklearn中,使用sklearn.neighbors.KNeighborsClassifier建立K鄰近分類器。

MongoDB學習筆記~自己封裝的Curd操作(按需更新的先決條件)

回到目錄 我們上一講中介紹了大叔封裝的Mongo倉儲,其中介紹了幾個不錯的curd操作,而對於按需更新內部子物件,它是有條件的,即你的子物件不能為null,也就是說,我們在建立主物件時,應該為子物件賦一下初值,即new一下它,呵呵. 正確的mongo集合 對於賦過初值的子物件,在按需要更新時,有以下

MongoDB學習筆記~自己封裝的Curd操作(查詢集合物件屬性,更新集合物件)

回到目錄 我不得不說,mongodb官方驅動在與.net結合上做的不是很好,不是很理想,所以,我決定對它進行了二次封裝,這是顯得很必然了,每個人都希望使用簡單的物件,而對使用複雜,麻煩,容易出錯的物件盡而遠之,這是正常的,人都是喜歡懶惰的,就像程式設計師,也是一樣,喜歡偷懶,可能說,偷懶是程式設計師進步的一

Nginx學習筆記03虛擬機與代理

listen 服務器 htm tomcat 返回 conf 首頁 cati family 1.1. 虛擬機 使用Nginx的配置文件中的server結點,可以很方便的在一個nginx實例中支持多個虛擬機。 前提條件:主機有多個域名。 本次試驗中用到的主機192.168.

DVWA學習筆記--03--File Inclusion

amp all not dvwa input https 必須 div 文件 0x00 第三個是文件包含漏洞 分為遠程文件包含和本地文件包含兩種 但是遠程文件包含是需要開啟allow_url_include()這個函數才行 0x01 low 在low下的全部源碼

JavaSE 學習筆記封裝(四)

延遲加載 分類 static str super 想要 oid 懶漢式 可靠性 封 裝(面向對象特征之一):是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。 好處:將變化隔離;便於使用;提高重用性;安全性。 封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提

OGG學習筆記03

最終 time arch ould delet ons tab datapump 所在 OGG學習筆記03-單向復制簡單故障處理 環境:參考:OGG學習筆記02-單向復制配置實例實驗目的:了解OGG簡單故障的基本處理思路。 1. 故障現象故障現象:啟動OGG源端的extra

c++學習筆記---03---從一個小程序說起2

name 操作系統 簡單 sin clu sed close tchar 重載 從一個小程序說起2 要求:編寫一個程序,要求用戶輸入一串整數和任意數目的空格,這些整數必須位於同一行中,但允許出現在該行中的任何位置。當用戶按下鍵盤上的“Enter”鍵時,數據輸入結束。程序自

threejs學習筆記03---網格

padding sets idt javascrip basic mat cli color arc <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

Lua循環結構while循環、repeat 循環_學習筆記03

back while spa ack -c end con until color Lua循環結構while循環、repeat 循環 while語法結構     while(condition)do     end --1.輸出1到100     inde

Python入門學習筆記03(裝飾器)

語法糖 替換 開頭 ogg highlight 使用 情況 war \n 裝飾器 裝飾器的本質就是一個函數,它的作用是在不改變被裝飾函數代碼及調用方式的情況下為被裝飾函數加上一些功能,可以說裝飾器對於被裝飾函數來說是完全透明的。裝飾器的實現方式利用了高階函數和嵌套函數,建立