機器學習在量化交易上的運用(一)
首先闡述下背景。
也需要一個自己去做總結提高的地方,所以在此開個博。
廢話少說,開始幹活(後面也請諒解想到哪寫到哪的風格,因為這裡很多東西是用分享的方式在自己總結)
今天的第一個任務是在TB上實現均線特徵的線性迴歸交易。
之前這個東西我做過,但是卻被某些機器學習方面的大牛批評:過多的業務框架限制了機器能學到的東西。現在對這個批評理解的都不夠透徹。
其實,很多想入門做數分或機器學習的人會發現,資料來源是個頭疼事。我的建議是,不妨從股市或期貨市場的交易資料入手,因為夠好獲取。
http://www.tb18.net 這個是TB的網站,這個是一個國內比較好的第三方程式化交易軟體,它上面可以匯出資料。除了可以匯出常規的價格資料外,還可以用匯出所有plot的自定義資料(可以自己定義一些標籤,可以直接plot出來後匯出哦)
當然,還有很多獲取資料的方式,但這個比較直觀,而且訓練的模型可以直接在上面實盤操作(感覺自己在安利TB,不過現在很多人都根據CTP介面自己寫程式交易軟體嘍)
在TB上實現一個線性模型。
Y = wX+b
這裡的X可以自己定義,我們採用了均線來定義(我不知道這是不是在各類挖掘或機器學習中叫的特徵的概念)。
Params Numeric n(10); Vars NumericSeries ma8; NumericSeries ma13; NumericSeries diffc; NumericSeries diffma8; NumericSeries diffma13; NumericSeries df; BoolSeries condbuy; BoolSeries condsellshort; Begin ma8 = Average(close, 8); ma13 = Average(close, 13); diffc = (close[-1] - close)/close * 10000; diffma8 = (close - ma8)/close * 10000; diffma13 = (close - ma13)/close * 10000; df = (-0.037803471919434*diffma8 + 0.033816490363161*diffma13)*100; condbuy = df > n; condsellshort = df < n*-1; //PlotNumeric("ma8",ma8); //PlotNumeric("ma13",ma13); PlotNumeric("diffma8",diffma8); PlotNumeric("diffma13",diffma13); PlotNumeric("diffc",diffc); PlotNumeric("df",df); if (condbuy) { Buy(1,close); } if (condsellshort) { SellShort(1,close); } End
程式碼不註釋的。哈哈。是段TB程式碼,可以直接複製到TB裡測試。
diffma8 和 diffma13是特徵,下一根K線的漲跌幅是需要去預測的量。通過w=(x'*x)^-1*x'*y的公式可以求w引數。然後帶回到TB裡。
大的框架就是這樣的。現在問題是,好的X和Y有哪些?自己定義的框架是不是像批評者說的,限制了機器的learn。怎麼突破?
如何用python實現批量的回測?
今天暫且先到這,這個框架以前搭過,需要持續研究的優化。
有興趣一同探討的朋友可以聯絡我。
PS:好久沒擼matlab的程式碼和TB的程式碼了。今天為了寫博先開了個頭,後面會不斷更新。