日米の株式市場は密接に連動していると言われますが、具体的にNYダウの動きが翌日の日経平均にどれほど影響を与えるのでしょうか?
本記事では、Pythonのyfinance
ライブラリを用いて、NYダウが前日比で上がった翌営業日に、日経平均も前日比で上がっている確率を検証します。
1. はじめに:なぜこの分析をするのか?
日本の株式市場が開く前には、米国市場(主にNYダウやナスダック)の終値が出ています。日経平均は、前日の米国市場の動きを織り込んで取引を開始・推移することが多いため、NYダウの上昇が翌日の日経平均にポジティブな影響を与えるという仮説を検証します。
2. 環境準備とデータの取得
まず、必要なライブラリをインポートし、Yahoo FinanceからNYダウ(^DJI
)と日経平均(^N225
)の株価データを取得します。
# 必要なライブラリのインポート
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# --- データの取得設定 ---
TICKER_DOW = '^DJI' # NYダウ
TICKER_NIKKEI = '^N225' # 日経平均
START_DATE = '2015-01-01'
END_DATE = '2025-10-17' # 最新の検証日を設定
# データのダウンロード
dow_data = yf.download(TICKER_DOW, start=START_DATE, end=END_DATE)
nikkei_data = yf.download(TICKER_NIKKEI, start=START_DATE, end=END_DATE)
3. 前日比リターンの計算とデータの整形
次に、各指数の前日比リターン(騰落率)を計算します。株価の騰落は、Close
(終値)に対するpct_change()
メソッドで簡単に求められます。
分析の肝となるのが、**日付の調整(シフト)**です。
- NYダウは日本の取引所が閉まっている間に動きます。
- 日経平均は翌日動きます。
したがって、「NYダウの今日のリターン」を「日経平均の翌日の行」と紐づける必要があります。
# NYダウの前日比リターン
dow_data['DOW_Return'] = dow_data['Close'].pct_change()
# 日経平均の前日比リターン
nikkei_data['NIKKEI_Return'] = nikkei_data['Close'].pct_change()
# 分析に必要なリターンカラムのみを抽出
dow_return_df = dow_data['DOW_Return'].to_frame().dropna()
nikkei_return_df = nikkei_data['NIKKEI_Return'].to_frame().dropna()
# 1. 2つのリターンデータを日付(Index)で結合
# 共通する取引日のみが残る ('inner'結合)
combined_df = pd.merge(
dow_return_df,
nikkei_return_df,
left_index=True,
right_index=True,
how='inner'
)
# 2. NYダウのリターンを【翌営業日】の日経平均のリターンに関連付けるため、1日シフト
# これにより、「Prev_DOW_Return」は「当日(日経平均の営業日)の前日(NYダウの営業日)のリターン」となる
combined_df['Prev_DOW_Return'] = combined_df['DOW_Return'].shift(1)
# シフトによりNaNとなった最初の行を削除し、分析に使うデータセットが完成
combined_df.dropna(inplace=True)
ポイント: $\mathrm{NYダウは}$ 日本の夜間に動くため、DOW_Return.shift(1)
として1日ずらすことで、前日夜間のNYダウの騰落率を**当日(日経平均の営業日)**の行に持ってくる処理が非常に重要です。
4. 条件と結果の判定
データセットが整ったので、「上昇したかどうか」のブール値(True/False)カラムを作成します。
-
条件(前日): $\mathrm{NYダウ}$ が前日比で上昇したか (
Prev_DOW_Return > 0
) -
結果(当日): 翌営業日の日経平均が前日比で上昇したか (
NIKKEI_Return > 0
)
# NYダウが前日比で上がったか (Prev_DOW_Return > 0)
combined_df['Prev_DOW_Up'] = combined_df['Prev_DOW_Return'] > 0
# 翌営業日の日経平均が前日比で上がったか (NIKKEI_Return > 0)
combined_df['NIKKEI_Up'] = combined_df['NIKKEI_Return'] > 0
5. 条件付き確率の計算と結果
最後に、条件付き確率を計算します。これは、「NYダウが上昇した日」という全事象の中で、**「日経平均も上昇した日」**が占める割合です。
$$\text{確率} = \frac{\text{NYダウ上昇 かつ 日経平均上昇 の日数}}{\text{NYダウ上昇 の日数}} \times 100$$
# 1. NYダウが上昇した日(条件が満たされた日)のみを抽出
condition_met_df = combined_df[combined_df['Prev_DOW_Up'] == True].copy()
total_dow_up_days = len(condition_met_df)
# 2. その中で、日経平均も上昇した日をカウント
nikkei_up_after_dow_up_days = len(condition_met_df[condition_met_df['NIKKEI_Up'] == True])
# 3. 確率(勝率)の計算
if total_dow_up_days > 0:
probability = (nikkei_up_after_dow_up_days / total_dow_up_days) * 100
else:
probability = 0
# --- 結果の表示 ---
print("\n--- 条件付き確率の検証結果 ---")
print(f"NYダウが前日比で上昇した営業日の総数: {total_dow_up_days} 日")
print(f"そのうち、翌営業日の日経平均も上昇した日数: {nikkei_up_after_dow_up_days} 日")
print(f"**NYダウ上昇の翌日に日経平均も上昇する確率 (勝率)**: {probability:.2f} %")
実行結果
--- 条件付き確率の検証結果 ---
NYダウが前日比で上昇した営業日の総数: 1372 日
そのうち、翌営業日の日経平均も上昇した日数: 886 日
NYダウ上昇の翌日に日経平均も上昇する確率 (勝率): 64.58 %
6. まとめ
上記の分析期間(2015年1月1日~2025年10月17日)においては、**NYダウが上昇した翌日に日経平均も上昇する確率は約65%**という結果になりました。
これは、日米の市場連動性が非常に高く、NYダウの上昇は翌日の日経平均の上昇を示唆する、ある程度信頼できるシグナルであることを示しています。
ただし、この確率はあくまで過去のデータに基づくものであり、為替の変動(ドル円)や日米間の休場日のずれ、あるいは日本独自の材料(決算発表、金融政策など)によって、この連動性が崩れる日もあることに注意が必要です。
投資判断は自己責任でお願いします。Happy Coding & Investing! ✨