利用Scikit-learn機器學習庫的特徵分類進行vnpy期貨量化交易

張國平發表於2019-06-25

這個算是一個小坑,因為我也還在學習過程中,程式碼慢慢完善。一開始在python 2.7,vnpy 1.9.2環境中實現。後面在python 3.7也基本實現,增加支援了xgboost。程式碼寫的繁雜,多多抱歉。


首先說說Scikit-learn是Python語言中專門針對機器學習應用而發展起來的一款開源框架,相對於現在深度學習庫tensorflow,由於Scikit-learn本身不支援深度學習,也不支援GPU加速,但是相對於tensorflow那種近乎黑箱的多層神經網路,還是比較好從數學來解釋分析。


分類是指識別給定物件的所屬類別,屬於監督學習的範疇,最常見的應用場景包括垃圾郵件檢測和影象識別等。目前Scikit-learn已經實現的演算法包括:支援向量機(SVM),最近鄰,邏輯迴歸,隨機森林,決策樹以及多層感知器(MLP)神經網路等等。這裡會使用邏輯迴歸,決策數, MLP神經網路和SVM向量機,其實都是兩句程式碼事情。


不考慮內部的複雜數學邏輯,這裡功能性的使用Scikit-learn特徵分類的功能。

 1) 選取的特徵值,為了避免資料值非邏輯化,這裡不直接使用點位最高點這些,而使用那些和具體點位無關的指標,比如atr,cci,rsi,std和bar的漲跌百分比。

 2) 利用這些特徵值進行分類,這裡對於期貨走勢就是三類,1 是之後上漲,0是之後無規律,-1是之後下跌,這裡使用線性迴歸分析當前時點之後6根K線的走勢,如果斜度下,那麼當前時點歸為-1下跌類,斜度上,為1上漲,如果取信p值不夠,或者上下斜率不大,為0。

那麼特徵值就是atr,cci,rsi,std和bar的漲跌百分比,當然你可以加入KDJ,MACD更多;類別就是三類1,0,-1,利用機器學習,找出特徵值和類別的隱含邏輯,進而指導交易,非常粗糙。


整體程式碼邏輯如下,這裡大量借鑑這個 <https://mp.weixin.qq.com/s?__biz=MjM5MDEzNDAyNQ==&mid=2650314212&idx=1&sn=0f04627d34f4305e0386fc7562563bff&chksm=be454f828932c694f8ce107249457e0ffba705e6e9531807e86a1f468a3a549001c00bb5389e&scene=21> 。



1. 期貨K線資料, 匯入k線資料,並整理加入特性和類屬性

• 利用之前做的DataAnalyzer,讀取Mongodb或者csv的1分鐘k資料, 放入Dataframe來處理,按照定義合併出n分鐘k線,這裡n為10

• 還是利用DataAnalyzer,利用ta-lib方法。給Dataframe加入atr,cci,rsi,std,macd和漲跌百分比。

• 使用新方法addTrend,利用scipy.stats的線性迴歸求出當前時點之後的斜率,給與分類值-1,0,1.



2. 資料處理,為了後面機器學習,把特徵陣列和類陣列劃分出來,並且劃分訓練機和測試集。

(1)劃分出特徵陣列 X,和類別陣列y

(2)劃分訓練集和測試集

• model_selection.train_test_split()



3. 特徵工程,之前需求很多特徵,其實有些並沒有體現規律,或者完全隨機,那麼沒有意義,可以刪除

• 根據P值選:feature_selection.SelectFpr()

• 按照百分比選出最高分特徵:feature_selection.SelectPercentile()

這裡使用SelectPercentile,


4. 模型定義調參/選擇

這裡使用下面模式進行分析,然後利用網格調參

1)LogisticRegression 邏輯迴歸

2)DecisionTreeClassifier 決策樹

3)SVC 支援向量分類

4)MLP 神經網路

• 交叉驗證+網格搜尋:model_selection.GridSearchCV()


5. 模型測試和評價,使用選取最好的模型,進行測試看看拼接

• 模型預測:model.predict()

• Accuracy:metrics.accuracy_score()

• Presicion:metrics.precision_score()

• Recall:metrics.recall_score()


6. 模型儲存和呼叫

• 模型儲存:joblib.dump()

• 模型呼叫:joblib.load(),這裡就可以在vnpy中使用了,其實放在其他交易平臺也差不多。


後面程式碼整理放在後面帖子,最後,只做參考,我發現雖然準確率有差不多70%,但是都是要你空倉,大智慧。。。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2648687/,如需轉載,請註明出處,否則將追究法律責任。

相關文章