使用Mathematica預(yù)測A股指數(shù)

上一節(jié)我們講了如何用tushare來獲取A股指數(shù)的數(shù)據(jù), 本節(jié)將接著來講如何利用Mathematica來預(yù)測指數(shù)。

Mathematica預(yù)測A股指數(shù)的步驟

導(dǎo)入A股指數(shù)數(shù)據(jù)

SetDirectory["E:\\cygwin64\\home\\van\\development\\stock"];
ASIndex=Import["AS_index.csv"];
ASIndex[[1;;3]]//TableForm

輸出為

date high low close volume amount
2018-06-28 2959.67 2913.97 2918.64 11821880600 129596964939
2018-06-27 2989.36 2931.14 2946.23 12927158700 142322455107

具體可以參考tushare對(duì)數(shù)據(jù)命名的解釋。我們這里關(guān)心的是date(日期)與close(收盤價(jià)格).

提取日期與收盤價(jià)格

t = ASIndex[[2;;, 1]];
InitialDate = ToExpression@StringSplit[Last@t, "-"];
tstd = DayCount[ToExpression@StringSplit[#, "-"], InitialDate] & /@ t;

v = ASIndex[[2;;, 5]];
vstd = v;
vstd[[1 ;; 3]]

時(shí)間t其實(shí)就是取出ASIndex中第二行到最后一行, 第一列的數(shù)據(jù), 然后我們用StringSplit2018-06-29轉(zhuǎn)換為標(biāo)準(zhǔn)的日期格式{2018,06,29}, ToExpression去掉了06前面的0, 最后我們用DayCount來計(jì)算了日期差(當(dāng)前數(shù)據(jù)日期與最后一行的日期, 即數(shù)據(jù)最早日期); 而收盤價(jià)格v就是ASIndex中第二行到最后一行, 第五列的數(shù)據(jù)。這里我并沒有標(biāo)準(zhǔn)化(你可以vstd=v/Mean[v]), 最后vstd[[1;;3]]顯示vstd中開頭三個(gè)數(shù)據(jù)。

輸出為

{2918.64, 2946.23, 2979.13}

預(yù)測A股指數(shù)走勢
n = 60;

stocks = TimeSeries[Reverse[vstd[[;; n]]]];
testn = Floor[n/10];
teststocks = TimeSeries[Reverse[vstd[[testn ;; n]]]];

TimeSeriesModelFit[teststocks, "SARIMA"]
stocksMode = % // Normal
forecast = TimeSeriesForecast[stocksMode, teststocks, {0, 2 testn}];
ListLinePlot[{Normal[stocks], Normal[forecast][[1]]}, Filling -> Axis,
  PlotRange -> All]

我們設(shè)置了預(yù)測樣本數(shù)據(jù)長度n為60天, 即考慮最近兩個(gè)月的數(shù)據(jù)。注意到我們的數(shù)據(jù)是從新到舊排列的, 故在使用TimeSeries將數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列時(shí), 我們用了Reverse來倒置數(shù)據(jù)(這樣才是時(shí)間從小到大排列的數(shù)據(jù), 本來可以用{時(shí)間,數(shù)據(jù)}這樣的格式來標(biāo)記, 但是由于時(shí)間不是等標(biāo)記間距的, 這在后面會(huì)要求MMA進(jìn)行額外的處理, 故這里直接將時(shí)間標(biāo)記為數(shù)據(jù)的index).

接下來, 我們設(shè)置了檢驗(yàn)數(shù)據(jù)的長度testn, 即將10%的數(shù)據(jù)拿出來作為檢驗(yàn)本次模擬的效果。
然后就是我們的重點(diǎn)了, 使用MMA強(qiáng)大的擬合功能TimeSeriesModelFit來擬合我們的樣本數(shù)據(jù)teststocks, 這里SARIMA表示季節(jié)性積分自回歸平均移動(dòng)過程(參考wiki)以及這篇文章.

接著, 我們用TimeSeriesForecast函數(shù)來使用上面的得到的stocksMode模型來預(yù)測teststocks樣本在未來testn天的走勢, 注意, 2*testn中一個(gè)testn的預(yù)測數(shù)據(jù)用來檢驗(yàn)?zāi)P偷念A(yù)測可靠性, 另一個(gè)testn才是真正對(duì)未來的預(yù)測。

最后, 我們用圖形表示了原始數(shù)據(jù), 預(yù)測數(shù)據(jù)。


6天A股指數(shù)預(yù)測

注記

應(yīng)該注意, 上面只是一個(gè)模型, 實(shí)際情況是如果我們設(shè)置不同的n, 則得到的結(jié)果可能完全不同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • “有很多時(shí)候好像只是做了個(gè)夢但卻什么都變了?!?B君今年30歲,不,準(zhǔn)確的來說是29歲,8月才會(huì)過30歲的生日。年...
    IRENE_寶丁閱讀 417評(píng)論 0 1
  • 參考:http://taobaofed.org/blog/2015/11/17/nvm-or-n/ 總結(jié):都是no...
    shanshanfei閱讀 3,328評(píng)論 1 1
  • 前兩天我在北京的時(shí)候,跟人吃飯聊起說,你們平臺(tái)推崇的審美風(fēng)格似乎都很固定啊,會(huì)不會(huì)造成你們的用戶聽了你們的話穿出來...
    汪撕蔥閱讀 1,602評(píng)論 2 1
  • 寫這些話的時(shí)候是在去往學(xué)校的火車上,心里有說不出的難受,一開始去吃飯的時(shí)候在公交車上老董打來電話根本不敢接,老董他...
    王茜_super閱讀 221評(píng)論 0 0

友情鏈接更多精彩內(nèi)容