【読者リクエスト】ブレイクアウト3手法を徹底比較!ZigZag vs 3日高値安値 vs 20本高値安値
読者リクエストに応えます!🙌
先日、読者さんから熱いリクエストをいただきました:
「ブレイクアウト手法について整理がつかないのでリクエストお願いします。ZigZag、3日高値安値、20本高値安値を比較してほしい。通貨によって結果が真逆になるようなので、ドル円・ビットコイン・ゴールドでお願いします」
これは面白いテーマですね!通貨によって最適な手法が違うという仮説、データで検証してみましょう。
検証条件
| 項目 | 設定 |
|---|---|
| 期間 | 2021年7月〜2024年12月(約3.5年) |
| 対象 | USDJPY、BTCUSD、XAUUSD(ゴールド) |
| 時間足 | 1時間足(エントリー)/ 日足(レベル計算) |
| SL/TP | USDJPY: 30/50pips、BTC: $1000/$2000、Gold: $10/$20 |
| スプレッド | USDJPY: 0.3pips、BTC: $50、Gold: $0.3 |
3つの手法の定義
# 1. ZigZag風ブレイクアウト# 5日間のスイングハイ/ローを検出し、そのレベルをブレイクでエントリーdf['swing_high'] = df['high'].rolling(5, center=True).max()df['swing_low'] = df['low'].rolling(5, center=True).min()
# 2. 3日高値安値ブレイクアウト# 過去3日間の高値/安値をブレイクでエントリーdf['high_3d'] = df['high'].rolling(3).max().shift(1)df['low_3d'] = df['low'].rolling(3).min().shift(1)
# 3. 20本高値安値ブレイクアウト(1時間足)# 過去20本の高値/安値をブレイクでエントリーdf['high_20'] = df['high'].rolling(20).max().shift(1)df['low_20'] = df['low'].rolling(20).min().shift(1)結果サマリー
USDJPY(ドル円)
| 手法 | 勝率 | 平均pips | 累計pips | 取引回数 |
|---|---|---|---|---|
| ZigZag | 58.3% | +14.99 | +8,349 | 557回 |
| 3日高値安値 | 58.9% | +14.77 | +10,825 | 733回 |
| 20本高値安値 | 57.4% | +14.13 | +17,859 | 1,264回 |
💡 USDJPYの結論: 3手法ともほぼ同等のパフォーマンス!取引回数が多い「20本高値安値」が累計では最強。
BTCUSD(ビットコイン)
| 手法 | 勝率 | 平均$ | 累計$ | 取引回数 |
|---|---|---|---|---|
| ZigZag | 44.8% | +143 | +53,966 | 377回 |
| 3日高値安値 | 47.0% | +153 | +74,048 | 483回 |
| 20本高値安値 | 42.1% | +48 | +62,122 | 1,301回 |
💡 BTCの結論: 「3日高値安値」が最強!ボラティリティが高いBTCでは、より長い期間でのレベル設定が効果的。
XAUUSD(ゴールド)
| 手法 | 勝率 | 平均$ | 累計$ | 取引回数 |
|---|---|---|---|---|
| ZigZag | 93.5% | +17.75 | +10,080 | 568回 |
| 3日高値安値 | 91.4% | +17.12 | +12,363 | 722回 |
| 20本高値安値 | 92.9% | +17.56 | +25,377 | 1,445回 |
💡 ゴールドの結論: 驚異の勝率90%超え!どの手法でも利益が出るが、取引回数で「20本高値安値」が圧勝。
時間帯別分析
読者さんが「東京時間が意外と良い結果だった」と言っていたので、時間帯別にも検証しました。
USDJPY 時間帯×手法
| 時間帯 | ZigZag | 3日高値安値 | 20本高値安値 |
|---|---|---|---|
| 東京 | 59.3% / +15.2p | 58.6% / +14.2p | 58.2% / +13.6p |
| ロンドン | 58.6% / +16.0p | 58.7% / +15.0p | 60.6% / +16.9p |
| NY | 55.2% / +14.3p | 53.5% / +11.3p | 56.4% / +13.8p |
発見: ロンドン時間×20本高値安値の組み合わせが最強(勝率60.6%、平均+16.9pips)!
BTC 時間帯×手法
BTCは24時間市場なので時間帯の差は小さいですが、3日高値安値がどの時間帯でも安定しています。
ゴールド 時間帯×手法
ゴールドはどの時間帯でも勝率90%超えという驚異的な結果。特に東京時間が安定しています。
通貨横断まとめ
読者さんの仮説「通貨によって結果が真逆になる」を検証した結果:
最適手法は通貨で異なる!
| 通貨 | 最適手法 | 理由 |
|---|---|---|
| USDJPY | 20本高値安値 | 取引機会が多く、累計利益が最大 |
| BTC | 3日高値安値 | 高ボラでも安定、平均利益が最大 |
| ゴールド | 20本高値安値 | 圧倒的な取引回数で累計利益が最大 |
スプレッドコストの影響
スプレッドコストを考慮すると:
- USDJPY: 0.3pips × 1,264回 = 379pipsのコスト
- BTC: $50 × 483回 = $24,150のコスト
- ゴールド: $0.3 × 1,445回 = $434のコスト
重要: スプレッドの安い業者を選ぶことで利益率は大きく改善します。
検証コード(高速版)
読者さんからの質問が多いので、検証コードも公開します。
高速化のポイント:
- ベクトル化処理(NumPy/Pandas)
- ブレイクアウトレベルを事前計算
- 最大有利幅/逆行幅を一括計算
import MetaTrader5 as mt5import pandas as pdimport numpy as np
def find_breakouts_vectorized(df_h1, levels, direction, max_hours=24): """ ブレイクアウトをベクトル化で高速検出 """ results = [] df_h1 = df_h1.copy() df_h1['date'] = df_h1.index.date df_h1['hour'] = df_h1.index.hour
dates = sorted(set(df_h1['date']) & set(levels.keys()))
for date in dates: level = levels[date] if pd.isna(level): continue
mask = df_h1['date'] == date day_data = df_h1[mask]
# ブレイクアウト検出 if direction == 'long': hit_mask = day_data['high'] > level else: hit_mask = day_data['low'] < level
if not hit_mask.any(): continue
# 最初のブレイク時点を特定 entry_idx = hit_mask.idxmax() entry_pos = df_h1.index.get_loc(entry_idx) after_data = df_h1.iloc[entry_pos:entry_pos + max_hours]
# 最大有利幅・逆行幅を一括計算(SL/TP判定用) if direction == 'long': max_favorable = after_data['high'].max() - level max_adverse = level - after_data['low'].min() else: max_favorable = level - after_data['low'].min() max_adverse = after_data['high'].max() - level
results.append({ 'date': date, 'max_favorable': max_favorable, 'max_adverse': max_adverse, })
return results
def calc_sltp_result(max_favorable, max_adverse, sl, tp, pip_unit): """SL/TP結果を高速計算""" if max_favorable >= tp * pip_unit: return tp * pip_unit, 'tp' if max_adverse >= sl * pip_unit: return -sl * pip_unit, 'sl' return None, 'time'全コードはGitHubリポジトリで公開予定です。
まとめ
読者リクエストにお答えして、3つのブレイクアウト手法を徹底検証しました。
結論
- 通貨によって最適手法は異なる(読者さんの仮説は正しかった!)
- 20本高値安値は取引機会が多く、累計利益で有利
- 3日高値安値はBTCのような高ボラ銘柄で威力を発揮
- 時間帯フィルターはUSDJPYで効果的(ロンドン時間がベスト)
- ゴールドは驚異の勝率90%超え(どの手法でも勝てる!)
次回予告
ATRフィルターの効果検証も実施予定です。お楽しみに!
質問・リクエストがあればコメントください! データ駆動型の検証で、トレード戦略を一緒に磨いていきましょう 📊
🎁おすすめツール・サービス
※上記リンクにはプロモーション(広告)が含まれています
量子相場謀略|ホソノP
ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。