
Pythonを用いて、1980年から2021年までの約40年間の日経平均株価の年間値幅データを取得してみました。
年間の値幅とは、1年間の高値と安値の差です。(今回は終値ベースで考えているので、日中の高値安値は無視しています。)
まずは結果から。
40年間の年間値幅
こちらが1980年から2021年までの約40年間の日経平均株価の年間値幅グラフです。
1980年代前半は株価自体がまだ低く、年間の値幅も数百円〜2,000円程度でした。80年代後半になり、株価高騰と共に値幅も大きくなっていきます。バブル崩壊の1990年には18,491円の年間値幅を記録しました。
2000年代の株価低迷時代には、年間値幅も4,000円を切る年が多くなっています。2008年のリーマンショックの時は7528円と暴落の影響を受けているのが分かります。
アベノミクスによる株価上昇の影響を受け、2013年からは年間値幅も4,000円を超えてきました。2020年のコロナショックでは、11,015円を記録。
2021年の年間値幅
2020年末には「来年(2021年)は、日本株が来る!!」みたいなことを各所で聞いていて、2021年2月には30年ぶりの3万円台を記録。このままいけば決算発表の6月くらいには3万2000円を目指すはず!!みたいな論調が多くて、その流れになるか??みたいに思っていましたけど、、、
結果的にはレンジ相場です。半導体セクターは活況なれど、市場を牽引してきたファーストリテイリングなどは2月から下落トレンド入り。
菅首相退陣により、株価は一気に急騰。高値更新したものの、買いは続かずに三角持ち合いで1年を終えました。
サンプルプログラム
以下、今回のサンプルプログラムです。処理の流れとしては、stooqで日経平均株価データを取得、終値の高値安値から一年間のレンジを算出。それをcsvファイルとして書き出し。最後はPlotlyでグラフ化します。
#ライブラリをインポート from pandas_datareader.stooq import StooqDailyReader from datetime import datetime import matplotlib.pyplot as plt import pandas as pd import plotly import plotly.express as px #空のリスト作成 year = [] year_range =[] #for文で値幅データ取得 for i in range(1980,2022,1): #株価取得範囲を設定 start = datetime(i, 1, 1) end = datetime(i, 12, 31) #銘柄コードを入力 stock = '^NKX' #株価取得 df = StooqDailyReader(stock, start=start, end=end) df_stock = df.read()['Close'] #期間中の高値安値と値幅 s_max = df_stock.max() s_min = df_stock.min() s_range = df_stock.max()-df_stock.min() s_range = f'{s_range:.02f}' #print(f'{s_range:.02f}') year.append(i) year_range.append(s_range) #リストからデータフレーム作成 df_range = pd.DataFrame(list(zip(year,year_range)), columns = ['Year','Range(yen)']) print(df_range) #データフレームからcsvを作成 df_range.to_csv("N225_range.csv", encoding="UTF-8", index=False)
上のプログラムを実行すると、年別値幅データのcsvが出力されます。
csvの中身はこんな感じです。A列にYear、B列にその年の値幅が入力されています。
次はこのcsvデータを使用して、グラフ化を行います。
#csv読み込み df_range2 = pd.read_csv('N225_range.csv', header=0, usecols=[0,1]) #棒グラフ fig = px.bar(df_range2, x = 'Year' , y = 'Range(yen)' , title = 'N225 Range') #グラフ設定 fig.update_layout(width=1000, height=500, margin=dict(l=30, r=30, b=30, t=50)) #グラフサイズ fig.update_layout(yaxis=dict(range=[0, 20000])) #Y軸レンジ fig.update_layout(yaxis=dict(dtick=2000)) #Y軸目盛幅 #fig.update_layout(font={"family":"Times New Roman"}) #フォント fig.update_layout(font=dict(size=16), title=dict(font=dict(size=20))) #フォントサイズ #グラフ表示 fig.show() #html書き出し plotly.offline.plot(fig,auto_open=False,filename="N225-range.html")
plotlyで棒グラフを作成することができました。