決算トレード戦略(Earnings Play)¶
概要¶
決算トレード戦略 は、Geminiとの議論で「LLMを使わない機械的な統計分析」で実現可能と判明した戦略群です。
AEGIS v3.0マイルストーン
決算トレード機能の実装をもってAEGIS v3.0とする。
現在のステータス
将来実装予定 - 仕様設計完了、実装は未着手
背景:なぜLLMを使わないのか¶
Gemini: nof1.ai の事例が示すように、2025年時点でもLLMによるファンダメンタルズの即時解釈は、ハルシネーションやレイテンシ(遅延)の問題があり、アルゴリズム取引のトリガーにするにはリスクが高すぎます。
代替アプローチ: 「市場参加者の期待値(IV)と現実(株価変動)のギャップ」を数学的に突く
3つの戦略¶
graph TD
A[決算トレード] --> B[戦略1: IV Run-up]
A --> C[戦略2: Expected Move Edge]
A --> D[戦略3: PEAD]
B --> E[決算前のIV上昇をVegaで取る]
C --> F[市場予測vs実績の歪みを突く]
D --> G[決算後モメンタムに乗る]
戦略1: IV Run-up(決算前ボラティリティ取り)¶
概要¶
最も安全な戦略: 決算の勝敗を当てるのではなく、「決算に向けてIVが上昇する現象」そのものを利益に変える。
ロジック¶
def iv_runup_strategy(symbol: str, earnings_date: date) -> TradeSignal:
"""
IV Run-up戦略
1. 過去8回の決算前2週間のIV推移を分析
2. 「過去8回中7回、IVが上昇している」銘柄をスクリーニング
3. 決算14日前にStraddle/Strangleをロング
4. 決算発表直前に全決済
"""
# 過去の決算前IV推移を取得(ThetaData)
iv_history = get_earnings_iv_history(symbol, lookback=8)
# IV上昇率を計算
iv_increase_count = sum(1 for h in iv_history if h.iv_change > 0)
if iv_increase_count >= 7: # 8回中7回以上
return TradeSignal(
action="LONG_STRADDLE",
entry_dte=14, # 決算14日前
exit_timing="BEFORE_EARNINGS", # 決算直前
target="VEGA_PROFIT"
)
return None
リスク/リターン¶
| 項目 | 評価 |
|---|---|
| リスク | 低 |
| リターン | 中 |
| 勝率 | 高 |
| すなっちゃん適合度 | 中 |
メリット¶
- 決算結果(ギャップ)のリスクを負わない
- Vega(ボラティリティ上昇)によるオプション価格上昇のみをかすめ取る
戦略2: Expected Move Edge(期待値の歪み取り)¶
概要¶
市場が織り込んでいる変動幅(Market Maker Move)と、過去の実際の変動幅を比較し、「市場がビビりすぎている」か「油断しすぎている」かを判定。
ロジック¶
def expected_move_edge(symbol: str) -> TradeSignal:
"""
Expected Move Edge戦略
1. 直近8回の決算日における「ATM Straddle価格」を取得
2. 過去8回の「決算翌日の実際の株価変動率」を計算
3. 比較判定
"""
# 過去のデータ取得
history = get_earnings_history(symbol, lookback=8)
avg_implied = history['implied_move'].mean() # 市場予測
avg_actual = history['actual_move'].mean() # 実際の変動
# エッジの判定
if avg_implied > avg_actual * 1.3:
# 市場は過剰反応しがち → ボラティリティ売り
return TradeSignal(
action="IRON_CONDOR",
rationale="市場予測 > 実績 × 1.3",
target="IV_CRUSH_PROFIT"
)
elif avg_actual > avg_implied * 1.2:
# 市場は過少評価しがち → ボラティリティ買い
return TradeSignal(
action="LONG_STRADDLE",
rationale="実績 > 市場予測 × 1.2",
target="LARGE_MOVE_PROFIT"
)
return TradeSignal(action="NO_TRADE")
ケース分類¶
| ケース | 条件 | アクション |
|---|---|---|
| A(売り有利) | 市場予測 > 実績 × 1.3 | Iron Condor(ボラ売り) |
| B(買い有利) | 実績 > 市場予測 × 1.2 | Long Straddle(ボラ買い) |
| 中立 | それ以外 | トレードなし |
リスク/リターン¶
| 項目 | 評価 |
|---|---|
| リスク | 中 |
| リターン | 中〜高 |
| 勝率 | 中 |
| すなっちゃん適合度 | 中 |
戦略3: PEAD(決算後モメンタム)¶
概要¶
すなっちゃんSpearと最も相性が良い: 決算発表「直後」の動きを見てからエントリーする後出しジャンケン戦略。
PEAD理論
Post-Earnings Announcement Drift: 好決算で大きくギャップアップした銘柄は、その後数日間〜数週間、上昇トレンドが続きやすいというアノマリー。
ロジック¶
def pead_strategy(symbol: str) -> TradeSignal:
"""
PEAD戦略(後出しジャンケン)
決算発表翌日の寄付きを監視し、条件を満たしたら順張り
"""
# 決算発表翌日の寄付きデータ取得(Polygon)
open_data = get_post_earnings_open(symbol)
# 条件チェック
conditions = [
open_data.gap_pct >= 5.0, # ギャップアップ +5%以上
open_data.orb_breakout == True, # 30分間の高値ブレイク
open_data.volume_ratio >= 2.0 # 出来高が平均の200%以上
]
if all(conditions):
return TradeSignal(
action="LONG_CALL",
rationale="PEAD条件成立",
entry_timing="ORB_BREAKOUT", # Opening Range Breakout
target="MOMENTUM_CONTINUATION"
)
return None
エントリー条件¶
| 条件 | 閾値 | 説明 |
|---|---|---|
| ギャップアップ | +5%以上 | 決算翌日の寄付き |
| ORBブレイク | Yes | 寄付きから30分間の高値をブレイク |
| 出来高 | 200%以上 | 機関投資家の買い確認 |
リスク/リターン¶
| 項目 | 評価 |
|---|---|
| リスク | 低 |
| リターン | 高 |
| 勝率 | 中〜高 |
| すなっちゃん適合度 | 高 |
メリット¶
- 「決算が悪くて暴落」という即死リスクを完全に排除
- すなっちゃんSpearのモメンタム戦略と自然に統合可能
データソース¶
| データ | ソース | 用途 |
|---|---|---|
| 過去の決算時IV | ThetaData | IV Run-up分析、Expected Move計算 |
| 決算スケジュール | Barchart | 決算日、時刻(BMO/AMC) |
| 株価変動 | Polygon | ギャップ測定、ORB判定 |
| Straddle価格 | ThetaData | 市場予測変動幅の計算 |
実装ロードマップ¶
Phase 1: Earnings Data Module¶
# 決算スケジュール取得(Barchart)
# 過去データ収集(ThetaData/Polygon)
# DBに保存するバッチ処理
class EarningsDataModule:
def fetch_earnings_calendar(self, start: date, end: date) -> List[EarningsEvent]
def fetch_historical_iv(self, symbol: str, earnings_date: date) -> IVHistory
def fetch_actual_move(self, symbol: str, earnings_date: date) -> ActualMove
Phase 2: Analyzer¶
# 各銘柄ごとに「決算で市場予測より動きやすいか」のスコアを算出
class EarningsAnalyzer:
def calculate_iv_runup_score(self, symbol: str) -> float
def calculate_expected_move_edge(self, symbol: str) -> EdgeType
def calculate_pead_probability(self, symbol: str) -> float
Phase 3: アラート機能¶
# 「明日決算のNVDAは、過去統計的に市場予測よりも大きく動く傾向があります」
class EarningsAlerts:
def generate_daily_alerts(self) -> List[EarningsAlert]
def send_to_slack(self, alert: EarningsAlert)
Phase 4: 自動エントリー¶
# PEAD戦略の自動エントリー
class EarningsTrader:
async def monitor_post_earnings(self, symbol: str)
async def execute_pead_entry(self, symbol: str, signal: TradeSignal)
すなっちゃん「決算ガチャ」との関係¶
すなっちゃん氏のDiscordで頻出する「決算ガチャ」は、上記戦略のうち主に以下に該当:
| すなっちゃん用語 | 対応戦略 | 特徴 |
|---|---|---|
| 「決算ガチャ」 | IV Run-up | 少額でOTMオプション購入 |
| 「決算後の動き見てから」 | PEAD | 後出しジャンケン |
| 「ストラドル」 | Expected Move Edge | 両建てヘッジ |
仕様書¶
詳細仕様は以下のファイルに記載:
更新履歴¶
| 日付 | 変更内容 |
|---|---|
| 2025-11-29 | Gemini分析に基づき仕様設計完了 |
| 2025-11-29 | AEGIS v3.0マイルストーンとして位置づけ |