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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/10/5 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 时间序列预测 币价_python时间序列预测股票走势 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:這只是個訓練模型,技術不具備實際意義,入市需謹慎。

首先調用tushare包

import tushare as ts

import pandas as pd

import matplotlib.pyplot as plt

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

concept = ts.get_concept_classified()

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

我們就用金龍汽車作為我們的股票分析對象吧。

data=ts.get_hist_data('600686')

將開盤價open作為我們的分析對象,在這里截取了一段相對趨勢唯一的數據作為train_data。并且選取了最后的一部分數據作為test_data。如下圖。

在導入數據的過程中遇到一個很奇怪的現象,那就是數據的行index是時間逆序排列,剛開始沒注意,后來才發現,用DataFrame.sort_index()進行調整。

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)

我們想對該時間序列數據進行預測,我們需要先對該數據進行分析,判斷它到底是不是平穩性數據。

#使用ADF單位根檢驗法檢驗時間序列的穩定性

#先做一個編譯器

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

我們調用python的統計包

import statsmodels.api as sm

import statsmodels.tsa.stattools as sts

這里會涉及到迪基-福勒檢驗的概念,后面我會抽時間補充這塊知識。

adf_Data = sts.adfuller(data.open)

tagADF(adf_Data)

我們的前提假設是該數據是非平穩性數據,從p-value上我們看出,有78.68%的可信度證明這條假設。

接下來利用差分法構建平穩時間序列。

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

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

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

plt.legend(loc=0)

驗證是否是平穩性數據,重復上面的動作

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

tagADF(adf_Data1)

p-value很小,我們的假設失效,因此,diff數據序列符合平穩性要求。

ic = sm.tsa.arma_order_select_ic(

diff,

max_ar=4,

max_ma=2,

ic='hqic'

)

計算結果,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()

遇到一個很詭異的事情,

p = ARMAModel.predict(

start='2017-02-16',

end='2017-03-29'

)

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

試了一下數字index,將就著用吧

p = ARMAModel.predict(

start=98,

end=127

)

還原數據

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()

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。