




摘要:股市數據是一個有復雜規律的時間序列數據,采用機器學習方法來提高股市趨勢預測的準確性是一個長期的探索。文章基于支持向量機理論,通過實驗分析比較,優化參數提高預測準確率,模擬歷史交易,完善股市交易策略提高投資收益。提出以股價移動平均值代替股價個值作為輸入向量,通過優化參數組合(向量長度、觀察期長度、移動均值滑動長度) ,模型預測準確率顯著提升至83%以上,最高可達98.77%。結合空間區域劃分、大趨勢指標和快速指標,策略優化后的模擬交易年化收益率達26.41%,顯著優于基準指數表現。基于支持向量機的股市預測和交易策略的優化有助于股市投資者準確判斷股市行情并獲取超額投資收益。
關鍵詞:支持向量機;股市預測;移動平均;交易策略優化;趨勢指標
中圖分類號:TP391" " " 文獻標識碼:A
文章編號:1009-3044(2025)24-0111-03
開放科學(資源服務) 標識碼(OSID)
0 引言
經過30多年的發展,中國證券交易逐步完善,股市成為越來越多的投資者進行投資的渠道。找到股票價格的漲跌規律和交易點以獲得超額投資收益是廣大投資者孜孜不倦的追求目標。傳統意義上的股市人工分析大致有4類:新聞消息面分析,價值基本面分析,走勢技術分析,其它特殊分析。新聞消息面和基本面價值是股票價值的基本體現,但面臨真實性、及時性等問題,可能導致投資不可逆受損,普通投資者難以把握。價格走勢數據(K線圖)是眾多投資者對股票未來預期和交易的綜合體現,更具有真實性和及時性。
現有研究[1-5]表明,盡管機器學習在股市預測中取得一定進展,但預測準確率與策略收益的長期穩定性仍存在瓶頸。本文提出一種基于支持向量機(SVM) 的改進框架:第一,通過移動平均輸入向量降低噪聲干擾;第二,引入空間區域劃分與大趨勢指標,增強策略穩健性;第三,結合快速指標優化交易時機。該方法在上證指數12年回測中實現26.41%的年化收益率,驗證了其有效性。
1 理論基礎
1.1 股市數據的特點分析
股票價格走勢是萬千投資者交易的結果,從較短時期看,走勢在消息、情緒等影響下具有極大的不確定性,噪聲大,如:上行中突然下降,下降中突然拉升;從較長時期看又具有一定的規律性,如:波動上行,波動下降。投資者采用了各種指標來提高股票價格走勢判斷的準確性,如:移動平均線MA、MACD、KDJ、布林線BOLL、乖離率BIAS、AR、BR、VR等。隨著A股市場中股票數量的不斷增多,投資者人工進行股票分析的工作量大增,每日難以完成全部股票數據的分析。
在一個交易日中,股票價格起起伏伏,產生了開盤價、最高價、最低價、收盤價等價格,其中收盤價的有效性是最大的,它是大量投資者在數小時內共同認知和接受的最終結果。因此本文價格數據均采用日收盤價進行分析利用。
從較長時間來看,股票價格總是漲漲跌跌交替進行,由此產生了股票日交易量、上市交易日長度和價格空間高度,形成了股票分析的量價時空。分析股票價格的空間高度有助于我們了解運行大趨勢,完善交易策略,如:在股票價格高位區域謹慎買入,在股票價格低位區域謹慎賣出,從而防范股市風險。
1.2 支持向量機算法介紹
支持向量機(Support Vector Machine, SVM)是Vapnik研究提出并發展而來的分類器,1995年被廣泛關注和引用,成為分類問題的一種有效的機器學習算法[6]。它在解決小樣本非線性以及高維度數據識別要優于其他機器學習模型。支持向量機的基本思想是將數據轉換到更高維度的空間,并找到一個分類超平面,將數據用最大邊界分隔開。在最大邊界上的樣本就叫支持向量[7]。
支持向量機利用適當的核函數代替內積,隱式地將樣本數據映射到髙維特征空間,使之在髙維特征空間中線性可分,使得原本對最優超曲面的求解轉化為尋找最優超平面的問題,從而將原本空間中的非線性分類問題在髙維特征空間中變為線性分類問題[2-3]。支持向量機常用的核函數有線性核函數、多項式核函數、高斯核函數(也稱為徑向基核函數,Radial Basis Function,RBF)、Sigmoid核函數[1]。RBF核函數通過高斯函數將樣本點映射到無限維的核函數空間中。大量實踐表明,復雜數據上使用RBF核函數的效果普遍優于線性核函數和多項式核函數。
1.3 Python語言
Python程序設計語言因其簡潔易讀、自由開源和豐富的擴展庫,在科學計算、數據處理、可視化等眾多領域都受到程序設計者的青睞,是一個非常好用的工具[4]。Python獲取歷史數據的方式多種多樣,來源也十分廣泛[8]。本文使用Python3及其sklearn擴展庫來進行支持向量機在股市趨勢中的預測、優化和可視化展現。
2 實驗分析和比較
2.1 實驗設計
上證指數(zs.000001)是以上海證券交易所掛牌上市的全部股票為計算范圍,以發行量為權數的加權綜合股價指數。上證指數走勢是眾多股票走勢的綜合體現結果,比個股走勢波動小,更具趨勢分析的有效性。本文實驗從上證指數2006年1月1日到2024年11月30日的4 594個交易日的數據開始分析,并優化支持向量機在股市預測中的應用(數據從https://www.eastmoney.com/下載)。
選擇N個交易日(價格向量長度)的收盤價形成的一個時間序列向量作為一個樣本,以這個向量最大交易日后第M個交易日(價格觀察期)的收盤價與這個向量最大交易日的收盤價進行比較,大于0.01%記為1,小于等于0.01%記為-1,以此作為樣本標簽。向后移動1個交易日就會構造出第2個樣本和標簽,向后移動2個交易日就會構造出第3個樣本和標簽。以此類推,這樣的多個樣本構成了支持向量機的輸入向量X,定義為:
[X=((P0,P1,...,Pn),(P1,P2,...,Pn+1),...,(Pk,Pk+1,...,Pn+k))]
多個標簽構成了支持向量機的輸出向量Y,定義為:
[Y=(L0,L1,...,Lk)]
股市數據是一種非線性數據,大量實踐都表明RBF核函數在非線性數據分類中效果較好,因此選擇RBF核函數[1,3]。在實驗中對松弛變量權重C和RBF核函數gamma值進行優化選擇。
2.2 輸入向量對預測準確率的影響
根據文獻資料的一些實驗數據,先固定C為10,固定gamma為1[1,5]。價格向量長度N分別取5、10、20、30、60,價格觀察期M分別取5、10、20、30、60,以80%的樣本數據為訓練集,以20%的樣本數據為測試集,在Python中進行訓練和測試評分,得到評分矩陣表如表1所示:
從表1的評分矩陣表中可以看出價格向量長度越長評分越高,預測準確率越高。在N小于20的情況下,觀察期越長評分越低,預測準確率越低;在N大于20的情況下,隨著觀察期的延長,預測準確率呈現出先降后升的趨勢。60個交易日天數基本上是A股3個月的交易日天數,更大N和M將會面臨預測期間偶然風險因素加大,加上投資者的交易情緒而導致交易不利。總體看,準確率低于70%,在依據此預測結果進行交易存在較大投資風險。
2.3 C值和gamma值對預測準確率的影響
在支持向量機中,參數C控制分類錯誤與間隔的權衡。C值越大,分類錯誤越少,但間隔越小,容易過擬合。gamma值控制RBF核的寬度。gamma值越大,高斯分布越窄,模型復雜度越高,容易過擬合。根據表1實驗數據,取價格向量長度N為60,價格觀察期M為60,C值分別取1、5、10、50、100、500、1000、10000、100000,gamma值分別取0.001、0.01、0.1、1、10、100,以80%的樣本數據為訓練集,以20%的樣本數據為測試集,在Python中進行訓練和測試評分,得到評分矩陣表(如表2所示):
從表2的評分矩陣表中可以看出C值在100的評分綜合表現最好,偏離100越遠評分越低。gamma值越大評分越高,同時過擬合風險增大。在C值為100,gamma值為100的情況下,預測準確率達到94.97%,已經具備股市交易操作的可行性。
2.4 減少輸入向量的離散性和噪聲影響,提高預測的準確性
用收盤價的移動平均價代替收盤價是一種有效抑制噪聲和異常點影響的方法[2-3]。對輸入向量X,重新定義為:
X=((MA0,MA1,...,MAn),(MA1,MA2,...,MAn+1),...,(MAk,MAk+1,...,MAn+k)),其中MA為T個交易日收盤價移動平均價,即MA=(P0+P1+...+Pt)/T。
輸出向量Y,重新定義為:
Y=(L0,L1,...,Lk),其中L是向量最大交易日后第M個交易日的T個交易日收盤價移動平均價與這個向量最大交易日的T個交易日收盤價移動平均價進行比較,大于0.01%記為1,小于等于0.01%記為-1。
根據前面實驗數據,取C值為100,gamma值為100,N分別取20、30、60,M分別取20、30、60,移動平滑交易日天數T分別取5、10、20、30、60,以80%的樣本數據為訓練集,以20%的樣本數據為測試集,在Python中進行訓練和測試評分,得到評分矩陣表如表3所示。
比較表1、表2、表3的評分矩陣表的數據,可以看出采用移動平均價代替收盤價作為輸入向量明顯整體提高了支持向量機對股市走勢預測的準確率。表3數據同時也表明單個樣本移動平滑交易日天數T在30以上,向量長度在30及以上,觀察期在20及以上的情況下,預測準確率都超過了83%。在移動平滑交易日天數T為60的情況下,預測準確率達到了98.77%,使得短期中期的股市交易策略的正確性大幅增加。
2.5 結合大趨勢和快速指標,優化預測結果在交易中的應用
綜合考慮輸入向量參數和準確率后,我們采用移動平滑交易日天數T為30,向量長度N為30,觀察期M為20,在支持向量機預測結果由降轉升的交易日買入,在由升轉降的交易日賣出,模擬上證指數2013年1月4日(2277點)到2024年11月29日(3326點)這12年的交易操作,結果顯示:交易120次,累計贏利1 562點,收益率68.60%,超過了此期間上證指數漲幅(46.07%)。用Python制作直接依據支持向量機預測結果進行上證指數模擬交易的可視化圖,如圖1所示:
結合圖1,通過逐次分析模擬交易情況,我們發現根據支持向量機預測結果進行交易操作時存在兩個方面的問題:一是持有變動過快,在大趨勢上升階段持有時間不夠長,在大趨勢下降階段持有時間過長;二是交易反應過慢,在行情劇烈波動時買賣交易過早或過晚。我們對股價空間進行劃分,進一步構建大趨勢指標,保持股市策略的長期穩定性,避免因短期波動而頻繁交易導致損失,引入了快速指標(5日MA偏離率、KDJ、BIAS)提高交易反應的敏捷性,從而實現奔跑贏利和截斷虧損。
基于中位線、小概率、二八理論等,我們對一定時間段(后面均采用3年)的股票日收盤價從高到低順序進行排位,以5%、20%、50%、80%、95%排位所處的價格為界線將股票價格空間分為最高區域、超高區域、高區域、低區域、超低區域、最低區域這6個區域。統計各個區域在一定時間段(后面均采用3年)的累計交易日數,當(最高區域交易日數+超高區域交易日數)gt;(超低區域交易日數+最低區域交易日數)且收盤價低于最高區域低線時記為大趨勢下降段,當(最高區域交易日數+超高區域交易日數)lt;(超低區域交易日數+最低區域交易日數)且收盤價高于最低區域高線時記為大趨勢上升段。這個大趨勢指標在較長時期影響到股市交易策略,在上升階段偏重冒險持有,在下降階段偏重謹慎買入且短期持有,趨勢不變基本策略不變。
對不同的價格空間區域、不同的大趨勢階段,我們使用不同的快速指標參數優化支持向量機預測結果形成的交易策略。在大趨勢上升階段確立后以買入持有為主,在價格空間較高的區域,在快速指標偏離正常指標較大的情況才進行賣出交易;在大趨勢下降階段確立后以賣出持幣為主,在價格空間較低的區域,在支持向量機預測結果為漲且快速指標較正常指標低的情況才進行買入交易。優化交易策略后,再次模擬上證指數在2013年1月到2024年11月的交易操作,結果顯示:交易46次,累計贏利7 216點,累計收益率316.91%,年化收益率26.41%。用Python制作策略優化后上證指數模擬交易的可視化圖,如圖2所示:
3 結束語
本文以支持向量機理論為基礎,提出以移動平均值代替個值作為輸入向量,并尋優向量長度、觀察期長度、移動均值滑動長度等參數,有效提高了支持向量機在股市預測中的準確率。本文還進一步提出構建大趨勢指標和快速指標彌補支持向量機預測在股市交易中穩定性和敏捷性的不足,優化股市交易策略,在上證指數長時期模擬交易中取得較好收益,有效提高了支持向量機預測在股市交易中的實用性。本方法通過參數優化與策略融合,顯著提升了SVM在股市預測中的實用性。未來研究可進一步探索:1) 動態參數調整機制以適應不同市場周期;2) 多因子輸入(如成交量、情緒指標) 增強模型解釋性;3) 基于強化學習的策略自動化框架。
參考文獻:
[1] 楊穌,史耀媛,宋恒.基于支持向量機的股市時間序列預測算法[J].科學技術與工程,2008,8(2):381-386.
[2] 簡清明,曾黃麟.基于移動平均線組合和支持向量機的股市趨勢研究[J].計算機應用與軟件,2011,28(12):81-82,125.
[3] 曲文龍,樊廣佺,楊炳儒.基于支持向量機的復雜時間序列預測研究[J].計算機工程,2005,31(23):1-3.
[4] 孫曉宇,李卓然.基于線性時間序列模型對金融數據分析:以云南白藥股票數據為例[J].時代金融,2016(14):264-265.
[5] 戴政煬,李程.股票數據的可視化呈現與分析:基于我國A股市場的分析[J].吉林金融研究,2022(10):56-61.
[6] 姚宏亮,董偉偉,王浩,等.意愿計算的股市突變點預測方法[J].計算機應用研究,2021,38(4):1108-1112,1118.
[7] 黃卿,謝合亮.機器學習方法在股指期貨預測中的應用研究:基于BP神經網絡、SVM和XGBoost的比較分析[J].數學的實踐與認識,2018,48(8):297-307.
[8] 金桃,岳敏,穆進超,等.基于SVM的多變量股市時間序列預測研究[J].計算機應用與軟件,2010,27(6):191-194,209.
【通聯編輯:李雅琪】