1. 程式人生 > >1、回測平臺搭建——思路

1、回測平臺搭建——思路

什麼是回測平臺?

最簡單來說,寫好了一個策略,從一個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,需要設計什麼模組什麼功能自己來決定,所以一個至關重要的問題,就是寫程式碼前一定要對需求搞清楚了,還有就是保留好一些重要的介面方便以後對程式的擴充套件。

後面的細節部分想好了再寫。