LoginSignup
6
11

More than 3 years have passed since last update.

日経平均株価が上がった次の日に上がる銘柄を見つけたい

Last updated at Posted at 2020-12-09

<あらすじ>
日経平均株価:世界で3番目の規模を誇る東京証券取引所、その1部上場企業から選ばれし225銘柄の平均株価

日本の株式市場を代表する株価指数ならば、その値動きにつられて一緒に上がる(下がる)銘柄があってもいいのではないか?
この疑問の答えを探すために、日経平均株価と全225構成銘柄,TOPIX500銘柄の値動きを比較しました。

【結論】
武田薬品/村田製作所は、日経平均株価が上がった翌日76%の確率で上がる
・日経平均の値動きに個別銘柄がつられる確率よりも、前日に個別銘柄が上がって翌日に日経平均が上がる確率が高い
 ↓
追加検証:225構成銘柄の過半数が上がった、翌日に日経平均株価は上昇する確率が高いのか

日経平均株価

Figure 2020-12-07 011813.png

絶好調の日経平均株価について、前回に引き続き自分の小さな疑問を検証してみました。

疑問:日経平均株価につられて一緒に上がる(下がる)銘柄が存在するのか

<過去記事>
日経225全銘柄の投資効率を検証
日経平均株価の30%は5銘柄で決まることを投資先選びに生かせるか?

検証方法

早速ですが、検証方法はシンプルです。
以下の3パータンで日経平均株価が上昇(下降)したときに、ある銘柄が上昇(下降)したかを確認します。

  1. 日経平均株価が上昇した、同じ日に上昇したか
  2. 日経平均株価が上昇した、次の日に上昇するか
  3. 日経平均株価が上昇した、前の日に上昇していたか

同じ方向に動いた場合1ポイントとし、ある期間の合計ポイントを全225構成銘柄とTOPIX500銘柄の各銘柄で求めます。
※下降した場合も同様

【例】
▼ パターン1のとき(合計ポイント:2points)
example1.png

▼ パターン2/パターン3のとき(ともに合計ポイント:2points)
example2.png

プログラム

検証方法がシンプルなため簡単ですが、プログラムを記載します。

まず、用意した日経平均株価と全225構成銘柄の終値から、値動きを計算します。
計算には簡単にテクニカル分析ができるライブラリTA-Libを使用しました。
Pythonで株価の分析をしたい人には、大変ありがたいライブラリです!
※ 使い方もこちらなどたくさんの方が紹介してくれています

今回の検証では上昇/下降したかで分類するため具体的な値は必要ありません。
値動きの比率を求める関数「talib.roc()」を用いて変化率を求めた後、
上昇した場合 : 1
下降した場合 :-1
変化がない場合: 0
に置き換えます。

次に、対象の日経平均株価と各銘柄の値動きが一致したら1ポイントとfor文で回しました。(力技ですが...)
最後に各銘柄の合計ポイントを求めます。

※ Pythonに慣れていないため拙いですがご容赦ください。
また、株価データの取得プログラムについては以前書いたこちらをご参照ください。

n225_comparison.py
import pandas as pd
import talib as ta

# 用意した終値のデータを読み取り(6ヵ月分)
start="2020-6"
stocks = pd.read_csv("nikkei225_all_code.csv", engine="python", names=("code","name"))
close = pd.read_csv("n225_close_1year.csv",index_col=0, parse_dates=True)
close = close[start:]

# Ta-Libのroc()関数で値動きの変化率を取得
roc = pd.DataFrame(index=close.index)
for stock in close.columns:
    roc[stock]=ta.ROC(close[stock],timeperiod=1)

# 具体的な値は必要ないため値動きを(1,-1,0)に分類
for i in range(len(roc.columns)):
    roc.loc[roc[roc.columns[i]] > 0 ,roc.columns[i]]= 1
    roc.loc[roc[roc.columns[i]] < 0 ,roc.columns[i]]= -1

# 一致していたらポイントを加算
point = roc.copy()
for i in range(1,len(point.index)):
    for j in range(1,len(point.columns)):
        if(point.iat[i,j] == point.iat[i,0]):
            point.iat[i,j] = 1
        else:
            point.iat[i,j] = 0
stocks["point"] = [sum(point.iloc[1:,i]) for i in range(len(point.columns))]

以下はパターン2/パターン3の
2. 日経平均株価が上昇した、次の日に上昇するか
3. 日経平均株価が上昇した、前の日に上昇していたか
を計算するプログラムです。比較する対象をずらしただけで内容は同じです。

n225_comparison.py
# パターン2:日経平均と次の日のある銘柄の株価と比較
point_tmr = roc.copy()
for i in range(2,len(point_tmr.index)):
    for j in range(1,len(point_tmr.columns)):
        if(point_tmr.iat[i,j] == point_tmr.iat[i-1,0]):
            point_tmr.iat[i,j] = 1
        else:
            point_tmr.iat[i,j] = 0
stocks["point_tmr"] = [sum(point_tmr.iloc[1:-1,i]) for i in range(len(point_tmr.columns))]

# パターン3:日経平均と前の日のある銘柄の株価と比較
point_ytd = roc.copy()
for i in range(1,len(point_ytd.index)-1):
    for j in range(1,len(point_ytd.columns)):
        if(point_ytd.iat[i,j] == point_ytd.iat[i+1,0]):
            point_ytd.iat[i,j] = 1
        else:
            point_ytd.iat[i,j] = 0
stocks["point_ytd"] = [sum(point_ytd.iloc[2:,i]) for i in range(len(point_ytd.columns))]

※ 日経平均株価とTOPIX500銘柄の比較も同様なため省略

結果

【パラメータ】
検証期間:(2020年12月4日以前の直近)6ヵ月, 3ヵ月, 1ヵ月 
比較銘柄:日経平均225銘柄, TOPIX500銘柄

パターン1. 日経平均株価が上昇した、同じ日に上昇したか
パターン2. 日経平均株価が上昇した、次の日に上昇するか
パターン3. 日経平均株価が上昇した、前の日に上昇していたか

【結果】
下に検証結果の表を記載してありますが、ざっとまとめると
・検証期間が短いほど1位の得点率が高く、パターン2よりパターン3の方が1位の得点率/中央値が高い
・直近1ヵ月、日経平均株価が上がった(下がった)翌日に、76%の確率で武田薬品/村田製作所は上がる(下がる)
・直近1ヵ月、三井金属/京都銀行/FUJIが上がった(下がった)翌日に、81%の確率で日経平均株価は上がる(下がる)
・日経平均225銘柄とTOPIX500銘柄では、日経平均225銘柄の方が中央値が高い
※ 合計ポイントの分布は記事の最後に記載

「パターン2よりパターン3の方が得点率/中央値が高い」
「日経平均225銘柄の方が中央値が高い」
⇒ 日経平均の値動きに個別銘柄がつられる確率よりも、前日に個別銘柄が上がって翌日に日経平均が上がる確率が高い

225銘柄の過半数が上昇(下降)した、次の日に日経平均株価は上昇(下降)する確率が高い??
という疑問がさらに生じてしまったので、追加検証を行いました。

▼パターン2/3の得点率1位の銘柄(合計ポイント/検証期間)
top_stocks.png
▼結果のまとめ(全ての検証での中央値)
result_median.png

追加検証

225銘柄の過半数が上昇(下降)した、次の日に日経平均株価は上昇(下降)する確率が高い??
※下降した場合も同様

【例】
1日:全225銘柄のうち150銘柄が上昇した
2日:日経平均株価が上昇した
⇒ 1ポイント獲得

2日:全225銘柄のうち130銘柄が下降した
3日:日経平均株価が上昇した
⇒ 0ポイント               結果. 得点率:50%

少し複雑になりますが、「〇%以上偏った場合のみ比較する」という条件を付けたパターンでも検証しました。
【比較条件:60% のとき】
1日:全225銘柄のうち150銘柄(67%)が上昇した
2日:日経平均株価が上昇した
⇒ 1ポイント獲得

2日:全225銘柄のうち130銘柄(57%)が下降した
3日:比較しない(日経平均株価に関わらず)
無視                 結果. 得点率:100%

【パラメータ】
検証期間:(2020年12月4日以前の直近)1ヵ月, 3ヵ月, 6ヵ月
比較条件:50%, 55%, 60%, 70%

※ ポイント算出のプログラムはほとんど変化がないため省略します。

【結果】
得点率が日経平均株価と225銘柄の過半数の値動きがどれだけ一致したかを表します。
期間が長くなると比較条件に関わらず50%に収束していますね...

▼検証結果の一覧
追加検証.png

まとめ

「日経平均株価の値動きにつられて一緒に上がる(下がる)銘柄があるのか」という疑問から、日経平均株価と全225構成銘柄,TOPIX500銘柄の値動きを比較しました。
すると、日経平均の値動きに個別銘柄がつられる確率よりも、前日に個別銘柄が上がって翌日に日経平均が上がる確率が高いのではないかと、さらに疑問が生じました。

追加検証の結果から、短期的には上昇(下降)した銘柄が多い次の日に、日経平均株価が上昇(下降)することがわかります。
しかし、検証期間を長くすると比較タイミングに偏りがあった場合でも50%に収束することが確認できます。
前日に構成銘柄の70%が上がっても、翌日の日経平均株価には関係がないという事実は面白いです。

<結論>
疑問:225銘柄の過半数が上昇(下降)した、次の日に日経平均株価は上昇(下降)する確率が高い??
回答:個別銘柄の前日の値動きは、翌日の日経平均株価の値動きに影響しない

次は

今回は日経平均株価が個別銘柄に影響を与えるのかを知るために1日ごとのデータで検証しました。
しかし、投資の世界では1日という期間は大変長く、個別銘柄に及ぶ影響を読み取れないのではないかと考えました。
もしくは、日経平均株価の値動きの影響を受けるのはもっと小さな銘柄なのでしょうか。(そもそも受けないのかも)
余裕があれば「日経平均株価が上がった5分後に上がる銘柄を見つけたい」という検証をしてみようかなと思います。

⇒「日経平均株価が上がった5分後に上がる銘柄を見つけたい」検証しました。興味がございましたら是非

いつかは「○○戦略でいくら投資したらいくら利益が出た」という内容で書けるよう、良い戦略を見つけ出したいですね...

今後の予定
・「バブル崩壊に備えS&P500が暴落したときに上昇する銘柄/インデックス/金融商品の調査」
・「1日の中で最も株価が下がりやすい時間帯があるのか調査」

合計ポイントの分布

▼日経平均225銘柄の合計ポイント分布
result_n225_all.png
▼TOPIX500銘柄の合計ポイント分布
result_topix500_all.png

6
11
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
6
11