我把演算法模型套在了這波股市上,發現...

穀粒先生發表於2019-03-09

跑步進場

最近股市大漲,不少人忙著跑步進場。作為保守型“投資者”,主投指數基金:滬深300。在這波行情 中,短短2個月,也有13%的賬面收益。雖然知道指數類適合長期持有,但也好奇,這個點是否是高位了。為了解決這個疑慮。我們今天用演算法模型套一套,看能否發現些什麼。

時序預測的價值

時序問題的預測在生活中很常見。例如:遊戲線上人數預測、消費情況預測、 O2O 的到店人數預測、交通流量預測,這些場景的精確預測,為資源的調配起到了重大的參考作用。從個體角度來說,得到的服務和體驗也大大提升。

為此,Facebook 開源了一套工具 Prophet,專門用於時間學列預測。在這裡,我們將用它,來一探股市究竟。

時序預測的原理

對於時間序列問題,常用的手法是時間序列的分解:這裡有些類似於傅立葉變換的意味。將一個函式分解為多個規律函式的和積。時間序列的常見組成成分包括:季節項、趨勢項以及噪聲。在 Prophet 中,結合實際情況,他們又加入了節假日專案。之前在一次 kaggle 的比賽中,我們也發現節假日的資料波動,其實是類似於週末效應的。即:節假日的前後資料,類似於週六的前後資料。對資料進行修正後,評價指標會好很多。


廢話不多說,我們們開幹。

Prophet in 滬深300

工具包安裝

pip install fbprophet

資料準備與清洗

import pandas as pd
import numpy as np
from fbprophet import Prophet
複製程式碼

資料準備

data = pd.read_csv('../data/000300.csv',encoding='GB2312') 
data.head()
複製程式碼

我把演算法模型套在了這波股市上,發現...

資料清洗

  • 選取需要的資料,並對資料做 log / box-cox 變換,使資料更符合線性、正態分佈,減少方差差異。經濟系統和生態系統類似,都存在指數級增長現象,也存在飽和現象。我們這裡採用 log 變換。
df = data[[u'日期',u'收盤價']]
df.columns = ['ds','y']
df['y'] = df['y'].apply(lambda x: np.log(int(x)))
複製程式碼

模型擬合與預測

簡單定義,然後擬合。

m = Prophet()
m.fit(df)
複製程式碼

預測未來一年的行情

future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)
複製程式碼

詳細看最後15天的資料

forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(15)
future_predict['yhat'] = future_predict['yhat'].apply(lambda x:np.exp(x))
future_predict['yhat_lower'] = future_predict['yhat_lower'].apply(lambda x:np.exp(x))
future_predict['yhat_upper'] = future_predict['yhat_upper'].apply(lambda x:np.exp(x))
複製程式碼

我把演算法模型套在了這波股市上,發現...

yhat 預測比較保守,20200307 相較於目前20190308 的大盤漲了100個點。預期最大收益:(6536-3658)/3658≈ 78%,預期最大虧損:(2158-3658)/3658≈-41%

模型看到了什麼

Prophet 有個功能是成分拆分,我們們來看看國內股市的趨勢以及季節性因素是什麼。

fig1 = m.plot(forecast)
複製程式碼

模型擬合情況

模型擬合情況

趨勢項

整體趨勢、周趨勢和年趨勢

總結

模型資料表明,滬深股市短期看可能有波動,長期看上揚可能性更大。短期對於我們這種投資方式的參考意義不大,長期來看,穩中向好,我也將持續滬深300。當然,話說回來,投資有風險,決策需謹慎。不要只看狼吃肉,不見狼捱打。去年最差的時候,本人累計虧損15%...

另外再強調一下,模型並非萬能。這裡使用的資訊單一,但真實世界,可是有多種資訊共同作用於市場。模型也還未經過充分調參,沒有劃分資料做驗證,實際使用價值有限。

對此,你怎麼看?請在留言區寫下你的看法。

原文連結:kuhungio.me/2019/prophe…

相關文章