日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 时间序列预测 币价_python时间序列预测股票走势

發(fā)布時(shí)間:2024/10/5 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 时间序列预测 币价_python时间序列预测股票走势 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

提示:這只是個(gè)訓(xùn)練模型,技術(shù)不具備實(shí)際意義,入市需謹(jǐn)慎。

首先調(diào)用tushare包

import tushare as ts

import pandas as pd

import matplotlib.pyplot as plt

查自己比較感興趣的股票,這里我查找的是新能源/燃料電池/氫燃料,在數(shù)據(jù)庫(kù)里查找下

concept = ts.get_concept_classified()

df = concept[concept.c_name=='燃料電池']

我們就用金龍汽車(chē)作為我們的股票分析對(duì)象吧。

data=ts.get_hist_data('600686')

將開(kāi)盤(pán)價(jià)open作為我們的分析對(duì)象,在這里截取了一段相對(duì)趨勢(shì)唯一的數(shù)據(jù)作為train_data。并且選取了最后的一部分?jǐn)?shù)據(jù)作為test_data。如下圖。

在導(dǎo)入數(shù)據(jù)的過(guò)程中遇到一個(gè)很奇怪的現(xiàn)象,那就是數(shù)據(jù)的行index是時(shí)間逆序排列,剛開(kāi)始沒(méi)注意,后來(lái)才發(fā)現(xiàn),用DataFrame.sort_index()進(jìn)行調(diào)整。

data= ts.get_hist_data('600686', start='2016-09-13',end='2017-02-15').sort_index()

testdata=ts.get_hist_data('600686',start='2017-02-16',end='2017-03-29').sort_index()

plt.figure(figsize=(10,6))

plt.plot(data.open, label='Raw')

plt.legend(loc=0)

我們想對(duì)該時(shí)間序列數(shù)據(jù)進(jìn)行預(yù)測(cè),我們需要先對(duì)該數(shù)據(jù)進(jìn)行分析,判斷它到底是不是平穩(wěn)性數(shù)據(jù)。

#使用ADF單位根檢驗(yàn)法檢驗(yàn)時(shí)間序列的穩(wěn)定性

#先做一個(gè)編譯器

def tagADF(t):

result = pd.DataFrame(index=[

"Test Statistic Value", "p-value", "Lags Used",

"Number of Observations Used",

"Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)"

],columns=['value']

)

result['value']['Test Statistic Value']=t[0]

result['value']['p-value']=t[1]

result['value']['Lags Used']=t[2]

result['value']['Number of Observations Used'] = t[3]

result['value']['Critical Value(1%)']=t[4]['1%']

result['value']['Critical Value(5%)']=t[4]['5%']

result['value']['Critical Value(10%)']=t[4]['10%']

return result

我們調(diào)用python的統(tǒng)計(jì)包

import statsmodels.api as sm

import statsmodels.tsa.stattools as sts

這里會(huì)涉及到迪基-福勒檢驗(yàn)的概念,后面我會(huì)抽時(shí)間補(bǔ)充這塊知識(shí)。

adf_Data = sts.adfuller(data.open)

tagADF(adf_Data)

我們的前提假設(shè)是該數(shù)據(jù)是非平穩(wěn)性數(shù)據(jù),從p-value上我們看出,有78.68%的可信度證明這條假設(shè)。

接下來(lái)利用差分法構(gòu)建平穩(wěn)時(shí)間序列。

diff = data[['open']].diff(1).dropna()

plt.figure(figsize=(10,6))

plt.plot(diff, label='Diff')

plt.legend(loc=0)

驗(yàn)證是否是平穩(wěn)性數(shù)據(jù),重復(fù)上面的動(dòng)作

adf_Data1 = sts.adfuller(diff.iloc[:,0])

tagADF(adf_Data1)

p-value很小,我們的假設(shè)失效,因此,diff數(shù)據(jù)序列符合平穩(wěn)性要求。

ic = sm.tsa.arma_order_select_ic(

diff,

max_ar=4,

max_ma=2,

ic='hqic'

)

計(jì)算結(jié)果,order=(1,1)

ARMAModel = sm.tsa.ARMA(diff, order).fit()

delta = ARMAModel.fittedvalues - diff

score = 1 - delta.var()/diff.var()

plt.figure(figsize=(10, 6))

plt.plot(diff, 'r', label='Raw')

plt.plot(ARMAModel.fittedvalues, 'g',label='ARMA Model')

plt.legend()

遇到一個(gè)很詭異的事情,

p = ARMAModel.predict(

start='2017-02-16',

end='2017-03-29'

)

跑了四遍代碼,重啟了兩遍kernel,還是不行

試了一下數(shù)字index,將就著用吧

p = ARMAModel.predict(

start=98,

end=127

)

還原數(shù)據(jù)

def revert(diffValues, *lastValue):

for i in range(len(lastValue)):

result = [];

lv = lastValue[i];

for dv in diffValues:

lv = dv + lv

result.append(lv)

diffValues = result

return diffValues;

r = revert(p, data.open[-1])

plt.figure(figsize=(10,6))

plt.plot(r,'g',label='Predict')

plt.plot(testdata.open,'r',label='Raw')

plt.legend()

總結(jié)

以上是生活随笔為你收集整理的python 时间序列预测 币价_python时间序列预测股票走势的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。