【量化課堂】教你用機器學習預測漲跌

JoinQuant聚寬量化平台,免費提供數據獲取、研究環境、策略回測、實盤連接、發送交易信號等功能,歡迎體驗 >>> JoinQuant聚寬

導語:在我們的數學課堂中,我們給大家簡單介紹了幾種機器學習方法的演算法原理(SVM,樸素貝葉斯,隨機森林等等),在每篇文章的最後,我們都放了一個非常小的例子來幫助大家使用這些演算法。這一篇就給大家展示一個更貼近實際的例子,來幫助大家更好的使用這些演算法。

本文中,為了降低提取的特徵中的雜訊,我們將常見技術分析指標進行離散化,作為特徵值,如RSI,MACD,等等。然後應用SVM,樸素貝葉斯和隨機森林演算法來預測下一個交易日的漲跌情況。

為了和實際應用場景更接近,我們每天都會向訓練數據中添加今天的數據,因為訓練數據集發生了改變,我們每天都會訓練一個新的模型。下面我們正式開工。

本文由JoinQuant量化課堂推出 。難度標籤為進階上,理解深度標籤:level-0

作者:yongpeng.r

編輯:宏觀經濟算命師

更好的閱讀體驗以及查看完整代碼請點連接君:╭(╯^╰)╮連接在此,誰敢點我!

閱讀前需要了解:

文中涉及到SVM,隨機森林,樸素貝葉斯演算法,可以參照量化課堂中的支持向量機入門,隨機森林入門,樸素貝葉斯入門。

訓練預測代碼介紹:

本文是之前的支持向量機,隨機森林,樸素貝葉斯等機器學習演算法的應用篇,具體的代碼可以參照文中後面的研究模塊,下面先將一些重要的代碼拿出來說說,以方便大家理解代碼的邏輯。

特徵計算

我們先通過get_price方法得到該支股票的前35個交易日的開高低收和交易量數據,然後利用talib包提供的特徵計算API計算相應的特徵。在這次實驗中,我們選取了SMA,WMA等十多個技術指標作為訓練模型的特徵。如計算SMA指標的代碼如下:

trading_days = get_all_trade_days()nstart_day = trading_days[index - 35]nend_day = trading_days[index]nstock_data = get_price(test_stock, start_date=start_day, end_date=end_day, n frequency=daily『, fields=[close』,high『,low『,volume』;])nclose_prices = stock_data[close『;].valuesnsma_data = talib.SMA(close_prices)[-1]n

分類標籤確定

如果下一個交易日的收盤價比當前交易日的收盤價高,label的值為True,否則為False。相關代碼如下:

start_day = trading_days[index]nend_day = trading_days[index + 1]nstock_data = get_price(test_stock, start_date=start_day, end_date=end_day, n frequency=daily』, fields=[close『,high』,low『,volume『])nclose_prices = stock_data[close』].valuesnlabel = Falsenif close_prices[-1] > close_prices[-2]:nlabel = Truen

特徵離散化

通過talib庫計算出來的特徵都是連續值,由於股市中的雜訊非常多,如果直接將連續值特徵放到機器學習演算法中訓練,得到的結果很可能過擬合的(回測結果好,實盤結果差)。為了避免過擬合,本文中結合各個特徵的含義,將連續值特徵離散化為二值特徵。比如對於SMA特徵,離散化的方法就是和當日收盤價相比較,若SMA小於當前收盤價,離散之後的特徵值是1,若SMA大於等於收盤價,離散之後的特徵值是-1。SMA離散化的代碼如下,x_all是存放所有特徵值的二維數組,x_all中的第1列存放的就是SMA特徵數據。

# SMAnif x_all[index][0] < x_all[index][-1]:nx_all[index][0] = 1nelse:nx_all[index][0] = -1n

應用機器學習演算法

在準備好數據之後,就需要利用機器學習演算法來訓練模型並且利用訓練好的模型預測下一個交易日的漲跌情況了。下面是通過SVM演算法預測的代碼:

clf = svm.SVC()nclf.fit(x_train, y_train)nprediction = clf.predict(x_test)n

預測結果

隨著時間增加,訓練數據隨之增多,每天對下一天進行,整體成功率變化如下:

最後成功率大概是58%。

本文由JoinQuant量化課堂推出,版權歸JoinQuant所有,商業轉載請聯繫我們獲得授權,非商業轉載請註明出處。

更好的閱讀體驗以及查看完整代碼請點連接君:╭(╯^╰)╮連接在此,誰敢點我!

JoinQuant聚寬,免費提供金融數據獲取,分析,投資策略編寫,回測,實盤連接,發送交易信號等功能服務。歡迎體驗:)


推薦閱讀:

TAG:机器学习 | 股票 | 编程 |