半導体セクターはNVIDIA・TSMC・SMCIなど注目銘柄が多く、AIブームとともに急騰する銘柄が続出しています。この記事では半導体関連株を一括で監視・分析するPythonコードを紹介します。
監視対象の半導体銘柄リスト
import yfinance as yf
import pandas as pd
import numpy as np
from datetime import datetime
# 半導体関連銘柄リスト
SEMICONDUCTOR_STOCKS = {
# 米国
"NVDA": "NVIDIA(GPU/AI)",
"AMD": "AMD(CPU/GPU)",
"INTC": "Intel(CPU)",
"QCOM": "Qualcomm(モバイル)",
"AVGO": "Broadcom(通信チップ)",
"MU": "Micron(メモリ)",
"AMAT": "Applied Materials(製造装置)",
"LRCX": "Lam Research(製造装置)",
"KLAC": "KLA(検査装置)",
"SMCI": "SuperMicro(AIサーバー)",
# 日本
"6857.T": "アドバンテスト(テスター)",
"8035.T": "東京エレクトロン(製造装置)",
"6723.T": "ルネサスエレクトロニクス",
"6502.T": "東芝(半導体メモリ)",
}
print(f"監視銘柄数: {len(SEMICONDUCTOR_STOCKS)}")
一括データ取得と基本分析
def get_semiconductor_overview(tickers_dict, period="1mo"):
"""半導体株の一覧表を生成"""
tickers = list(tickers_dict.keys())
data = yf.download(tickers, period=period, progress=False)["Close"]
results = []
for ticker, name in tickers_dict.items():
if ticker not in data.columns:
continue
prices = data[ticker].dropna()
if len(prices) < 2:
continue
current = prices.iloc[-1]
prev = prices.iloc[-2]
change_1d = (current / prev - 1) * 100
change_period = (current / prices.iloc[0] - 1) * 100
vol = prices.pct_change().std() * np.sqrt(252) * 100
results.append({
"Ticker": ticker,
"銘柄名": name,
"現在値": round(current, 2),
"前日比(%)": round(change_1d, 2),
f"期間騰落率(%)": round(change_period, 2),
"年率ボラ(%)": round(vol, 1),
})
df = pd.DataFrame(results).set_index("Ticker")
df = df.sort_values("期間騰落率(%)", ascending=False)
return df
overview = get_semiconductor_overview(SEMICONDUCTOR_STOCKS)
print(overview.to_string())
SMH(半導体ETF)との相関分析
def analyze_vs_etf(tickers, etf="SMH", period="1y"):
"""半導体ETFとの相関を分析"""
all_tickers = list(tickers) + [etf]
data = yf.download(all_tickers, period=period, progress=False)["Close"]
returns = data.pct_change().dropna()
correlations = returns.corr()[etf].drop(etf).sort_values(ascending=False)
print(f"SMH(半導体ETF)との相関係数:")
print(correlations.round(3))
return correlations
us_tickers = [t for t in SEMICONDUCTOR_STOCKS if ".T" not in t]
analyze_vs_etf(us_tickers)
モメンタムスクリーニング
def momentum_screener(tickers_dict):
"""モメンタムが強い銘柄をスクリーニング"""
results = []
for ticker, name in tickers_dict.items():
df = yf.download(ticker, period="6mo", progress=False, auto_adjust=True)
if len(df) < 20:
continue
prices = df["Close"]
r_1m = (prices.iloc[-1] / prices.iloc[-22] - 1) * 100
r_3m = (prices.iloc[-1] / prices.iloc[-66] - 1) * 100
r_6m = (prices.iloc[-1] / prices.iloc[0] - 1) * 100
ma20 = prices.rolling(20).mean().iloc[-1]
ma50 = prices.rolling(50).mean().iloc[-1] if len(prices) >= 50 else None
above_ma20 = prices.iloc[-1] > ma20
results.append({
"Ticker": ticker, "銘柄名": name,
"1M騰落(%)": round(r_1m, 1),
"3M騰落(%)": round(r_3m, 1),
"6M騰落(%)": round(r_6m, 1),
"MA20上": above_ma20,
})
df = pd.DataFrame(results).set_index("Ticker")
buy_signals = df[(df["1M騰落(%)"] > 5) & (df["MA20上"] == True)]
print("買いシグナル銘柄:")
print(buy_signals.sort_values("1M騰落(%)", ascending=False))
return df
momentum_screener(SEMICONDUCTOR_STOCKS)
リアルタイム監視ループ
import time
from datetime import datetime
def realtime_monitor(tickers_dict, interval=60, alert_threshold=3.0):
"""
指定間隔で株価を監視し、急変時にアラートを表示
alert_threshold: アラートを出す前日比の閾値(%)
"""
tickers = list(tickers_dict.keys())
print("半導体株監視開始(Ctrl+Cで停止)")
print(f"監視銘柄: {len(tickers)}銘柄, 更新間隔: {interval}秒")
try:
while True:
now = datetime.now().strftime("%H:%M:%S")
data = yf.download(tickers, period="2d", progress=False)["Close"]
alerts = []
for ticker in tickers:
if ticker not in data.columns:
continue
prices = data[ticker].dropna()
if len(prices) < 2:
continue
change = (prices.iloc[-1] / prices.iloc[-2] - 1) * 100
if abs(change) >= alert_threshold:
alerts.append(f" [{ticker}] {change:+.1f}% {tickers_dict[ticker]}")
if alerts:
print(f"\n[{now}] アラート発生!")
for a in alerts:
print(a)
else:
print(f"[{now}] 監視中... 異常なし")
time.sleep(interval)
except KeyboardInterrupt:
print("監視を終了しました")
# 実行(実際に使う場合)
# realtime_monitor(SEMICONDUCTOR_STOCKS, interval=60, alert_threshold=3.0)
まとめ
Pythonで半導体関連株を一括監視することで、急騰・急落の早期発見やモメンタム分析が自動化できます。SMHなどのETFと組み合わせてセクター全体の動向も把握しましょう。

