トランプ関税イベント投資

この記事のポイント

  • トランプ関税とは何か?その背景と影響をわかりやすく解説
  • Pythonとyfinanceを使ったイベント投資の基本フローをステップごとに紹介
  • サンプルコードの詳しい解説:初心者でも安心のコメント付き
  • 結果の読み方と実践ポイント:summary表・累積リターンの見方を丁寧に解説
  • 発展的なアイデア:5つの応用例でプロジェクトを拡張

1. トランプ関税とは?――イベント投資の基礎

イベント投資は、特定の出来事(イベント)が市場に与える価格変動を利用する投資手法です。企業決算、IPO、政策発表などが代表例ですが、本記事では米国トランプ政権が打ち出した関税政策、いわゆる「トランプ関税」を取り上げます。

1.1 トランプ関税の概要

  • Section 232:国家安全保障を理由に鉄鋼・アルミの輸入に25%関税を設定
  • Section 301:知的財産権侵害を理由に中国製品に段階的に最大25%の関税を課す調査
  • EO 14257:相互関税の仕組みを導入し、低額Eコマース商品の課税を相手国にも適用

関税発表直後は情報が市場に行き渡らず、投資家のポジション調整や需要・供給のひずみが生じるため、短期的に大きな価格変動が生まれやすいのが特徴です。

1.2 イベント投資のメリットとリスク

イベント投資のメリットは、事前に発表日がわかっている点です。そのため、準備を整えた上でエントリーしやすく、発表直後~数営業日の短期リターンを狙うことができます。ただし、リスクも存在します。

  • 発表内容が市場の期待と異なると逆方向に大きく動く
  • フェイクニュースや交渉決裂など、ノイズ要因が混入
  • 流動性低下でスリッページが拡大

本記事で紹介するリスク管理の手法:オプションやペアトレード、VIXフラグなども後述します。

2. サンプルプロジェクトの全体フロー

以下の6ステップで、Pythonによるイベント投資のバックテストを実施します。

  1. 対象イベント日のリスト化
  2. 投資対象銘柄の選定(ロング/ショート)
  3. yfinanceで株価データ取得
  4. 発表翌営業日~5営業日の騰落率計算
  5. summary表によるパフォーマンス集計
  6. 累積リターン計算とグラフ化

3. サンプルスクリプト(コード全体)

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime, timedelta

# 1) イベント日と銘柄リスト定義
events = {
    "232_reinstate": datetime(2025, 2, 11),  # Section 232 再適用
    "301_shipping":  datetime(2025, 2, 21),  # Section 301 調査開始
    "EO14257_ec":    datetime(2025, 4, 2),   # EO 14257 相互関税
}
# ロング銘柄(恩恵が想定される銘柄)
longs  = ["X","AA","XLB","MATX","DAC","AMZN","SHOP","GOOGL","META","ALB","LAC"]
# ショート銘柄(逆張りで狙う銘柄)
shorts = ["F","GM","CAT","AMKBY","HPGLY","BABA","PDD","TME","TSLA","BYDDF"]

# 2) データ取得期間設定
dt_min     = min(events.values()) - timedelta(days=15)
end_date   = datetime(2025, 4, 18)
df = pd.DataFrame()

# ティッカーごとに個別取得して安定性を確保
for tk in set(longs + shorts):
    try:
        data = yf.download(tk, start=dt_min, end=end_date)["Close"]
        if not data.empty:
            df[tk] = data
        else:
            print(f"Warning: {tk} のデータが空のためスキップ")
    except Exception as e:
        print(f"Error downloading {tk}: {e}")

# 全欠損列を削除し、成功銘柄のみリスト更新
df = df.dropna(axis=1, how="all")
longs  = [tk for tk in longs  if tk in df.columns]
shorts = [tk for tk in shorts if tk in df.columns]

# 3) リターン計算: 発表翌営業日付けエントリー、5営業日後エグジット
records = []
for name, ev in events.items():
    for side, tickers in [("Long", longs), ("Short", shorts)]:
        for tk in tickers:
            try:
                idx   = df[tk].index.get_loc(ev, method="bfill")
                entry = df[tk].index[idx+1]
                exit_ = df[tk].index[min(idx+5, len(df)-1)]
            except KeyError:
                continue
            ret = df[tk].loc[exit_] / df[tk].loc[entry] - 1
            if side == "Short":
                ret = -ret  # 符号反転で逆張り
            records.append({
                "event":  name,
                "side":   side,
                "ticker": tk,
                "entry":  entry.date(),
                "exit":   exit_.date(),
                "return": ret*100,
            })
res = pd.DataFrame(records)

# 4) summary 表集計
summary = res.groupby(["event","side"])["return"].agg(["mean","std","count"])
print("=== Backtest Summary ===")
print(summary)

# 5) 日次累積リターン計算
cum_df = pd.DataFrame(index=range(1,6))
for name, ev in events.items():
    ev_pos = df.index.get_indexer([ev], method="bfill")[0]
    for side, tickers in [("Long", longs), ("Short", shorts)]:
        window = df[tickers].iloc[ev_pos+1:ev_pos+1+6]
        if window.shape[0] < 2:
            cum_df[f"{name}_{side}"] = [np.nan]*5
            continue
        base = window.iloc[0]
        cum = window.div(base).subtract(1)
        if side == "Short": cum = -cum
        avg = cum.mean(axis=1)*100
        series = avg.iloc[1:6].reindex(range(1,6), fill_value=np.nan).values
        cum_df[f"{name}_{side}"] = series

# 6) グラフ化
plt.figure(figsize=(10,6))
for col in cum_df.columns:
    plt.plot(cum_df.index, cum_df[col], marker='o', label=col)
plt.xlabel("Days from Event")
plt.ylabel("Cumulative Return (%)")
plt.title("Average Cumulative Returns by Event (Real Data)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

4. コード解説(初心者向け)

4.1 yfinanceによるデータ取得

yf.downloadは、Yahoo! Financeから指定期間の株価データを取得する関数です。
ここでは銘柄ごとにループして取得し、万が一データが欠損すると空のSeriesになるため、個別取得で安定性を高めています。

4.2 DataFrameの前処理

  • dropna(axis=1, how="all"):全てNaNの列を削除し、取得失敗銘柄を排除
  • 成功した銘柄のみlongs/shortsリストに残すことで、以降の計算でエラーを回避

4.3 リターン計算の仕組み

発表日evの翌営業日をEntry、5営業日目をExitと定義し、
単純騰落率 = (Exit価格 / Entry価格) - 1で計算。
ショートの場合はこの値にマイナスをかけます。

4.4 summary表の見方

groupbyagg(["mean","std","count"])で、
mean:平均リターン(%)
std:リターンのばらつき(標準偏差)
count:サンプル数
を出力します。サンプル数が少ない場合は信頼度が下がるので注意。

4.5 累積リターン計算とグラフ化

各イベントのEntry価格を基準に、div(base).subtract(1)で日次累積リターンを計算。
NaNを埋める処理で必ず5日分の系列を確保し、matplotlibで線とマーカー付きプロットを生成します。

5. 実行結果の読み方

【summary表】
– 平均リターンがプラス:短期投資で利益期待
– 標準偏差が小さい:安定した反応

=== Backtest Summary ===
mean std count
event side
232_reinstate Long 1.698326 3.312969 11
Short -3.191418 2.579495 10
301_shipping Long -2.056686 4.079904 11
Short 1.295832 5.104684 10
EO14257_ec Long 2.217809 8.178225 11
Short 7.492670 7.505751 10

【累積リターングラフ】
– 5日目までの上昇幅を比較し、効果の持続性を評価
– イベント間のパフォーマンス差を視覚的に把握

トランプ関税

6. 発展的な応用アイデア

ここでは、基本的なバックテストの先に進めるための実践的なアイデアを5つご紹介します。各アイデアはコードへの組み込みや追加開発によって、さらに高いパフォーマンスやリスク管理の強化が可能です。

  1. ホールド期間の最適化
    ・複数のホールド期間(例:3日、5日、7日、10日)でバックテストを実行し、期間別の平均リターンとリスク(標準偏差)を比較します。
    ・ランダムフォレストやグリッドサーチなどの機械学習アルゴリズムを使い、最適な保有日数を自動探索する仕組みを構築できます。
    ・過去のイベント特性に応じて、動的にホールド期間を変更するルールエンジンを追加すると、より柔軟な戦略設計が可能です。
  2. オプション戦略との組み合わせ
    ・イベント発表前にプットオプションを購入し、下落リスクを限定しつつ、株価反発時はコールオプションでレバレッジを効かせます。
    ・ブルスプレッド(コール・コール)、ベアスプレッド(プット・プット)などを用いて、リスク・リワードを調整可能です。
    ・ボラティリティ指標(VIX)の急騰タイミングと合わせたオプション戦略をバックテストに組み込むと、ボラティリティヘッジが強化されます。
  3. ペアトレード戦略
    ・同一セクター内の「恩恵銘柄(ロング)」と「被害銘柄(ショート)」をペアに設定します。
    ・ロングとショートを同量建玉し、全体の市場ベータをゼロ近傍に抑え、イベント固有のスプレッド拡大でアルファ獲得を狙います。
    ・ペアの相関性やボラティリティを定量的に検証し、最適ペアを選定することで、戦略の信頼度を高めます。
  4. センチメント分析連携
    ・ニュース記事やTwitterなどSNSのテキストマイニングを行い、イベント前後の市場センチメントをスコア化します。
    ・感情スコアをバックテストのフィルタ条件に組み込み、ポジションサイズやロング/ショート判断の補助データとして活用可能です。
    ・感情の急変ポイントをトリガーとし、アルゴリズムトレードに組み込むと、よりタイムリーなエントリー/エグジットが実現します。
  5. リアルタイムアラート&自動売買
    ・FirecrawlやGoogle Apps Scriptで「USTR」「Tariff」などのキーワードを監視し、関税発表をリアルタイムで検知します。
    ・検知時にSlackやLINEへ即時通知し、その通知をトリガーとして証券会社API経由で自動売買注文を発注。
    ・ヒューマンラグを排除することで、発表直後の短時間でのエントリー/エグジットが可能となり、戦略の実効性が向上します。

7. まとめ

本記事では、2025年の主要なトランプ関税イベントを3件ピックアップし、Pythonとyfinanceを使った短期イベント投資の手順を詳細に解説しました。発表翌営業日から5営業日のリターン計算summary表による平均リターンとリスク(標準偏差)の集計累積リターングラフによる視覚化までの一連の流れを通じて、市場動向を数値で捉える方法が理解できたはずです。また、ホールド期間最適化、オプション戦略、ペアトレード、センチメント分析連携、自動売買などの発展的アイデアも提案し、さらなる戦略の拡張ポイントを提供しました。

これらを基礎として、自分自身の投資スタイルに合った銘柄選定やホールド期間のカスタマイズ追加のデータ分析(ボラティリティや相関性のチェック)などを行い、実際のポートフォリオ運用に役立ててください。次の一歩として、ぜひコードを動かしながら、自分だけのイベント投資戦略をブラッシュアップしてみましょう。

Pythonを学ぶなら「Udemy」で効率的に

独学でPythonを学ぶ場合、公式リファレンスだけでは挫折しがちです。
そんな時に心強いのが、動画で体系的に学べるUdemyの講座

  • Python初心者向け講座から、投資データ分析に特化した実践講座まで多数
  • 買い切り型で、一度買えばいつでも復習可能
  • セール時は90%オフなど、非常にお得

投資家にとっての“自己投資”として、Udemyは非常にコスパの高い選択肢です。

【裏ワザ】Udemyの講座は“ある方法”でさらにお得に買える

実は、Udemyの講座はポイントサイトを経由することで、さらにお得に購入できることをご存知ですか?

おすすめは「ハピタス」というポイントサイト。
ハピタスを経由してUdemyで講座を購入すると、購入金額の数15%がポイントとして還元されます(2025年4月調査時点)。

手順は3ステップ

  1. ハピタスに無料登録
  2. その買うを、もっとハッピーに。|ハピタス

  3. 「Udemy」と検索して表示されたリンクをクリック
  4. 講座を通常通り購入するだけ

講座はPythonの基本から株価分析、AI株価予測まで、いろいろそろっています。

Udemy株価分析講座

学びながらポイントも貯まり、一石二鳥です。

ぜひこの機会にUdemyでPythonをマスターし、イベント投資戦略を実践しましょう!