MTF分析(マルチタイムフレーム)¶
概要¶
MTF分析(Multi-Timeframe Analysis) は、Geminiとの戦略議論で「すなっちゃん氏の勝率を支える重要な要素」として特定された機能です。
核心理念
「木を見て森を見ず」を防ぐため、上位足のトレンドを必須条件としてエントリー判断に組み込む。
アーキテクチャ¶
graph TD
A[日足 Daily] -->|環境認識| B[フィルター]
C[1時間足 Hourly] -->|セットアップ| D[予兆検知]
E[5分足 5min] -->|トリガー| F[実行判断]
B --> G{MTF整合?}
D --> G
F --> G
G -->|Yes| H[エントリー許可]
G -->|No| I[エントリー拒否]
3つのタイムフレーム¶
1. 日足(Daily)- 環境認識¶
役割: 全体方向感の決定
def analyze_daily_trend(bars: List[ChartBar]) -> TrendDirection:
"""
日足トレンドを判定
- 20EMA > 50EMA かつ 価格 > 20EMA → STRONG_BULLISH
- 20EMA < 50EMA かつ 価格 < 20EMA → STRONG_BEARISH
- それ以外 → NEUTRAL
"""
| 指標 | 用途 | 閾値 |
|---|---|---|
| 20 EMA | 短期トレンド | 価格との位置関係 |
| 50 EMA | 中期トレンド | 20EMAとのクロス |
| 200 EMA | 長期トレンド | ゴールデン/デッドクロス |
2. 1時間足(Hourly)- セットアップ¶
役割: 押し目/戻りの判定
def analyze_hourly_setup(bars: List[ChartBar], vwap: float) -> SetupType:
"""
1時間足でセットアップを判定
- VWAPからの乖離
- RSI(14期間)の位置
- ボリュームプロファイル
"""
| 指標 | 用途 | 閾値 |
|---|---|---|
| VWAP | 平均コスト | ±0.5%ブレイク |
| RSI(14) | 過熱感 | 40-60が健全 |
| 出来高 | 確信度 | 平均の1.5倍以上 |
3. 5分足(5min)- トリガー¶
役割: エントリーポイントの精密決定
def check_5min_trigger(bars: List[ChartBar], key_level: float) -> bool:
"""
5分足でブレイクアウトを確認
- 重要ラインのブレイク
- 2本の足で確定(ダマシ回避)
- 出来高確認
"""
実装詳細¶
core/mtf_analyzer.py¶
@dataclass
class MTFAnalysis:
"""MTF分析結果"""
daily_trend: TrendDirection # 日足トレンド
hourly_setup: SetupType # 1時間足セットアップ
trigger_confirmed: bool # 5分足トリガー確認
alignment_score: float # 整合スコア (0.0-1.0)
recommendation: str # "ENTRY" / "WAIT" / "SKIP"
class MTFAnalyzer:
"""マルチタイムフレーム分析エンジン"""
def analyze(self, symbol: str, current_price: float) -> MTFAnalysis:
# 1. 日足データ取得 & トレンド判定
daily_bars = self._get_daily_bars(symbol, lookback=50)
daily_trend = self._analyze_daily_trend(daily_bars)
# 2. 1時間足データ取得 & セットアップ判定
hourly_bars = self._get_hourly_bars(symbol, lookback=50)
hourly_setup = self._analyze_hourly_setup(hourly_bars)
# 3. 5分足データ取得 & トリガー確認
intraday_bars = self._get_5min_bars(symbol, lookback=20)
trigger = self._check_trigger(intraday_bars, current_price)
# 4. 整合スコア計算
alignment_score = self._compute_alignment_score(
daily_trend, hourly_setup, trigger
)
return MTFAnalysis(...)
すなっちゃん戦略との統合¶
Spear戦略でのMTF使用¶
# run_paper_trading.py での使用例
async def _should_enter_spear(self, symbol: str, flow: OptionFlow) -> bool:
# MTF分析を実行
mtf = self.mtf_analyzer.analyze(symbol, current_price)
# 日足トレンドが不明確な場合はスキップ
if mtf.daily_trend == TrendDirection.NEUTRAL:
logger.info(f"[{symbol}] MTFスキップ: 日足トレンド不明確")
return False
# 整合スコアが低い場合はスキップ
if mtf.alignment_score < 0.6:
logger.info(f"[{symbol}] MTFスキップ: 整合スコア低 ({mtf.alignment_score:.2f})")
return False
return True
Beat戦略でのMTF使用¶
# Beat Shieldは「レンジ相場」を好むため、強トレンド中はスキップ
async def _should_enter_beat(self, symbol: str) -> bool:
mtf = self.mtf_analyzer.analyze(symbol, current_price)
# 強トレンド中はBeat戦略をスキップ
if mtf.daily_trend in [TrendDirection.STRONG_BULLISH, TrendDirection.STRONG_BEARISH]:
logger.info(f"[{symbol}] Beat スキップ: 強トレンド中")
return False
return True
Gemini推奨パラメータ¶
EMA期間設定¶
| タイムフレーム | 短期EMA | 中期EMA | 長期EMA |
|---|---|---|---|
| 日足 | 20 | 50 | 200 |
| 1時間足 | 20 | - | - |
| 5分足 | - | - | - |
Geminiからの提言
「1時間足の20EMA ≒ 日足の約3EMA」という単純換算よりも、各時間枠での参加者の心理を重視すべき。
整合スコア計算¶
def _compute_alignment_score(
daily: TrendDirection,
hourly: SetupType,
trigger: bool
) -> float:
"""
MTF整合スコアを計算
重み配分:
- 日足トレンド: 50%
- 1時間足セットアップ: 30%
- 5分足トリガー: 20%
"""
score = 0.0
# 日足(50%)
if daily in [TrendDirection.STRONG_BULLISH, TrendDirection.STRONG_BEARISH]:
score += 0.5
elif daily != TrendDirection.NEUTRAL:
score += 0.25
# 1時間足(30%)
if hourly == SetupType.PULLBACK_TO_SUPPORT:
score += 0.3
elif hourly == SetupType.CONSOLIDATION:
score += 0.15
# 5分足(20%)
if trigger:
score += 0.2
return score
バックテストでの使用¶
バックテスト(run_beat_sunacchan_backtest.py)でもMTF分析を使用:
# バックテストサマリーに追加される統計
{
"mtf_stats": {
"mtf_aligned": 245, # MTF整合した日数
"mtf_rejected": 89, # MTF拒否した日数
"alignment_rate": 0.73 # 整合率
}
}
ログ出力例¶
[AAPL] MTF分析:
日足: STRONG_BULLISH (20EMA > 50EMA, 価格 > 20EMA)
1時間足: PULLBACK_TO_SUPPORT (VWAPに接近中)
5分足: TRIGGER_CONFIRMED (直近高値ブレイク)
整合スコア: 0.85
推奨: ENTRY
関連ファイル¶
| ファイル | 役割 |
|---|---|
core/mtf_analyzer.py |
MTF分析エンジン |
core/momentum.py |
EMA/VWAP計算 |
scripts/run_paper_trading.py |
ペーパートレード統合 |
scripts/run_beat_sunacchan_backtest.py |
バックテスト統合 |
更新履歴¶
| 日付 | 変更内容 |
|---|---|
| 2025-11-29 | Gemini分析に基づき実装・統合 |