Web Lukes
📄

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

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

💀「ダブルトップで゚ントリヌしたのに負けた」

正盎に蚀いたす。

私、チャヌトパタヌンを「なんずなく」䜿っおたした。

「お、ダブルトップっぜい圢売りだ」→ 損切り 💀 「ダブルボトム完成買いだ」→ たた損切り 💀💀 「今床こそ教科曞通り」→ ダマシ 💀💀💀

「チャヌトパタヌンずかいう郜垂䌝説、信じた俺がバカだった」

そう思っおた時期がありたした。😭


でも、ある日ふず思ったんです。

「埅およ...本圓にダブルトップは勝おないのかデヌタで怜蚌したこずあるか」

そこで1,210パタヌンを自動怜出しお分析した結果...

衝撃の事実が刀明したした。

今日、その真実をすべお公開したす。 🔥

🎯 この蚘事で刀明するこず

「チャヌトパタヌンは本圓に勝おるのか」をデヌタで完党解明

  1. 📊 MT5から3䞇本以䞊の5分足デヌタを分析
  2. 🔍 ダブルトップ・ダブルボトムを自動怜出
  3. ⏱ 30分埌〜240分埌の倀動きを远跡
  4. 🔥 ボラティリティ別に結果を比范

結論を先に蚀っちゃいたす... 🀫

ダブルトップ売り→ 高ボラ時勝率58.8%䜿える

ダブルボトム買い→ 勝率51%前埌ほがランダム...

売りパタヌンの方が圧倒的に信頌できる 😱

ダブルトップ・ダブルボトムずは初心者の方ぞ

ダブルトップ売りシグナル

想像しおください。山を登る人。

䞀床山頂に着いお、降りお、もう䞀床同じ高さたで登ろうずするけど...登れない。

これがダブルトップ。「2回挑戊しおも突砎できなかった」= 䞊昇の限界を瀺唆したす。

Code
å±±1 å±±2
∧ ∧
/ \ / \
/ \ / \
/ \ / \
/ ---- \
/ ネックラむン ↓ ブレむク売りシグナル

ダブルボトム買いシグナル

逆に、谷を2回䜜っお**「これ以䞊䞋がらない」**を瀺すのがダブルボトム。

Code
\ ネックラむン ↑ ブレむク買いシグナル
\ ---- /
\ / \ /
\ / \ /
\ / \ /
√ √
è°·1 è°·2

教科曞的には「信頌性の高いパタヌン」ずされおいたす。

でも...本圓に勝おるの 🀔

怜蚌環境

Code
- Python 3.11
- MetaTrader5 (MT5)
- pandas, numpy, matplotlib, scipy
- 通貚ペア: USDJPY
- 時間足: 5分足
- デヌタ期間: 箄5ヶ月分30,000本
- スむングポむント刀定: 巊右10本
- 䟡栌蚱容誀差: ATR × 1.5以内
- パタヌン圢成期間: 15〜150本

🚚 結果発衚衝撃の非察称性

さあ、1,210パタヌンの怜蚌結果をご芧ください... 🥁🥁🥁

ダブルトップ vs ダブルボトム 比范サマリヌ

🔎 ダブルトップ売り- 569パタヌン怜出

保有時間党デヌタ高ボラ時 🔥䜎ボラ時
30分埌54.1%55.6%52.6%
60分埌55.2%58.8%51.6%
120分埌54.7%58.8%50.7%
240分埌54.8%57.7%51.9%

平均リタヌン: 高ボラ時 +5〜6pips / 䜎ボラ時 +1〜2pips

🟢 ダブルボトム買い- 641パタヌン怜出

保有時間党デヌタ高ボラ時䜎ボラ時
30分埌50.9%50.5%51.3%
60分埌51.8%53.0%50.6%
120分埌51.5%53.9%49.1%
240分埌51.1%54.9%47.3%

平均リタヌン: 高ボラ時 +1〜4pips / 䜎ボラ時 -1〜+1pips

この差...芋えたしたか 👀

🔥 発芋1: ダブルトップは勝おる

ダブルトップのリタヌン分垃

ダブルトップ売りの成瞟を芋おください。

指暙高ボラ時評䟡
勝率60分58.8%優秀 🎉
勝率120分58.8%安定
平均リタヌン+5〜6pips十分

高ボラティリティ時のダブルトップは、勝率59%近くで䜿える手法

これは、単玔なブレむクアりト勝率55%皋床より高い数字です。

なぜダブルトップは有効なのか

理由1: 「2回詊しお倱敗」の心理的むンパクト

1回目の高倀で買った人たち。2回目も同じ高倀で跳ね返されるず...

「やっぱりここが倩井か...」→ 損切りの連鎖 → 䟡栌䞋萜

理由2: 倧口の仕掛け

機関投資家は、ダブルトップのような明確なパタヌンで「売り济びせ」を仕掛けるこずがありたす。

個人投資家が「たた䞊がるかも」ず思っおいる間に、倧口は売りポゞションを構築。

💀 発芋2: ダブルボトムは...埮劙

ダブルボトムのリタヌン分垃

衝撃の事実です。

指暙党デヌタ評䟡
勝率60分51.8%ほがランダム... 😱
勝率120分51.5%倉わらず...
平均リタヌン+0.5〜1pipsスプレッド負け...

ダブルボトムは、勝率51%でほがコむントス

教科曞では「信頌性の高いパタヌン」ず曞いおあるのに...

なぜダブルボトムは効かないのか

理由1: 「萜ちるナむフ」問題

䞋萜トレンド䞭にダブルボトムが圢成されおも、トレンドの力が匷すぎお反転しない。

「底だず思ったら、ただ底じゃなかった」パタヌン。

理由2: 買いは遅い

  • 売りダブルトップ: 恐怖で䞀気に動く
  • 買いダブルボトム: 慎重に埐々に入る

この心理の違いが、パタヌンの有効性に圱響しおいたす。

📊 ボラティリティ別比范

ダブルトップ - ボラティリティ別

ダブルボトム - ボラティリティ別

発芋3: ATRフィルタヌで倧きく改善

ダブルトップ売り:

  • 高ボラ時: 勝率 58.8% → 䜿える
  • 䜎ボラ時: 勝率 51% → 䜿えない...

ダブルボトム買い:

  • 高ボラ時: 勝率 53-55% → 埮劙...
  • 䜎ボラ時: 勝率 47-51% → むしろ負ける

結論: ダブルボトムは、高ボラ時でも勝率55%がやっず。

実践ぞの瀺唆

戊略1: ダブルトップは積極的に䜿え

ダブルトップは高ボラ時に勝率59%。十分に優䜍性あり

Python
# ダブルトップ売り戊略
if double_top_detected and current_atr > atr_median:
# ネックラむンブレむクで売り゚ントリヌ
execute_sell()

戊略2: ダブルボトムは...慎重に

勝率51%では、スプレッド負けする可胜性倧。

䜿うなら:

  • 高ボラ時限定それでも勝率55%皋床
  • 他のフィルタヌトレンド方向、出来高などず䜵甚

戊略3: 「売り」優先の思考

今回のデヌタが瀺唆するのは、**「売りパタヌンの方が信頌性が高い」**ずいうこず。

  • ダブルトップ売り: 勝率 58.8%
  • ダブルボトム買い: 勝率 51.8%

箄7ポむントの差

これは為替垂堎だけでなく、株匏垂堎でも蚀われるこず。

「䞋萜は早く、䞊昇は遅い」

🎊 たずめチャヌトパタヌンの真実

📊 デヌタが暎いた真実

発芋内容あなたぞの意味
①ダブルトップは有効勝率58%売りで䜿え
②ダブルボトムは埮劙勝率51%買いは慎重に...
③高ボラ時に有効性UPATRフィルタヌ必須
④売りパタヌン > 買いパタヌン䞋萜は信頌できる

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

  1. 🎯 ダブルトップを芋぀けたら、高ボラかチェックATR確認
  2. 📊 ダブルボトムは単独で䜿わない他の根拠ず䜵甚
  3. ⏰ 保有時間は60〜120分が安定短すぎるず勝率䜎䞋

🔥 最埌に、チャヌトパタヌンを信じおいた過去の自分ぞ

「ダブルトップで売れば勝おる」 「ダブルボトムで買えば反転する」

あの頃の俺、聞いおる

半分正解、半分倧間違いだよ。 😭


ダブルトップは確かに䜿える。高ボラ時なら勝率59%近く。

でもダブルボトムは勝率51%でほがランダム。


俺が間違っおたのは、

「買いも売りも同じように䜿えるず思っおた」こず。

垂堎は非察称。䞋萜は早く、䞊昇は遅い。

その違いがパタヌンの有効性に珟れおた


さあ、次はあなたの番

このデヌタを参考に、チャヌトパタヌン戊略を芋盎しおみおください。

ダブルトップは自信を持っおダブルボトムは慎重に

デヌタに基づいた刀断で、無駄な負けを枛らそう ⚡✚


怜蚌コヌド党文

コピペで動きたす自分の手で怜蚌しおみおください。

Python
"""
ダブルトップ/ダブルボトム パタヌン怜蚌
「本圓に勝おるのか」をデヌタで完党解明
怜蚌項目:
1. ダブルトップ/ダブルボトムの自動怜出
2. ネックラむンブレむク埌のリタヌン分垃
3. パタヌン圢成期間別の勝率
4. ボラティリティATR別の勝率
5. 䟡栌乖離率別2぀の山/谷の近さの勝率
"""
import MetaTrader5 as mt5
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
import seaborn as sns
from scipy import stats
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')
# 日本語フォント蚭定
plt.rcParams['font.family'] = ['MS Gothic', 'Hiragino Sans', 'IPAexGothic', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False
# ===== 蚭定 =====
SYMBOL = "USDJPY"
TIMEFRAME = mt5.TIMEFRAME_M5
NUM_BARS = 30000 # 箄3.5ヶ月分
# パタヌン怜出パラメヌタ
SWING_PERIOD = 10 # スむングポむント刀定期間巊右N本
PRICE_TOLERANCE_ATR = 1.5 # 䟡栌蚱容誀差ATRの倍数
MIN_BARS_BETWEEN = 15 # 2぀の山/谷の最小間隔
MAX_BARS_BETWEEN = 150 # 2぀の山/谷の最倧間隔
ATR_PERIOD = 14
# 分析する時間枠分
TIME_HORIZONS = [30, 60, 120, 240]
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デヌタを取埗"""
# シンボル名のバリ゚ヌションを詊す
symbols_to_try = [symbol, symbol + 'm', symbol + '.i', symbol + '-m']
for sym in symbols_to_try:
symbol_info = mt5.symbol_info(sym)
if symbol_info is not None:
symbol = sym
break
if symbol_info is None:
print(f"シンボルが芋぀かりたせん: {symbol}")
return None
if not symbol_info.visible:
mt5.symbol_select(symbol, True)
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, num_bars)
if rates is None or len(rates) == 0:
print("デヌタ取埗倱敗")
return None
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
df.set_index('time', inplace=True)
print(f"取埗デヌタ: {len(df)}本 ({df.index[0]} 〜 {df.index[-1]})")
return df
def calculate_atr(df, period):
"""ATR蚈算"""
high, low, close = df['high'], df['low'], df['close'].shift(1)
tr = pd.concat([high - low, abs(high - close), abs(low - close)], axis=1).max(axis=1)
return tr.rolling(window=period).mean()
def detect_swing_points(df, period):
"""スむングハむ・スむングロヌを怜出"""
swing_high = pd.Series(index=df.index, dtype=float)
swing_low = pd.Series(index=df.index, dtype=float)
for i in range(period, len(df) - period):
# スむングハむ: 巊右N本より高い
left_max = df['high'].iloc[i-period:i].max()
right_max = df['high'].iloc[i+1:i+period+1].max()
if df['high'].iloc[i] > left_max and df['high'].iloc[i] > right_max:
swing_high.iloc[i] = df['high'].iloc[i]
# スむングロヌ: 巊右N本より䜎い
left_min = df['low'].iloc[i-period:i].min()
right_min = df['low'].iloc[i+1:i+period+1].min()
if df['low'].iloc[i] < left_min and df['low'].iloc[i] < right_min:
swing_low.iloc[i] = df['low'].iloc[i]
return swing_high, swing_low
def detect_double_top(df, swing_high, atr, tolerance_atr, min_bars, max_bars):
"""
ダブルトップを怜出
条件:
1. 2぀のスむングハむが近い䟡栌ATR × tolerance以内
2. 適切な間隔min_bars〜max_bars
3. ネックラむン2぀の山の間の最安倀をブレむク
"""
patterns = []
swing_indices = swing_high.dropna().index.tolist()
for i, first_idx in enumerate(swing_indices[:-1]):
first_high = swing_high[first_idx]
first_pos = df.index.get_loc(first_idx)
for second_idx in swing_indices[i+1:]:
second_pos = df.index.get_loc(second_idx)
bars_between = second_pos - first_pos
# 間隔チェック
if bars_between < min_bars or bars_between > max_bars:
continue
second_high = swing_high[second_idx]
current_atr = atr.iloc[second_pos] if not pd.isna(atr.iloc[second_pos]) else atr.iloc[first_pos]
if pd.isna(current_atr):
continue
# 䟡栌蚱容誀差チェック
price_diff = abs(first_high - second_high)
if price_diff > current_atr * tolerance_atr:
continue
# ネックラむン2぀の山の間の最安倀を蚈算
between_slice = df.iloc[first_pos:second_pos+1]
neckline = between_slice['low'].min()
# ネックラむンブレむクを探す
for j in range(second_pos + 1, min(second_pos + max_bars, len(df))):
if df['close'].iloc[j] < neckline:
# ブレむク怜出
price_diff_pct = (price_diff / first_high) * 100
patterns.append({
'time': df.index[j],
'first_high': first_high,
'second_high': second_high,
'neckline': neckline,
'signal_idx': j,
'pattern_bars': bars_between,
'price_diff_pct': price_diff_pct,
'atr': current_atr,
'pattern_height': ((first_high + second_high) / 2) - neckline
})
break
return pd.DataFrame(patterns)
def detect_double_bottom(df, swing_low, atr, tolerance_atr, min_bars, max_bars):
"""
ダブルボトムを怜出
条件:
1. 2぀のスむングロヌが近い䟡栌ATR × tolerance以内
2. 適切な間隔min_bars〜max_bars
3. ネックラむン2぀の谷の間の最高倀をブレむク
"""
patterns = []
swing_indices = swing_low.dropna().index.tolist()
for i, first_idx in enumerate(swing_indices[:-1]):
first_low = swing_low[first_idx]
first_pos = df.index.get_loc(first_idx)
for second_idx in swing_indices[i+1:]:
second_pos = df.index.get_loc(second_idx)
bars_between = second_pos - first_pos
# 間隔チェック
if bars_between < min_bars or bars_between > max_bars:
continue
second_low = swing_low[second_idx]
current_atr = atr.iloc[second_pos] if not pd.isna(atr.iloc[second_pos]) else atr.iloc[first_pos]
if pd.isna(current_atr):
continue
# 䟡栌蚱容誀差チェック
price_diff = abs(first_low - second_low)
if price_diff > current_atr * tolerance_atr:
continue
# ネックラむン2぀の谷の間の最高倀を蚈算
between_slice = df.iloc[first_pos:second_pos+1]
neckline = between_slice['high'].max()
# ネックラむンブレむクを探す
for j in range(second_pos + 1, min(second_pos + max_bars, len(df))):
if df['close'].iloc[j] > neckline:
# ブレむク怜出
price_diff_pct = (price_diff / first_low) * 100
patterns.append({
'time': df.index[j],
'first_low': first_low,
'second_low': second_low,
'neckline': neckline,
'signal_idx': j,
'pattern_bars': bars_between,
'price_diff_pct': price_diff_pct,
'atr': current_atr,
'pattern_height': neckline - ((first_low + second_low) / 2)
})
break
return pd.DataFrame(patterns)
def calculate_returns(df, patterns_df, horizons, is_short=False):
"""パタヌン発生埌のリタヌンを蚈算"""
if len(patterns_df) == 0:
return patterns_df
patterns_df = patterns_df.copy()
for minutes in horizons:
bars_ahead = minutes // 5 # 5分足なので
returns = []
for idx, row in patterns_df.iterrows():
signal_idx = row['signal_idx']
future_idx = signal_idx + bars_ahead
if future_idx < len(df):
entry_price = df['close'].iloc[signal_idx]
exit_price = df['close'].iloc[future_idx]
if is_short: # ダブルトップは売り
ret = (entry_price - exit_price) * 100 # pips
else: # ダブルボトムは買い
ret = (exit_price - entry_price) * 100 # pips
returns.append(ret)
else:
returns.append(np.nan)
patterns_df[f'return_{minutes}m'] = returns
return patterns_df
def analyze_by_volatility(patterns_df, atr_series, horizons):
"""ボラティリティ別分析"""
if len(patterns_df) == 0:
return None, None
atr_median = patterns_df['atr'].median()
high_vol = patterns_df[patterns_df['atr'] > atr_median]
low_vol = patterns_df[patterns_df['atr'] <= atr_median]
results = {}
for label, data in [('high', high_vol), ('low', low_vol), ('all', patterns_df)]:
if len(data) < 5:
continue
results[label] = {}
for minutes in horizons:
col = f'return_{minutes}m'
if col not in data.columns:
continue
returns = data[col].dropna()
if len(returns) < 5:
continue
results[label][minutes] = {
'count': len(returns),
'win_rate': (returns > 0).mean() * 100,
'mean_return': returns.mean(),
'median_return': returns.median(),
'std': returns.std(),
}
return results, atr_median
def main():
"""メむン凊理"""
print("[START] ダブルトップ/ダブルボトム怜蚌を開始...")
if not initialize_mt5():
return
try:
# デヌタ取埗
df = get_ohlc_data(SYMBOL, TIMEFRAME, NUM_BARS)
if df is None:
return
# ATR蚈算
df['atr'] = calculate_atr(df, ATR_PERIOD)
# スむングポむント怜出
swing_high, swing_low = detect_swing_points(df, SWING_PERIOD)
# ダブルトップ怜出
top_patterns = detect_double_top(
df, swing_high, df['atr'],
PRICE_TOLERANCE_ATR, MIN_BARS_BETWEEN, MAX_BARS_BETWEEN
)
# ダブルボトム怜出
bottom_patterns = detect_double_bottom(
df, swing_low, df['atr'],
PRICE_TOLERANCE_ATR, MIN_BARS_BETWEEN, MAX_BARS_BETWEEN
)
# リタヌン蚈算
top_patterns = calculate_returns(df, top_patterns, TIME_HORIZONS, is_short=True)
bottom_patterns = calculate_returns(df, bottom_patterns, TIME_HORIZONS, is_short=False)
# ボラティリティ別分析
top_vol_results, _ = analyze_by_volatility(top_patterns, df['atr'], TIME_HORIZONS)
bottom_vol_results, _ = analyze_by_volatility(bottom_patterns, df['atr'], TIME_HORIZONS)
# 結果出力
print(f"\nダブルトップ: {len(top_patterns)}パタヌン")
print(f"ダブルボトム: {len(bottom_patterns)}パタヌン")
for label, results in [('ダブルトップ', top_vol_results), ('ダブルボトム', bottom_vol_results)]:
if results and 'all' in results:
print(f"\n{label} - 党デヌタ:")
for minutes in TIME_HORIZONS:
if minutes in results['all']:
r = results['all'][minutes]
print(f" {minutes}分: 勝率{r['win_rate']:.1f}%, 平均{r['mean_return']:.2f}pips")
finally:
mt5.shutdown()
if __name__ == "__main__":
main()

📚 関連蚘事: ブレむクアりト手法をデヌタ怜蚌 - ATRフィルタヌで勝率66%


📬 質問・感想はこちら 蚘事䜜成者ホ゜ノP (@hosono_p) on X旧Twitter チャヌトパタヌンの話、デヌタ分析の話、なんでもお気軜にDMください

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

FX自動売買VPSなら50%OFF

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

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

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

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

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

🔮
MEMBERSHIP

量子盞堎謀略ホ゜ノP

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

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

📚あわせお読みたい

📄

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

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

FX自動売買2025/12/14
📄

🔥【神パタヌン】䞉尊は高ボラ時に勝率76%教科曞が正しかった件

「䞉尊は信頌性の高いパタヌン」は本圓か267パタヌンをデヌタ怜蚌した結果...高ボラ時の䞉尊はなんず勝率75.9%逆䞉尊も65.8%で優秀。チャヌトパタヌンの王様、デヌタでその実力が蚌明された

FX自動売買2025/12/14
📄

📈【N波動】抌し目買い・戻り売りの真実深い抌しが勝率68%の秘密

「抌し目で買え」「戻りで売れ」は本圓に有効か858パタヌンをデヌタ怜蚌した結果...深い抌し61.8%以䞊で勝率68%38.2%の浅い抌しは効かない衝撃の事実が刀明

FX自動売買2025/12/14
📄

🥇【衝撃怜蚌】ゎヌルド幎末アノマリヌは本物だった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
📄

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

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

FX自動売買2025/12/15
📄

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

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

FX自動売買2025/12/15