製造メーカー株(トヨタ・日立)でゴールデンクロス戦略をPythonバックテストしてみた

基礎知識・戦略

「トヨタや日立みたいな大型製造メーカー株でアルゴって意味あるの?」って思ってた時期が僕にもありました。出来高が多くて動きが鈍い株にテクニカルが効くのか半信半疑だったんですが、実際にPythonでゴールデンクロス戦略を検証してみたら意外と面白い結果が出たので記事にします。

なぜ製造メーカー株でゴールデンクロスを試したか

日本株で持っている銘柄の中心がトヨタ・日立・パナソニックといった大型製造業です。子供が生まれてから個別銘柄の決算を追う時間がなくなったので、「シンプルなシグナルで動けるなら動く」というスタイルに変えようと思いました。ゴールデンクロスは最もシンプルなトレンドフォロー手法ですが、大型株との相性はあまり調べられていなかったのでやってみました。

ゴールデンクロス戦略とは

短期移動平均線(25日)が長期移動平均線(75日)を下から上に抜けたら買い、逆(デッドクロス)になったら売るというシンプルな手法です。トレンドが発生したときに乗る戦略で、横ばい相場では苦手とされています。

Pythonでデータを取得して移動平均を計算する

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# トヨタ自動車(7203.T)
ticker = "7203.T"
df = yf.download(ticker, start="2022-01-01", end="2025-12-31")
df.columns = [c[0] if isinstance(c, tuple) else c for c in df.columns]

# 移動平均を計算
df["MA25"] = df["Close"].rolling(window=25).mean()
df["MA75"] = df["Close"].rolling(window=75).mean()

# ゴールデンクロス・デッドクロスの判定
df["signal"] = 0
df.loc[df["MA25"] > df["MA75"], "signal"] = 1
df["cross"] = df["signal"].diff()

golden_cross = df[df["cross"] == 1]
dead_cross = df[df["cross"] == -1]

print(f"ゴールデンクロス発生回数: {len(golden_cross)}")
print(f"デッドクロス発生回数: {len(dead_cross)}")

バックテストの実装

ゴールデンクロスで買い、デッドクロスで売るシンプルなバックテストを実装します。

# バックテスト
cash = 1000000  # 100万円
holding = 0
trades = []

for i in range(len(df)):
    row = df.iloc[i]
    if row["cross"] == 1 and cash > 0:  # ゴールデンクロス: 買い
        price = float(row["Close"])
        shares = int(cash / price / 100) * 100  # 単元株
        if shares > 0:
            cost = shares * price
            cash -= cost
            holding = shares
            trades.append({"date": df.index[i], "action": "BUY", "price": price, "shares": shares})
    elif row["cross"] == -1 and holding > 0:  # デッドクロス: 売り
        price = float(row["Close"])
        revenue = holding * price
        profit = revenue - trades[-1]["price"] * holding
        cash += revenue
        trades.append({"date": df.index[i], "action": "SELL", "price": price, "shares": holding, "profit": profit})
        holding = 0

# 保有中のポジションを時価評価
final_value = cash + (holding * float(df["Close"].iloc[-1]) if holding > 0 else 0)
print(f"最終資産: {final_value:.0f}円")
print(f"損益: {final_value - 1000000:.0f}円 ({(final_value/1000000-1)*100:.1f}%)")

日立・パナソニックでも同様に検証

同じコードで日立(6501.T)とパナソニック(6752.T)も検証できます。tickerを変えるだけです。僕が試した結果では、日立はトレンドが出やすい銘柄なのでゴールデンクロス戦略との相性が比較的よく、パナソニックは横ばい期間が長いため成績が安定しにくい傾向がありました。ただしバックテスト期間によって結果は変わるので、あくまで参考程度に見てください。

製造メーカー株でアルゴを使う際の注意点

大型製造業の株は決算・為替・原材料価格の影響を大きく受けます。テクニカルだけでなく、決算発表の前後は特に動きが読みにくくなります。ゴールデンクロス戦略を使う場合は、決算をまたぐポジションは小さめにしておくのが個人的な対策です。僕は日本製鉄の決算前にポジションを持っていて大きな含み損を経験しているので、この点は特に意識するようにしています。

まとめ

製造メーカー株とゴールデンクロス戦略の相性は、銘柄によってまちまちですが全体的には悪くないと感じています。大型株は流動性が高いので、売買コストが小さく、シンプルな手法でも機能しやすいのが利点です。次は25日・75日のパラメータを最適化して、銘柄ごとのベスト設定を探してみようと思います。同じ製造業でもセクターが違うと動き方が変わるのか、気になっています。

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