J-Quants APIで製造メーカー株のMACDを自動チェックする【Python実装・トヨタ・日立対応】

トヨタの決算前後、チャートを見る時間がなくて乗り遅れたことが何度もあった。子供が寝た後にスマホで確認しても、そのときには動きが終わってたりする。だから「製造メーカー株のMACDが動いたら自動で通知してくれる仕組み」を作った。今回はJ-Quants APIとPythonで実装した方法を紹介する。

なぜJ-Quants APIを使うのか

yfinanceでも日本株は取れるけど、J-Quantsは東証公式で調整済みデータが取れる点が強い。無料プランでも過去データが使える(12週間遅延あり)。製造メーカー株は流動性が高いので、多少遅延があってもシグナルの検証には十分使える。

実装コード

import jquantsapi
import pandas as pd
import numpy as np

# J-Quants APIクライアント初期化
client = jquantsapi.Client(
    mail_address="your@email.com",
    password="your_password"
)

def get_ohlcv(code: str, start: str, end: str) -> pd.DataFrame:
    """証券コードの日足OHLCVを取得"""
    df = client.get_price_range(
        code=code,
        date_yyyymmdd_from=start.replace("-", ""),
        date_yyyymmdd_to=end.replace("-", "")
    )
    df["Date"] = pd.to_datetime(df["Date"])
    return df.sort_values("Date").reset_index(drop=True)

def calc_macd(close: pd.Series, fast=12, slow=26, signal=9):
    """MACDを計算する"""
    ema_fast = close.ewm(span=fast, adjust=False).mean()
    ema_slow = close.ewm(span=slow, adjust=False).mean()
    macd_line = ema_fast - ema_slow
    signal_line = macd_line.ewm(span=signal, adjust=False).mean()
    histogram = macd_line - signal_line
    return macd_line, signal_line, histogram

def check_macd_cross(code: str, name: str):
    """MACDのゴールデン/デッドクロスを検出"""
    from datetime import datetime, timedelta
    end = datetime.today().strftime("%Y-%m-%d")
    start = (datetime.today() - timedelta(days=200)).strftime("%Y-%m-%d")
    
    df = get_ohlcv(code, start, end)
    macd, sig, hist = calc_macd(df["AdjustmentClose"])
    
    # 直近2日のクロス判定
    prev_diff = macd.iloc[-2] - sig.iloc[-2]
    curr_diff = macd.iloc[-1] - sig.iloc[-1]
    
    if prev_diff < 0 and curr_diff >= 0:
        return f"✅ {name}({code}): ゴールデンクロス発生!"
    elif prev_diff > 0 and curr_diff <= 0:
        return f"⚠️ {name}({code}): デッドクロス発生!"
    else:
        return f"  {name}({code}): シグナルなし (MACD差={curr_diff:.2f})"

# 製造メーカー株リスト
stocks = [
    ("7203", "トヨタ自動車"),
    ("6501", "日立製作所"),
    ("5401", "日本製鉄"),
    ("7011", "三菱重工業"),
    ("6752", "パナソニック"),
]

print("=== 製造メーカー株 MACDチェック ===")
for code, name in stocks:
    result = check_macd_cross(code, name)
    print(result)

LINE通知と組み合わせる

このスクリプトを毎朝自動実行してクロスが出たときだけLINEに通知するようにした。子供が起きる前の5分で確認できるので、見逃しがなくなった。毎日チャートを見なくてよくなったのが一番の収穫だと思う。

次はMACDだけじゃなく、RSIとの組み合わせシグナルも試してみる予定。

タイトルとURLをコピーしました