對于股票價格的預(yù)測對于大多數(shù)交易員來說都是非常重要的。人們多年來一直在使用各種預(yù)測技術(shù)。我們將探索這些技術(shù)以及最近流行的算法,比如神經(jīng)網(wǎng)絡(luò)。在這篇文章中,我們將專注于對源自市場數(shù)據(jù)的特征應(yīng)用到線性模型。
首先我們來定義一下我們的問題,我們想要解決的問題是去預(yù)測證券的價格變化(或者回報)。
在上圖中的每個點(diǎn),我們想要在 1 分鐘后預(yù)測其價格。讓我們看看上圖中的各個點(diǎn) —— 這里有超過 200000 個數(shù)據(jù)點(diǎn),但我們只能看到一部分內(nèi)容。
我們可以看到 AAPL 價格再接下來的 1 分鐘里應(yīng)該上漲了 0.13 美元。我們想建立一個回歸算法來預(yù)測這個價格差異。當(dāng)然,不言而喻,這是一個難以置信的難題。即使是輕微的成功也可以獲得巨大的利潤。
請注意,預(yù)測回報率通常會比預(yù)測價格變動會更有效。比如,對于一只 100 元的股票,0.5 的價格變動對他本身來說不是很大。但是如果是一只 10 元的股票,0.5 的價格變動對他本身來說是很大的。
股票價格會受到眾多因素的影響。以下是其中一些因素:
市場流動性。供需是影響大多數(shù)股票日常價格變動的最關(guān)鍵因素。如果你決定花巨款去投資一家公司,那么它們的股票流動性肯定受到影響,這時候不可避免的就會提高股價。
輿情系統(tǒng)。有名的特朗普的推特治國。他說的很多東西都會影響到股價的波動。有很多的學(xué)術(shù)研究就來做新聞/博客/推文對股票價格的影響。
全球事件對股票價格的影響。比如最近的 G20 峰會,英國退歐等等。
上述因素的影響跨越不同的時間范圍。例如,特定股票的新聞通常會影響未來 1-3 天的價格。全球事件的影響可能會有數(shù)周。在這篇文章中,我們只會使用從市場數(shù)據(jù)中得出的特征來預(yù)測下一個 1 分鐘的價格變化。
特征集可大致分為兩類:描述當(dāng)前市場波動的特征和描述歷史市場波動的特征。
我們暫時會跳過這些功能的數(shù)學(xué)細(xì)節(jié)。但請注意,這些功能試圖捕捉當(dāng)前的市場狀況以及最近的過去。
上述特征的原始值具有非常不同的尺度。雖然 AAPL 的價格一天可以在 153 到 155 之間,但是過去 5 分鐘的數(shù)量可以在 100 到 1000000 之間。由于大多數(shù)學(xué)習(xí)算法在輸入特征的比率相似事效果最好。這就是規(guī)范化步驟至關(guān)重要的原因。我嘗試了一些自定義縮放技術(shù),但發(fā)現(xiàn) scikit-learn 的 RobustScaler 工作非常好。
讓我們首先來嘗試一下在這個數(shù)據(jù)集上的簡單線性模型。
設(shè) x 是實(shí)值特征向量,y 是我們想要預(yù)測的實(shí)數(shù)值。 θ \theta θ 是我們想要學(xué)習(xí)的模型參數(shù)。
普通最小二乘回歸試圖最小化以下?lián)p失函數(shù):
線性模型我們采用 scikit-learn 中的模型,但是根據(jù)下面的實(shí)驗(yàn)結(jié)果,這個模型已經(jīng)過擬合!
在上表中,MSE 指的是均方誤差,MAE 指的是平均絕對誤差。Insample 是指訓(xùn)練數(shù)據(jù),Outsample 是指測試數(shù)據(jù)。即 Outsample 上的 MAE 表示測試數(shù)據(jù)集上的平均絕對誤差。
預(yù)測值的標(biāo)準(zhǔn)偏差具有有用的信息。盤中價格變化的平均值通常接近于 0 。這個數(shù)據(jù)集有很多噪音而且信號不多。這兩者的組合使得對于任何 x 的預(yù)測都會接近于 0 。但是,輸出 0 的模型絕對沒有價值。我們需要可用于交易或者執(zhí)行的固定模型。因此,需要將預(yù)測值 h(x) 的標(biāo)準(zhǔn)偏差與 y 的標(biāo)準(zhǔn)偏差進(jìn)行比較。
對誤差項(xiàng)添加權(quán)重懲罰是正則化的一種簡單方法。這有助于穩(wěn)定訓(xùn)練,模型通常更易于推廣。我做的下一個實(shí)驗(yàn)是嶺回歸模型(L2 正則化),并且檢查一下性能。
我們采用 ElasticNet 模型來進(jìn)行訓(xùn)練,具體參數(shù)為
我們可以看到 Outsample 的結(jié)果比線性回歸模型要好很多。Outsample 的 0.01722 的平均絕對誤差在我看來非常好。雖然預(yù)測值的標(biāo)準(zhǔn)偏差略小,但它仍然與 y 的標(biāo)準(zhǔn)偏差相同。
使用具有 hidden_size1 = 100 和 hidden_size2 = 50 的2層前饋神經(jīng)網(wǎng)絡(luò)獲得以下結(jié)果。對網(wǎng)絡(luò)進(jìn)行了批量歸一化和 dropout ,以減少過度擬合并且改善泛化。
原文鏈接:
https://blog.csdn.net/CoderPai/article/details/84928723
聯(lián)系客服