3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで株式市場の「稲妻が輝く瞬間」について可視化してみる。

Last updated at Posted at 2021-09-04

PythonのPandasとMatplotlibを使って、長期投資のメリットについて考えてみます。

背景

「敗者のゲーム」という投資の有名な本において、以下のような内容が書かれています。

  • 株式市場には「稲妻が輝く瞬間」があり、この瞬間に市場に居合わせるためには長期投資が必要
  • 短期トレードにおいて、この「稲妻が輝く瞬間」に居合わせることは確率的に不可能

これらを根拠に長期投資が勧められています。このことをPythonでデータを見ながら確かめてみます。

データの読み込み

データは何でもよいですが、上場インデックスファンドTOPIX(1308)の2011/7/22~2021/7/21のデータを使用します。

# データ読み込み
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

file = 'data/FTOPIX.xlsx'
df = pd.read_excel(file)
df.head()

image.png

データの加工

最初の時点を1として、現在の株価が何倍になっているかを計算します。まずは前日比率を計算し、.cumprodを使って、その累積を求めています。

# 前日比率の累積を計算
df["終値(前日)"] = df["終値"].shift(1)
df['前日比率'] = df['終値'] / df['終値(前日)']
df['前日比率累積'] = df['前日比率'].cumprod()

# 必要な列のみ抽出
df = df[['日付', '終値', '前日比率', '前日比率累積']]
df.head()

image.png

時系列データの可視化

株価の時系列データを可視化します。

plt.figure(figsize = (15, 3))
plt.plot(df['日付'], df['終値'])
plt.title('終値の推移')
plt.show()

image.png

最も良い5日を逃すとどうなるか検証

株式市場には「稲妻が輝く瞬間」があるとのことなので、これを最も前日比率が高い5日間とする。そして、最も前日比率が高い5日間を逃してしまうと、リターンがどのように変化するかを検証する。

# df2において、前日比率のベスト5を1に置換
df2 = df.copy()
df2 = df2.sort_values(by = '前日比率', ascending = False)

# 先頭5行の2列目を1に変更
df2.iloc[:5 ,2] = 1
df2.head(7)

image.png

再度日付で並べ替えて、前日比率の累積を計算しなおします。これで準備完了です。

# 日付で並べ替える
df2 = df2.sort_values(by='日付')

# 前日比率の累積を計算しなおす
df2['前日比率累積'] = df2['前日比率'].cumprod()
df2.head()

image.png

比較

元のデータと、ベスト5日を逃した場合のリターンを比較します。.tailを使うだけで確認できます。

# 元データ
df.tail()

image.png

# ベスト5を逃した場合
df2.tail()

image.png

ずっと保有していれば、2.26倍になっていたのに、ベスト5日を逃してしまうだけで1.66倍までリターンが下がってしまうことが分かります。

結果のグラフ化

計算した結果をグラフ化します。「稲妻が輝く瞬間」は暴落の後にくる傾向があります。つまり暴落時に手放してしまうと、「稲妻が輝く瞬間」を逃してしまい、リターンが下がってしまいます。

# ベスト5のみのデータを抽出
df3 = df.iloc[df.sort_values(by = '前日比率', ascending = False).index[:5], :]

# 前日比率累積をグラフ化
plt.figure(figsize = (15, 3))
plt.plot(df['日付'], df['前日比率累積'], alpha = 0.8)
plt.plot(df2['日付'], df2['前日比率累積'], label = '最も良い5日を逃した場合', alpha=0.8)

# ベスト5の点をプロット
plt.scatter(df3['日付'], df3['前日比率累積'], c = 'black', label = '最も良い5日')

plt.title('終値の推移')
plt.legend()
plt.show()

image.png

まとめ

  • 2447日中ベストな5日を逃すだけで、リターンが2.26倍から1.66倍まで下がってしまう
  • このベストな5日は暴落の後にくるので、暴落して手放してしまうと逃してしまう

以上より、ベストな5日を当てることは難しいので、ベストな5日を享受できるように、長期で保有することは有効である。

参考

株を長期保有することのメリットについては、以下の分析でもふれています。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?