トヨタ・日立でもアルゴは使える?Pythonで日本製造メーカー株のトレンドフォロー戦略を実装してみた
僕はもともと製造業の技術職だったので、トヨタや日立、川崎重工みたいな製造メーカー株には親近感があって投資しているんですが、ふとした疑問が浮かびました。「こういう大型株ってアルゴトレードと相性はいいのか?」と。小型の成長株と違って、機関投資家が大量に保有しているし、値動きも違う気がして。。。実際に調べてみたら意外と相性が良くて、Pythonで実装もシンプルにできたので記事にまとめます。
なぜ製造メーカー株がアルゴと相性がいいのか
流動性が高い
トヨタ(7203)の1日の出来高は何百万株にもなります。流動性が高いということは、スプレッドが小さく、アルゴが出す注文がスリッページを起こしにくいということです。
トレンドが比較的持続しやすい
製造メーカーは決算周期が明確(3月・9月期末が多い)で、機関投資家が一定のサイクルで売買する傾向があります。このため、中期的なトレンドが形成されやすく、トレンドフォロー戦略が機能しやすい環境があります。
ファンダメンタルズとテクニカルが連動しやすい
円安→輸出メーカー増益、という分かりやすい構造があるので、マクロ環境とテクニカル指標の方向が合いやすい局面が多いです。
5銘柄に一括でトレンドフォロー戦略を適用するコード
import yfinance as yf
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
MANUFACTURING_STOCKS = {
'7203.T': 'トヨタ自動車',
'6501.T': '日立製作所',
'7011.T': '三菱重工業',
'6305.T': '日立建機',
'6326.T': 'クボタ',
}
def download_stock_data(tickers, years=3):
end = datetime.now()
start = end - timedelta(days=365 * years)
all_data = {}
for ticker, name in tickers.items():
try:
df = yf.download(ticker,
start=start.strftime('%Y-%m-%d'),
end=end.strftime('%Y-%m-%d'),
progress=False)
if len(df) > 100:
all_data[ticker] = {'name': name, 'data': df[['Close']].copy()}
print(f"✓ {name}({ticker}): {len(df)}日分取得")
except Exception as e:
print(f"✗ {name}({ticker}): エラー - {e}")
return all_data
def trend_follow_backtest(df, fast=20, slow=60):
data = df.copy()
data.columns = ['close']
data['sma_fast'] = data['close'].rolling(fast).mean()
data['sma_slow'] = data['close'].rolling(slow).mean()
data['signal'] = np.where(data['sma_fast'] > data['sma_slow'], 1, 0)
data['returns'] = data['close'].pct_change()
data['strategy_returns'] = data['signal'].shift(1) * data['returns']
data['cum_strategy'] = (1 + data['strategy_returns']).cumprod()
total_days = len(data.dropna())
annual_factor = 252 / total_days
total_return = data['cum_strategy'].iloc[-1] - 1
annual_return = (1 + total_return) ** annual_factor - 1
sharpe = (data['strategy_returns'].mean() /
data['strategy_returns'].std() * np.sqrt(252))
rolling_max = data['cum_strategy'].cummax()
max_drawdown = ((data['cum_strategy'] - rolling_max) / rolling_max).min()
return {
'total_return': round(total_return * 100, 2),
'annual_return': round(annual_return * 100, 2),
'sharpe_ratio': round(sharpe, 3),
'max_drawdown': round(max_drawdown * 100, 2)
}
stocks_data = download_stock_data(MANUFACTURING_STOCKS)
results = []
for ticker, stock in stocks_data.items():
result = trend_follow_backtest(stock['data'])
results.append({
'銘柄': stock['name'], 'ティッカー': ticker,
'年率リターン(%)': result['annual_return'],
'シャープレシオ': result['sharpe_ratio'],
'最大DD(%)': result['max_drawdown']
})
print(pd.DataFrame(results).to_string(index=False))
現在のシグナル状態を確認する
def get_current_signals(stocks_data, fast=20, slow=60):
print("
=== 現在のシグナル状態 ===
")
for ticker, stock in stocks_data.items():
data = stock['data'].copy()
data.columns = ['close']
data['sma_fast'] = data['close'].rolling(fast).mean()
data['sma_slow'] = data['close'].rolling(slow).mean()
latest = data.iloc[-1]
prev = data.iloc[-2]
is_golden = (prev['sma_fast'] <= prev['sma_slow'] and
latest['sma_fast'] > latest['sma_slow'])
is_dead = (prev['sma_fast'] >= prev['sma_slow'] and
latest['sma_fast'] < latest['sma_slow'])
trend = "↑上昇トレンド" if latest['sma_fast'] > latest['sma_slow'] else "↓下降トレンド"
signal_msg = " ⭐ ゴールデンクロス!" if is_golden else (" ⚠️ デッドクロス!" if is_dead else "")
print(f"{stock['name']}({ticker})")
print(f" 現在値: {latest['close']:.0f}円 | {trend}{signal_msg}")
print(f" SMA{fast}: {latest['sma_fast']:.0f}円 | SMA{slow}: {latest['sma_slow']:.0f}円
")
get_current_signals(stocks_data)
製造メーカー株でアルゴをやる上での注意点
決算発表前後は要注意
製造メーカーはEPSの変動が大きく、決算発表日にギャップアップ・ギャップダウンすることがあります。移動平均クロスはこういったイベントドリブンな動きには対応できないので、決算発表日の前後はポジションを小さくするか、エントリーを控える工夫が必要です。
為替感応度が高い銘柄は注意
トヨタや三菱重工のような輸出比率が高い銘柄は、ドル円の動きとの連動性が高いです。FXのポジションと日本株のポジションが同じ方向(ロング円安ポジション)になってしまうことがあるので、ポートフォリオ全体のリスクを把握しておきましょう。
流動性の低い時間帯に注意
東証の前場開始直後や後場終了間際は板が薄くなることがあります。アルゴで自動発注する場合は指値注文を使う設計にしたほうが安全です。
まとめ:大型製造メーカー株はアルゴと相性良し
実際にコードを動かしてみると、トヨタや日立のような大型製造メーカー株は、流動性の高さとトレンドの持続性から、移動平均クロス戦略が意外と機能することが分かりました。特に20日/60日の組み合わせは、月次・四半期サイクルと合っていて、理論的な裏付けもあるので僕は気に入っています。
個人的には次のステップとして、決算発表日のカレンダーを自動取得して、決算前後のポジション管理を自動化することを試みたいと思っています。製造メーカー株が好きな方、ぜひPythonでアルゴを試してみてはいかがでしょうか。思ったよりシンプルに実装できますよ。

