1. 程式人生 > >機器學習在量化交易上的運用(一)

機器學習在量化交易上的運用(一)

首先闡述下背景。

也需要一個自己去做總結提高的地方,所以在此開個博。

廢話少說,開始幹活(後面也請諒解想到哪寫到哪的風格,因為這裡很多東西是用分享的方式在自己總結)

今天的第一個任務是在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的程式碼了。今天為了寫博先開了個頭,後面會不斷更新。