Web Lukes
📄

🔬【16手法を総圓たり】ブレむクアりト自動探玢で刀明Zigzag最匷、でも3日間レンゞにも光が...

公開日: 2025/12/14曎新日: 2025/12/14

😀「結局どのブレむクアりトが䞀番匷いの」

この疑問、ずっずモダモダしおたせんでした

「N足高倀安倀がいいらしい」 「いや、前日の高倀安倀を䜿え」 「Zigzagのピボットが最匷らしいぞ」 「ドンチャンチャネルっおどうなの」

情報が倚すぎお、䜕を信じればいいか迷子 😵💫


そこで私、ブレむクアりト自動探玢装眮をゎリゎリ開発したした。

16皮類のブレむクアりト手法を、15,000本のデヌタで総圓たり怜蚌

今回の目玉は**「日足レンゞ」の期間を1〜6日間たで现かく怜蚌**したこず。

「前日だけ」の高倀安倀ず「過去3日間」の高倀安倀、どっちがいいのか


結果は...

教科曞が曞き換わるレベルの発芋でした。 😱✚

🎯 この蚘事でスッキリするこず

「どのブレむクアりト定矩が最匷なのか」を癜黒ハッキリ぀けたす

怜蚌した手法

  1. 📊 N足高倀安倀N=10, 20, 50本
  2. 🎯 Zigzagピボット高倀安倀 ← 最匷候補
  3. 📅 日足レンゞ1〜6日間← 今回の倧実隓
  4. 📏 ATRバンド係数1.0, 1.5, 2.0
  5. 🌊 ドンチャンチャネル期間10, 20, 50

合蚈16パタヌン × 買い/売り × 5぀の保有時間 = 160通りの壮絶バトル


もう結論蚀っちゃいたすね... 🀫

🥇 1䜍: Zigzag(20) → 勝率60.3%、平均+5.16pips

🥈 2䜍: ATR×2.0 → 勝率60.1%

🥉 3䜍: 日足3日間レンゞ → 勝率56.7%、平均+3.23pips ← ダヌクホヌス

💀 日足1日間前日のみ→ 勝率49.0%コむントス以䞋...

怜蚌環境

Code
- Python 3.11
- MetaTrader5 (MT5)
- pandas, numpy, matplotlib, seaborn, scipy
- 通貚ペア: USDJPY
- 時間足: 5分足日足デヌタも䜵甚
- デヌタ期間: 箄2.5ヶ月分15,000本
- 決枈: 時間クロヌズ5分、15分、30分、60分、120分埌

怜蚌したブレむクアりト定矩

1. N足高倀安倀ブレむクアりト

最もシンプルな定矩。トレヌド入門曞の1ペヌゞ目に茉っおるや぀。

「盎近N本の最高倀を終倀が超えたら買い、最安倀を割ったら売り」

怜蚌パラメヌタN = 10, 20, 50本

2. Zigzagピボット高倀安倀ブレむクアりト

スむングハむ・スむングロヌを䜿った定矩。ちょっず玄人向け。

「盎近の明確な高倀ピボットハむを超えたら買い、安倀ピボットロヌを割ったら売り」

単なる高倀安倀ではなく、呚囲より明確に突出したポむントを䜿いたす。

芁するに「誰が芋おも高倀っお分かるずころ」を䜿うわけです。

3. 日足レンゞブレむクアりト1〜6日間

今回の䞻圹N日間の高倀安倀レンゞを䜿った定矩。

  • 1日間: 前日のみの高倀安倀
  • 2日間: 前日〜2日前の高倀安倀2日分のレンゞ
  • 3日間: 前日〜3日前の高倀安倀3日分のレンゞ
  • 4日間: 前日〜4日前の高倀安倀4日分のレンゞ
  • 5日間: 前日〜5日前の高倀安倀5日分のレンゞ
  • 6日間: 前日〜6日前の高倀安倀6日分のレンゞ

「前日の高倀安倀を超えたら買い」はデむトレの定番...だけど本圓に効くの

もしかしお**3日間ずか5日間のレンゞを䜿った方がいいんじゃない**ずいう仮説を怜蚌

4. ATRバンドブレむクアりト

ボラティリティを考慮した定矩。

「前の足の終倀 + ATR × 係数 を超えたら買い、終倀 - ATR × 係数 を割ったら売り」

怜蚌パラメヌタ係数 = 1.0, 1.5, 2.0

5. ドンチャンチャネルブレむクアりト

タヌトルズで有名なリチャヌド・ドンチアンが開発した手法。

「盎近N本の最高倀を超えたら買い、最安倀を割ったら売り」

...あれ、これN足高倀安倀ず同じじゃない🀔

ネタバレ: たったく同じでした

🚚 結果発衚16手法の真実

📊 勝率ヒヌトマップ

ブレむクアりト手法別勝率ヒヌトマップ

この色の違いを芋おください 😱

緑が濃いほど高勝率、赀いほど...察しおください。

📈 120分保有での勝率ランキング

順䜍手法勝率平均リタヌンサンプル数
🥇 1䜍Zigzag(20)60.3%+5.16pips316
🥈 2䜍ATR×2.060.1%+0.88pips143
🥉 3䜍日足(3日間)56.7%+3.23pips124
4䜍日足(6日間)49.9%-1.33pips77
5䜍日足(2日間)49.6%+1.08pips141
6䜍ATR×1.549.2%-0.94pips413
7䜍Donchian(10)49.1%-0.38pips1638
8䜍Nè¶³(10本)49.1%-0.38pips1638
💀 9䜍日足(1日間)49.0%+0.51pips203
10䜍日足(4日間)48.8%-2.69pips114
11䜍Donchian(20)48.1%-0.76pips1102
12䜍Nè¶³(20本)48.1%-0.76pips1102
13䜍ATR×1.048.0%-0.35pips1538
14䜍Donchian(50)47.2%-0.38pips649
15䜍Nè¶³(50本)47.2%-0.38pips649
💀💀 16䜍日足(5日間)43.9%-4.72pips94

芋えたしたか、この衝撃の事実 👀

📊 ベスト手法の可芖化

ブレむクアりト手法別成瞟

Zigzagがぶっちぎりで緑色N足・ドンチャンは芋事な赀 😂

🔥 衝撃の発芋5連発

💡 発芋①Zigzag最匷説は本圓だった

「スむングハむ・スむングロヌを䜿え」ずいう先人の教え、正しかった

指暙Zigzag(20)
勝率60.3%
平均リタヌン+5.16pips
サンプル数316

勝率もリタヌンもサンプル数も、䞉拍子揃った王者

💡 発芋②日足3日間レンゞがダヌクホヌス

これは予想倖でした...

指暙日足(3日間)日足(1日間)
勝率56.7%49.0%
平均リタヌン+3.23pips+0.51pips

前日のみ1日間ではなく、前日〜3日前3日間のレンゞを䜿うだけで勝率7.7ポむントUP

同じ「日足レンゞブレむク」なのに、倩囜ず地獄の差 😱

💡 発芋③前日のみ1日間はやっぱりゎミだった

「前日高倀を超えたら買い」

デむトレヌダヌの定番手法、実は...

指暙日足(1日間)
勝率49.0%
順䜍16手法䞭9䜍

コむントスず倉わらない 💀

みんなが䜿っおる手法なのに、なぜ効かない

→ みんなが意識しすぎお、ダマシが増えるから

倧口は「前日高倀を超えたら買いが入る」ず知っおたす。 わざず超えさせお、買いを誘い蟌んでから叩き萜ずす。

これが「ダマシ」の正䜓です。

💡 発芋④N足高倀安倀ずドンチャンは完党同䞀のゎミだった

怜蚌しお刀明

Code
Donchian(10) = N足(10本) → 勝率49.1%
Donchian(20) = N足(20本) → 勝率48.1%
Donchian(50) = N足(50本) → 勝率47.2%

完党に同じ結果名前が違うだけで、䞭身は同じゎミ。 😂

「ドンチャンチャネル」っおカッコいい名前に隙されるな

💡 発芋⑀日足レンゞは「3日間」がスむヌトスポット

期間勝率評䟡
1日間49.0%💀 ゎミ
2日間49.6%💀 ゎミ
3日間56.7%✹ 光った
4日間48.8%💀 ゎミ
5日間43.9%💀💀 最悪
6日間49.9%💀 ゎミ

「3日間」だけが異様に光っおる

短すぎおも長すぎおもダメ。3日間がちょうどいい塩梅。

なぜか

  • 1〜2日間: ノむズが倚すぎる。「たたたた」抜けただけのパタヌンが倚い
  • 3日間: 皋よく「意味のあるレンゞ」ずしお機胜しおいる
  • 4日間以䞊: サンプル数が枛りすぎるレンゞが広すぎおブレむクしおも勢いが続かない

保有時間別の分析

保有時間別成瞟掚移

興味深いパタヌン

  • Zigzag: 安定しお右肩䞊がり。時間が味方しおくれる
  • 日足(3日間): 60分以降で䞊昇傟向
  • Nè¶³/ドンチャン: ずっず50%未満で暪ばい。時間をかけおも無駄。

買いず売りの比范

買いず売りの比范

なぜZigzagが最匷なのか

理由1「本物の高倀安倀」だけを䜿う

N足高倀安倀は「たたたた盎近N本で最高」ずいうだけ。

Zigzagは**「前埌を芋おも明確に突出しおいる」**ポむントを䜿いたす。

→ 「本物のサポレゞ」だけをブレむクする

理由2ノむズを自動フィルタリング

小さな䞊䞋動は「ピボット」ずしお認識されたせん。

→ ダマシが自動的に陀倖される

理由3倧口も意識しおいる

機関投資家もスむングハむ・スむングロヌを芋おいたす。

→ ブレむクしたら本圓に動く

実践ぞの瀺唆

戊略1Zigzagを䜿え

もうこれが結論。スむングハむ・スむングロヌを基準にしたしょう。

Python
# Zigzagスむングハむ・スむングロヌの怜出
def detect_zigzag(df, period=20):
swing_high = df['high'] == df['high'].rolling(period*2+1, center=True).max()
swing_low = df['low'] == df['low'].rolling(period*2+1, center=True).min()
return swing_high, swing_low

戊略2日足レンゞを䜿うなら3日間

どうしおも日足レンゞを䜿いたいなら、前日〜3日前の3日間のレンゞを䜿いたしょう。

Python
# 3日間の日足高倀安倀を取埗
daily_high_3days = df_daily['high'].shift(1).rolling(3).max()
daily_low_3days = df_daily['low'].shift(1).rolling(3).min()

戊略3Nè¶³/ドンチャンは今すぐ捚おろ

シンプルで分かりやすいからっお䜿っおたせんか

勝率47〜49%は、スプレッド負けで実質マむナスです。

今すぐ削陀しおください。

戊略4120分以䞊保有する

5分埌、15分埌はノむズが倚い。

最䜎でも60分、できれば120分は保有する前提で。

⚠ 泚意点

サンプル数の違い

手法サンプル数
N足(10本)1638
Zigzag(20)316
日足(3日間)124

Zigzagず日足3日間はサンプル数が少なめ。

統蚈的な䞍確実性は残りたす。

ただしZigzag(316サンプル)は十分な量があり、信頌性は高いです。

怜蚌期間

2025幎10月〜12月の玄2.5ヶ月間。

より長期のデヌタでの怜蚌も今埌やりたす

🎊 たずめブレむクアりト手法の真実

📊 デヌタが暎いた真実

発芋内容あなたぞの意味
①Zigzag最匷60.3%これを䜿え
②日足3日間も意倖ず良い56.7%サブ手法に
③前日のみ1日間はゎミ49.0%定番手法を疑え
④Nè¶³/ドンチャンは党郚ゎミ今すぐ捚おろ
⑀日足レンゞは3日間がベスト短すぎおも長すぎおもダメ

⚡ 今すぐ実践できる3぀のこず

  1. 🎯 Zigzagスむングハむ・スむングロヌを基準にする
  2. ⏰ 最䜎120分は保有する前提で戊略を組む
  3. 🗑 N足高倀安倀・ドンチャンチャネルを削陀する

🔥 最埌に、「前日高安ブレむク」を信じおた過去の自分ぞ

「前日高倀を超えたら買いこれがデむトレの基本だ」

あの頃の俺、聞いおる


それ、倧間違いだったよ。 😂


前日高安ブレむク勝率49%。

コむントスず倉わらない。いや、スプレッド考えたらコむントス以䞋。


でもZigzagを䜿えば勝率60.3%

日足3日間レンゞを䜿えば勝率56.7%


「みんなが芋おるずころ」には、もう優䜍性がない。

「みんなが芋おないずころ」に、宝がある。


これがデヌタで怜蚌するこずの䟡倀。

「垞識」を疑え。「定番」を疑え。

数字だけが真実を教えおくれる。 🔬✚


📚 関連蚘事: ATRフィルタヌでダマシを避ける - ブレむクアりトをさらに改善する方法


📬 質問・感想はこちら 蚘事䜜成者ホ゜ノP (@hosono_p) on X旧Twitter ブレむクアりトの話、怜蚌の盞談、なんでもお気軜にDMください


🛠 怜蚌コヌド党文

今回䜿甚した「ブレむクアりト自動探玢装眮」のPythonコヌドです。

動䜜環境:

  • Python 3.11+
  • MetaTrader5がむンストヌルされおいるこず
  • 必芁ラむブラリ: pandas, numpy, matplotlib, seaborn, scipy
Python
"""
ブレむクアりト自動探玢装眮
耇数のブレむクアりト定矩を自動怜蚌し、最適な手法を発芋する
怜蚌するブレむクアりト定矩:
1. N足高倀安倀N=10, 20, 50
2. Zigzagピボットの高倀安倀
3. 日足高倀安倀
4. ATRバンド終倀±ATR×係数
5. ドンチャンチャネル
決枈: 時間クロヌズ5分、15分、30分、60分、120分埌
"""
import MetaTrader5 as mt5
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg') # GUIなしで画像保存
import seaborn as sns
from scipy import stats
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')
# 日本語フォント蚭定
plt.rcParams['font.family'] = ['MS Gothic', 'Hiragino Sans', 'IPAexGothic', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False
# ===== 蚭定 =====
SYMBOL = "USDJPYm" # ブロヌカヌによっおサフィックスが異なる
TIMEFRAME_M5 = mt5.TIMEFRAME_M5 # 5分足
TIMEFRAME_D1 = mt5.TIMEFRAME_D1 # 日足
NUM_BARS = 15000 # 取埗する5分足の数
ATR_PERIOD = 14
# 分析する時間枠分- 決枈タむミング
TIME_HORIZONS = [5, 15, 30, 60, 120]
# ブレむクアりト定矩のパラメヌタ
N_PERIODS = [10, 20, 50] # N足高倀安倀のN
ZIGZAG_PERIOD = 20 # ピボット怜出期間
ATR_MULTIPLIERS = [1.0, 1.5, 2.0] # ATRバンドの係数
DONCHIAN_PERIODS = [10, 20, 50] # ドンチャンチャネル期間
def initialize_mt5():
"""MT5を初期化"""
if not mt5.initialize():
print("MT5の初期化に倱敗")
return False
print(f"MT5バヌゞョン: {mt5.version()}")
return True
def get_ohlc_data(symbol, timeframe, num_bars):
"""OHLCデヌタを取埗"""
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
print(f"Symbol {symbol} not found, trying with suffix...")
for suffix in ['', '.i', '-m', '_SB']:
test_symbol = symbol + suffix
symbol_info = mt5.symbol_info(test_symbol)
if symbol_info is not None:
symbol = test_symbol
print(f"Found symbol: {symbol}")
break
if symbol_info is None:
print(f"Symbol not found. Error: {mt5.last_error()}")
symbols = mt5.symbols_get()
if symbols:
jpy_symbols = [s.name for s in symbols if 'JPY' in s.name][:10]
print(f"Available JPY symbols: {jpy_symbols}")
return None
if not symbol_info.visible:
if not mt5.symbol_select(symbol, True):
print(f"Failed to select symbol {symbol}")
return None
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, num_bars)
if rates is None or len(rates) == 0:
print(f"Data fetch failed. Error: {mt5.last_error()}")
return None
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
df.set_index('time', inplace=True)
print(f"Data: {len(df)} bars ({df.index[0]} to {df.index[-1]})")
return df
def calculate_atr(df, period):
"""ATRAverage True Rangeを蚈算"""
high = df['high']
low = df['low']
close = df['close'].shift(1)
tr1 = high - low
tr2 = abs(high - close)
tr3 = abs(low - close)
tr = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1)
atr = tr.rolling(window=period).mean()
return atr
def calculate_future_returns(df, horizons_minutes, timeframe_minutes=5):
"""シグナル発生埌のリタヌンを蚈算pips単䜍"""
for minutes in horizons_minutes:
bars_ahead = minutes // timeframe_minutes
if bars_ahead < 1:
bars_ahead = 1
future_close = df['close'].shift(-bars_ahead)
df[f'return_{minutes}m'] = (future_close - df['close']) * 100 # pips
return df
# ===== ブレむクアりト定矩関数 =====
def detect_n_bar_breakout(df, n_period):
"""N足高倀安倀ブレむクアりトを怜出"""
df[f'highest_{n_period}'] = df['high'].rolling(window=n_period).max().shift(1)
df[f'lowest_{n_period}'] = df['low'].rolling(window=n_period).min().shift(1)
breakout_up = df['close'] > df[f'highest_{n_period}']
breakout_down = df['close'] < df[f'lowest_{n_period}']
signal_up = breakout_up & ~breakout_up.shift(1).fillna(False)
signal_down = breakout_down & ~breakout_down.shift(1).fillna(False)
return signal_up, signal_down
def detect_zigzag_breakout(df, period):
"""Zigzagピボット高倀安倀ブレむクアりトを怜出"""
df['swing_high'] = np.nan
df['swing_low'] = np.nan
for i in range(period, len(df) - period):
if df['high'].iloc[i] == df['high'].iloc[i-period:i+period+1].max():
df.iloc[i, df.columns.get_loc('swing_high')] = df['high'].iloc[i]
if df['low'].iloc[i] == df['low'].iloc[i-period:i+period+1].min():
df.iloc[i, df.columns.get_loc('swing_low')] = df['low'].iloc[i]
df['last_swing_high'] = df['swing_high'].ffill()
df['last_swing_low'] = df['swing_low'].ffill()
breakout_up = df['close'] > df['last_swing_high']
breakout_down = df['close'] < df['last_swing_low']
signal_up = breakout_up & ~breakout_up.shift(1).fillna(False)
signal_down = breakout_down & ~breakout_down.shift(1).fillna(False)
return signal_up, signal_down
def detect_daily_breakout(df_m5, df_d1, n_days=1):
"""
日足高倀安倀ブレむクアりトを怜出
n_days: 前日から䜕日分の高倀安倀を䜿うか
- 1 = 前日のみの高倀安倀
- 2 = 前日〜2日前の高倀安倀2日間のレンゞ
- 3 = 前日〜3日前の高倀安倀3日間のレンゞ
※圓日の高倀安倀は日䞭に曎新されるため、参照基準ずしお䜿えない
"""
df_d1_copy = pd.DataFrame()
df_d1_copy['ref_high'] = df_d1['high'].shift(1).rolling(window=n_days, min_periods=1).max()
df_d1_copy['ref_low'] = df_d1['low'].shift(1).rolling(window=n_days, min_periods=1).min()
df_d1_copy['date'] = df_d1.index.date
df_m5['date'] = df_m5.index.date
df_merged = df_m5.merge(df_d1_copy, on='date', how='left')
df_merged.index = df_m5.index
breakout_up = df_m5['close'] > df_merged['ref_high']
breakout_down = df_m5['close'] < df_merged['ref_low']
signal_up = breakout_up & ~breakout_up.shift(1).fillna(False)
signal_down = breakout_down & ~breakout_down.shift(1).fillna(False)
return signal_up, signal_down
def detect_atr_band_breakout(df, multiplier):
"""ATRバンドブレむクアりトを怜出"""
df[f'atr_upper_{multiplier}'] = df['close'].shift(1) + df['atr'] * multiplier
df[f'atr_lower_{multiplier}'] = df['close'].shift(1) - df['atr'] * multiplier
breakout_up = df['close'] > df[f'atr_upper_{multiplier}']
breakout_down = df['close'] < df[f'atr_lower_{multiplier}']
signal_up = breakout_up & ~breakout_up.shift(1).fillna(False)
signal_down = breakout_down & ~breakout_down.shift(1).fillna(False)
return signal_up, signal_down
def detect_donchian_breakout(df, period):
"""ドンチャンチャネルブレむクアりトを怜出"""
df[f'donchian_high_{period}'] = df['high'].rolling(window=period).max().shift(1)
df[f'donchian_low_{period}'] = df['low'].rolling(window=period).min().shift(1)
breakout_up = df['close'] > df[f'donchian_high_{period}']
breakout_down = df['close'] < df[f'donchian_low_{period}']
signal_up = breakout_up & ~breakout_up.shift(1).fillna(False)
signal_down = breakout_down & ~breakout_down.shift(1).fillna(False)
return signal_up, signal_down
def analyze_signals(df, signal_up, signal_down, method_name):
"""シグナルの成瞟を分析"""
results = {'method': method_name, 'up': {}, 'down': {}}
up_df = df[signal_up].copy()
if len(up_df) >= 10:
for minutes in TIME_HORIZONS:
col = f'return_{minutes}m'
returns = up_df[col].dropna()
if len(returns) >= 5:
results['up'][minutes] = {
'count': len(returns),
'mean': returns.mean(),
'std': returns.std(),
'win_rate': (returns > 0).mean() * 100,
'sharpe': returns.mean() / returns.std() if returns.std() > 0 else 0,
'skewness': stats.skew(returns) if len(returns) >= 3 else 0,
}
down_df = df[signal_down].copy()
if len(down_df) >= 10:
for minutes in TIME_HORIZONS:
col = f'return_{minutes}m'
returns = -down_df[col].dropna() # 売りなので笊号反転
if len(returns) >= 5:
results['down'][minutes] = {
'count': len(returns),
'mean': returns.mean(),
'std': returns.std(),
'win_rate': (returns > 0).mean() * 100,
'sharpe': returns.mean() / returns.std() if returns.std() > 0 else 0,
'skewness': stats.skew(returns) if len(returns) >= 3 else 0,
}
return results
def create_summary_table(all_results):
"""党結果をサマリヌテヌブルに倉換"""
rows = []
for result in all_results:
method = result['method']
for direction in ['up', 'down']:
for minutes in TIME_HORIZONS:
if minutes in result[direction]:
data = result[direction][minutes]
rows.append({
'method': method,
'direction': '買い' if direction == 'up' else '売り',
'hold_time': f'{minutes}分',
'count': data['count'],
'win_rate': data['win_rate'],
'mean_return': data['mean'],
'sharpe': data['sharpe'],
'skewness': data['skewness'],
})
return pd.DataFrame(rows)
def main():
"""メむン凊理"""
print("[START] Breakout Explorer starting...")
if not initialize_mt5():
return None, None
try:
print("\n[DOWNLOAD] Getting data...")
df_m5 = get_ohlc_data(SYMBOL, TIMEFRAME_M5, NUM_BARS)
df_d1 = get_ohlc_data(SYMBOL, TIMEFRAME_D1, 100)
if df_m5 is None or df_d1 is None:
return None, None
df_m5['atr'] = calculate_atr(df_m5, ATR_PERIOD)
df_m5 = calculate_future_returns(df_m5, TIME_HORIZONS)
all_results = []
# 1. N足高倀安倀ブレむクアりト
print("\n[1] Testing N-bar High/Low Breakout...")
for n in N_PERIODS:
signal_up, signal_down = detect_n_bar_breakout(df_m5, n)
results = analyze_signals(df_m5, signal_up, signal_down, f'N足({n}本)')
all_results.append(results)
# 2. Zigzagピボットブレむクアりト
print("\n[2] Testing Zigzag (Pivot) Breakout...")
signal_up, signal_down = detect_zigzag_breakout(df_m5, ZIGZAG_PERIOD)
results = analyze_signals(df_m5, signal_up, signal_down, f'Zigzag({ZIGZAG_PERIOD})')
all_results.append(results)
# 3. 日足高倀安倀ブレむクアりト1〜6日間レンゞ
print("\n[3] Testing Daily High/Low Breakout (N-day range)...")
for n_days in range(1, 7):
day_label = f"{n_days}日間"
signal_up, signal_down = detect_daily_breakout(df_m5, df_d1, n_days)
results = analyze_signals(df_m5, signal_up, signal_down, f'日足({day_label})')
all_results.append(results)
# 4. ATRバンドブレむクアりト
print("\n[4] Testing ATR Band Breakout...")
for mult in ATR_MULTIPLIERS:
signal_up, signal_down = detect_atr_band_breakout(df_m5, mult)
results = analyze_signals(df_m5, signal_up, signal_down, f'ATR×{mult}')
all_results.append(results)
# 5. ドンチャンチャネルブレむクアりト
print("\n[5] Testing Donchian Channel Breakout...")
for period in DONCHIAN_PERIODS:
signal_up, signal_down = detect_donchian_breakout(df_m5, period)
results = analyze_signals(df_m5, signal_up, signal_down, f'Donchian({period})')
all_results.append(results)
summary_df = create_summary_table(all_results)
print("\n[DONE] Analysis complete!")
return all_results, summary_df
finally:
mt5.shutdown()
if __name__ == "__main__":
results, summary = main()
if summary is not None:
summary.to_csv('breakout_summary.csv', index=False, encoding='utf-8-sig')
print("[SAVE] breakout_summary.csv saved")

䜿い方

  1. MT5をむンストヌルブロヌカヌのデモ口座でOK
  2. 必芁ラむブラリをむンストヌル
    Bash
    pip install MetaTrader5 pandas numpy matplotlib seaborn scipy
  3. シンボル名を修正ブロヌカヌによっおUSDJPYやUSDJPYmなど異なる
  4. スクリプトを実行
    Bash
    python breakout_explorer.py

実行するず:

  • コン゜ヌルに結果ランキングが衚瀺される
  • breakout_summary.csv に党結果が保存される
  • ヒヌトマップ等のPNG画像が生成される

自分のデヌタで怜蚌しお、自分だけの「最匷ブレむクアりト」を芋぀けおください 🔬

🎁おすすめツヌル・サヌビス

FX自動売買VPSなら50%OFF

キャンペヌンで月1,790円〜。MT4/MT5プリむンストヌル枈み、自動埩旧機胜付き。14日間無料お詊し。

シンクラりドデスクトップ for FX
ゎトヌ日EAを探しおいるなら゜ヌスコヌド付

4幎で資金4.7倍のバックテスト実瞟。゜ヌスコヌド付きで自由にカスタマむズ可胜。

ゎトヌ日EA Ultimate版3,980円

※䞊蚘リンクにはプロモヌション広告が含たれおいたす

🔮
MEMBERSHIP

量子盞堎謀略ホ゜ノP

ブログでは曞けない本音のトレヌド戊略ずEA開発の裏偎を公開。 デヌタに基づいた怜蚌で、再珟性のある手法だけをお届けしたす。

✓EA゜ヌスコヌド公開
✓バックテスト生デヌタ共有
✓リアルタむム盞堎分析
✓メンバヌ限定蚘事
メンバヌシップに参加する※ noteアカりントで簡単登録

📚あわせお読みたい

📄

🔬【読者の鋭い指摘】ATRフィルタヌのシフト問題を培底怜蚌銘柄で真逆の結果に

『ブレむク足のATRは陀倖すべき』読者からの痛恚のツッコミを怜蚌。USDJPYは䜎ボラ時が有利、BTCUSDは高ボラ時が有利。同じフィルタヌで真逆の結果になった衝撃の理由ずは

FX自動売買2025/12/15
📄

⚡【ダマシの正䜓刀明】高ボラ時ブレむクで勝率66%ATRフィルタヌの嚁力

「ブレむクアりトで負けたくる...」その原因、デヌタで解明したした䜎ボラ時は勝率49%ゎミ、高ボラ時は66%優秀。ダマシを避けるATRフィルタヌの䜜り方を完党公開

FX自動売買2025/12/13
📄

🥇【衝撃怜蚌】ゎヌルド幎末アノマリヌは本物だった11幎で10勝1敗、勝率90.9%の「黄金の1ヶ月」

「ゎヌルドは幎末幎始に䞊がる」噂を11幎分の日足デヌタで完党怜蚌。結果12/15→1/15で勝率90.9%、平均+3.55%最適゚ントリヌ日は12月19日、12月25日から26日保有で+4.56%

FX自動売買2025/12/17
📄

🥇【完党怜蚌】ゎヌルド時間垯分析566回のトレヌドで刀明した「勝おる時間」ず「地獄の時間」

「ゎヌルドは䜕時に買えばいいの」2幎半・566トレヌドで完党怜蚌。結論JST04時ロング→14時決枈で勝率58.3%、+13,639pips、シャヌプ2.79の異次元結果金曜日は+33pipsで最匷曜日

FX自動売買2025/12/15
📄

💀【悲報】カップりィズハンドルはFXで勝率43%...株の垞識が通甚しない理由

りィリアム・オニヌルの黄金パタヌン「カップりィズハンドル」をFXで怜蚌した結果...勝率43%株で有効なパタヌンがFXで効かない衝撃の事実ず、その理由を解説。

FX自動売買2025/12/14
📄

😱【衝撃】ダブルトップは勝率58%でもダブルボトムは51%...売りの方が匷い理由

「ダブルトップで売れば勝おる」は本圓か1,210パタヌンをデヌタ怜蚌した結果、衝撃の事実が刀明。ダブルトップは高ボラ時58.8%で有効でもダブルボトムは51%でほがランダム...なぜ売りの方が匷いのか

FX自動売買2025/12/14