1、回測平臺搭建——思路
阿新 • • 發佈:2019-02-07
什麼是回測平臺?
最簡單來說,寫好了一個策略,從一個txt中讀取了資料,放到策略中,得到了一個最後的收益,這個程式就是一個回測平臺,用回測平臺來概括雖然有些過,但是這就是一個回測平臺的雛形。
升級——需求增加
當最後的統計結果不僅需要收益,還需要統計交易次數、開多開空次數、盈虧比、平均盈利、平均虧損、夏普比率等等這些指標,最後的結果還需要加上視覺化的控制元件的時候,就需要再新增些東西了。
升級——標準化
現在,從讀取資料到執行策略再得到最後的結果已經可以跑通了,但是當又寫了一個又一個策略後,發現這些策略之間有很多公共的部分,如設定時間視窗、求MA、求RSI等等,每次都需要複製貼上這部分程式碼,就造成了程式碼的冗餘性,所以這些常用的模組就可以都抽出來,最為一個公共的模組——Technical(隨便起得名字),下次再編寫策略時,用到什麼直接呼叫就可以了。
接著,下一個問題,我讀取的資料不是txt而是csv或者是資料庫中的資料呢,所以還需要規定一個對資料的規範,類似:
FutureData{ 0 string marketDM # 市場程式碼 1 string instrumentID # 合約程式碼 2 string date # 時間 exg:2017-8-1 11:30:00 3 double Open 4 double High 5 double Low 6 double Close 7 double volume 8 double buyprice 9 double sellprice }
雖然每個檔案或者資料庫中的資料型別不同,但是基本用於回測的資訊應該都包含了,所以每個這樣的資料單元就可以作為一個封裝了,起個名字叫——Bar,這個Bar的物件就具有了以上的屬性。
有了資料後進行回測時還有一個重要的問題,那就是要考慮模型的魯棒性,所謂魯棒性的衡量可以通過設定滑點、提高手續費等來對風險進行一個把控。因此還需要一個這樣的Risk來作為手續費和滑點等的封裝。
然後類似的,再對倉位Position做一個封裝,包括統計持有多倉還是空倉,持倉價格等等。
最後,對策略Strategy再進行一個抽象,設定一個策略的父類,每個策略程式碼部分公共的模組如開倉平倉、配置初始化等設定一個父類方法,通過讓子類繼承來實現。
總結
之所以要自己搭建回測平臺而不用現有的框架,一方面便於理解,另一方面可以任由自己yy,需要設計什麼模組什麼功能自己來決定,所以一個至關重要的問題,就是寫程式碼前一定要對需求搞清楚了,還有就是保留好一些重要的介面方便以後對程式的擴充套件。後面的細節部分想好了再寫。