2020年08月11日
【Pythonで株価予測 (1)】Pythonの勉強がてら、株価予測プログラムを作ってみる
pythonは全く使っていませんが、さすがにそろそろ覚えないと色々と不都合が生じてきました。
そこで、pythonの勉強がてら、株価予想のプログラムを作ってみます。というか、色々なウェブサイトから引っ張ってきて、貼り付けているだけですが。
時系列予想のライブラリとしては、Prophetを使います。
持っているデータはこんな感じ。綜合警備保障(2331)です。
左から、日付、始値、高値、安値、終値、出来高です。最後に空白がはいっているため、pandasで読み込んだ際、NaNの列が出来てしまいます。使うのは日付と終値だけです。
うーん、予想できているのか、いないのか。8月中はパッとしないが、9月から上がるのかな。
自分で作っているデータは出来高0の日は終値が0となっていたり(そんな銘柄は無視してもよいかとも思いますが)、株式分割・併合で不連続が生じてしまっていますので、それを修正する処理を今後加えたいと思います。
そこで、pythonの勉強がてら、株価予想のプログラムを作ってみます。というか、色々なウェブサイトから引っ張ってきて、貼り付けているだけですが。
時系列予想のライブラリとしては、Prophetを使います。
持っているデータはこんな感じ。綜合警備保障(2331)です。
2006/1/4 1810 1822 1806 1815 74000
2006/1/5 1830 1834 1810 1815 314000
2006/1/6 1845 1859 1835 1847 317900
:
2020/8/5 5010 5040 4970 5020 171600
2020/8/6 4970 5010 4940 4960 160600
2020/8/7 4975 5050 4975 5010 119500
左から、日付、始値、高値、安値、終値、出来高です。最後に空白がはいっているため、pandasで読み込んだ際、NaNの列が出来てしまいます。使うのは日付と終値だけです。
import os
import sys
import pandasas pd
from fbprophet import Prophet
import matplotlib.pyplotas plt
code = str(2331)
read_data = pd.read_csv('data/'+code, sep=' ', \
names=['ds', 'hajime', 'takane', 'yasune', 'y', 'dekidaka', 'NaN'])
# 直近500日ぐらいのデータを使用する
analysis_data = read_data.loc[:, ['y', 'ds']].iloc[-500:, :].reset_index()
analysis_data['ds'= analysis_data['ds'].str.replace('/', '-')
Maximum_value = analysis_data['y'].max()
analysis_data['cap'] = Maximum_value
model = Prophet(growth='logistic')
model.fit(analysis_data)
future = model.make_future_dataframe(periods=60, freq = 'd')
future['cap'] = Maximum_value
future = future[ future['ds'].dt.weekday < 5 ]
forecast = model.predict(future)
# 図を作成
fig = plt.figure(figsize=(20,5))
plt.plot(forecast['yhat'][:],label='Prediction ('+code+')')
plt.plot(analysis_data['y'][:],label='True ('+code+')')
plt.legend()
fig.savefig(code + '.png')
# 直近30日の平均株価に対し、予想値の上昇率を計算
Mean = analysis_data['y'].iloc[-30:].mean()
Fct_value = forecast['yhat'].iat[-1]
Rate = (Fct_value - Mean)/Mean*100
output_string = code+': ' \
+str(int(Mean))+' -> ' + str(int(Fct_value)) + ' (' + str(int(Rate)) + '%)'
if Rate > 10.0:
print('!!! ', output_string)
elif Rate > 5.0:
print('!! ', output_string)
else:
print(output_string)
うーん、予想できているのか、いないのか。8月中はパッとしないが、9月から上がるのかな。
自分で作っているデータは出来高0の日は終値が0となっていたり(そんな銘柄は無視してもよいかとも思いますが)、株式分割・併合で不連続が生じてしまっていますので、それを修正する処理を今後加えたいと思います。
【このカテゴリーの最新記事】
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10110258
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック