Web Lukes
📄

【検証】YouTubeで話題のBB+RSI(2)戦略、EURUSDじゃなくてBTCで使え!2年間251トレードの真実

公開日: 2025/12/27

YouTubeのBB+RSI(2)戦略、本当の使い方はBTCだった

😤 きっかけはYouTube

YouTubeでこんな戦略が紹介されていた。

📺 参考動画: BB+RSI(2)逆張り戦略

Code
【戦略ルール】
時間足: 30分足
通貨ペア: EURUSD(と紹介されていた)
エントリー条件(ロング):
1. BB下限(-2σ) > 100SMA(上昇トレンド中)
2. 価格がBB下限(-2σ)にタッチ
3. RSI(2) ≤ 5
利確: BB上限(+2σ)に到達
損切り: 終値が100SMAを下回る

「売られすぎからの反発を狙う」シンプルな逆張り戦略。

本当に勝てるのか? 検証してみた。


📊 まずEURUSDで検証(2025年1月〜)

Pythonバックテスト結果

条件累計pipsPF
楽観的(シグナル足終値エントリー)+403.31.58
現実的(次足始値エントリー)+367.91.51
悲観的(SL優先評価)+347.71.47
スプレッド1pip込み+259.71.33

厳しく見積もっても**+259pips、PF1.33**。

「お、意外と使えるじゃん」と思った。


😱 30通貨ペアで検証したら...

MT5のストラテジーテスターで30通貨ペア × 2年間を一気に検証。

衝撃の結果

通貨ペア損益PF判定
BTCJPYm+1,901.631.31⭕ 最強
USDCADm+279.241.39⭕
EURUSDm+181.711.17△
CADJPYm+56.161.04△
XAUUSDm-457.290.94❌
GBPJPYm-1,475.810.45❌
GBPNZDm-1,555.690.41❌
...他24ペア全部マイナス-❌

30通貨ペア中、プラスはたった4つ!

しかもBTCJPYが圧倒的。EURUSDの10倍以上の利益。


🏆 BTCJPYの2年間バックテスト結果

BTCJPYバックテスト設定

検証条件

項目設定
EABB_RSI2_Strategy
通貨ペアBTCJPYm
時間足M30(30分足)
期間2023.01.01 〜 2025.12.20
初期資金1,000,000 USD
モデル1分足OHLC

結果詳細

BTCJPYバックテスト結果

指標結果
総損益+1,901.63
PF1.31
期待利得7.58
シャープレシオ3.18
リカバリファクター2.54
取引数251
勝ちトレード121 (48.21%)
負けトレード130 (51.79%)
最大勝ちトレード287.42
最大負けトレード-283.37
最大ドローダウン0.06% (616.58)

資産曲線

BTCJPY資産曲線

綺麗な右肩上がり! 特に2024年後半からの伸びが顕著。


💡 なぜBTCで効くのか

EURUSDとBTCの違い

Code
【EURUSD】
- ボラティリティ: 低〜中
- 動き方: 緩やか、レンジが多い
- RSI(2)≤5: あまり発生しない
- 発生しても反発が弱い
【BTCJPY】
- ボラティリティ: 高
- 動き方: 急落・急騰が多い
- RSI(2)≤5: 急落時に頻発
- 急落後のV字回復が多い

この戦略の本質

Code
BB + RSI(2) = 「急落後の反発」を狙う
条件:
- BB下限 > 100SMA → 上昇トレンド中
- 価格がBB下限タッチ → 一時的な急落
- RSI(2)≤5 → 極端な売られすぎ
→ 「上昇トレンド中の押し目買い」
→ BTCの急落後V字回復にピッタリ

🔧 EA(MT5用)完全公開

以下のEAをMT5のExpertsフォルダに保存してコンパイルすれば使えます。

ソースコード

MQL5
//+------------------------------------------------------------------+
//| BB_RSI2_EURUSD_M30.mq5 |
//| BB + RSI(2) Strategy EA |
//| |
//| 戦略ルール: |
//| - エントリー条件(ロング): |
//| 1. BB下限(-2σ) > 100SMA |
//| 2. 価格が-2σにタッチ(安値が-2σ以下) |
//| 3. RSI(2) ≤ 5 |
//| - 利確: BB上限(+2σ)に到達 |
//| - 損切り: 終値が100SMAを下回る |
//+------------------------------------------------------------------+
#property copyright "BB RSI2 Strategy"
#property link ""
#property version "1.00"
#property strict
#include <Trade\Trade.mqh>
//--- Input parameters
input group "=== 基本設定 ==="
input double LotSize = 0.1; // ロットサイズ
input int MagicNumber = 20251227; // マジックナンバー
input string TradeComment = "BB_RSI2"; // コメント
input group "=== インジケーター設定 ==="
input int SMA_Period = 100; // SMA期間
input int BB_Period = 20; // ボリンジャーバンド期間
input double BB_Deviation = 2.0; // ボリンジャーバンド偏差
input int RSI_Period = 2; // RSI期間
input double RSI_Threshold = 5.0; // RSIしきい値
input group "=== 時間設定 ==="
input int MaxBarsHold = 100; // 最大保有本数
//--- Global variables
CTrade trade;
int handleSMA;
int handleBB;
int handleRSI;
datetime lastBarTime = 0;
datetime entryBarTime = 0;
int barsHeld = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// インジケーターハンドル作成
handleSMA = iMA(_Symbol, PERIOD_CURRENT, SMA_Period, 0, MODE_SMA, PRICE_CLOSE);
handleBB = iBands(_Symbol, PERIOD_CURRENT, BB_Period, 0, BB_Deviation, PRICE_CLOSE);
handleRSI = iRSI(_Symbol, PERIOD_CURRENT, RSI_Period, PRICE_CLOSE);
if(handleSMA == INVALID_HANDLE || handleBB == INVALID_HANDLE || handleRSI == INVALID_HANDLE)
{
Print("インジケーター作成失敗");
return INIT_FAILED;
}
// Trade設定
trade.SetExpertMagicNumber(MagicNumber);
trade.SetDeviationInPoints(10);
trade.SetTypeFilling(ORDER_FILLING_IOC);
Print("BB + RSI(2) EA 初期化完了");
Print("SMA期間: ", SMA_Period);
Print("BB期間: ", BB_Period, " 偏差: ", BB_Deviation);
Print("RSI期間: ", RSI_Period, " しきい値: ", RSI_Threshold);
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(handleSMA != INVALID_HANDLE) IndicatorRelease(handleSMA);
if(handleBB != INVALID_HANDLE) IndicatorRelease(handleBB);
if(handleRSI != INVALID_HANDLE) IndicatorRelease(handleRSI);
Print("BB + RSI(2) EA 終了");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 新しいバーでのみ処理
datetime currentBarTime = iTime(_Symbol, PERIOD_CURRENT, 0);
if(currentBarTime == lastBarTime) return;
lastBarTime = currentBarTime;
// インジケーター値取得
double sma[], bbUpper[], bbMiddle[], bbLower[], rsi[];
if(CopyBuffer(handleSMA, 0, 1, 1, sma) <= 0) return;
if(CopyBuffer(handleBB, 0, 1, 1, bbMiddle) <= 0) return;
if(CopyBuffer(handleBB, 1, 1, 1, bbUpper) <= 0) return;
if(CopyBuffer(handleBB, 2, 1, 1, bbLower) <= 0) return;
if(CopyBuffer(handleRSI, 0, 1, 1, rsi) <= 0) return;
// 前のバーの価格
double prevLow = iLow(_Symbol, PERIOD_CURRENT, 1);
double prevClose = iClose(_Symbol, PERIOD_CURRENT, 1);
// ポジションチェック
bool hasPosition = HasPosition();
if(hasPosition)
{
barsHeld++;
CheckExitConditions(sma[0], bbUpper[0]);
}
else
{
CheckEntryConditions(sma[0], bbLower[0], bbUpper[0], rsi[0], prevLow);
}
}
//+------------------------------------------------------------------+
//| エントリー条件チェック |
//+------------------------------------------------------------------+
void CheckEntryConditions(double sma, double bbLower, double bbUpper, double rsi, double prevLow)
{
// 条件1: BB下限 > 100SMA(上昇トレンド中)
if(bbLower <= sma) return;
// 条件2: 価格が-2σにタッチ
if(prevLow > bbLower) return;
// 条件3: RSI(2) ≤ 5
if(rsi > RSI_Threshold) return;
// 全条件満たした → エントリー
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
if(trade.Buy(LotSize, _Symbol, ask, 0, 0, TradeComment))
{
Print("買いエントリー: ", ask);
Print(" BB下限: ", bbLower, " > SMA: ", sma);
Print(" RSI: ", rsi);
Print(" TP目標(BB上限): ", bbUpper);
entryBarTime = iTime(_Symbol, PERIOD_CURRENT, 0);
barsHeld = 0;
}
else
{
Print("エントリー失敗: ", GetLastError());
}
}
//+------------------------------------------------------------------+
//| 決済条件チェック |
//+------------------------------------------------------------------+
void CheckExitConditions(double sma, double bbUpper)
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double prevClose = iClose(_Symbol, PERIOD_CURRENT, 1);
double prevHigh = iHigh(_Symbol, PERIOD_CURRENT, 1);
string exitReason = "";
bool shouldExit = false;
// 条件1: TP - 高値がBB上限に到達
if(prevHigh >= bbUpper)
{
exitReason = "TP (BB上限到達)";
shouldExit = true;
}
// 条件2: SL - 終値が100SMAを下回る
else if(prevClose < sma)
{
exitReason = "SL (100SMA下抜け)";
shouldExit = true;
}
// 条件3: タイムアウト
else if(barsHeld >= MaxBarsHold)
{
exitReason = "TIMEOUT";
shouldExit = true;
}
if(shouldExit)
{
CloseAllPositions(exitReason);
}
}
//+------------------------------------------------------------------+
//| ポジション有無チェック |
//+------------------------------------------------------------------+
bool HasPosition()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(ticket > 0)
{
if(PositionGetString(POSITION_SYMBOL) == _Symbol &&
PositionGetInteger(POSITION_MAGIC) == MagicNumber)
{
return true;
}
}
}
return false;
}
//+------------------------------------------------------------------+
//| 全ポジション決済 |
//+------------------------------------------------------------------+
void CloseAllPositions(string reason)
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(ticket > 0)
{
if(PositionGetString(POSITION_SYMBOL) == _Symbol &&
PositionGetInteger(POSITION_MAGIC) == MagicNumber)
{
double profit = PositionGetDouble(POSITION_PROFIT);
if(trade.PositionClose(ticket))
{
Print("決済: ", reason);
Print(" 利益: ", profit);
Print(" 保有バー数: ", barsHeld);
}
else
{
Print("決済失敗: ", GetLastError());
}
}
}
}
}
//+------------------------------------------------------------------+

使い方

  1. 上記コードを BB_RSI2_BTCJPY.mq5 として保存
  2. MT5のExpertsフォルダに配置
  3. コンパイル
  4. BTCJPYの30分足チャートにドラッグ

⚠️ 注意点

この戦略が有効な条件

Code
⭕ 有効:
- BTCJPY(最強)
- USDCAD(まあまあ)
- 上昇トレンド中
❌ 無効:
- ほぼ全てのFX通貨ペア
- ゴールド(XAUUSD)
- クロス円全般

リスク管理

  • 勝率は48%程度(負けの方が多い)
  • 利益は「勝ちトレードの大きさ」で稼ぐ
  • 最大ドローダウンは小さい(0.06%)が、連敗はある

🎯 結論

YouTubeの戦略、正しい使い方

項目YouTubeの紹介検証結果
通貨ペアEURUSDBTCJPY
期待利得不明7.58
PF不明1.31
判定-BTC専用戦略

最終結論

Code
【答え】
BB + RSI(2)戦略は「BTC用」だった。
理由:
1. 30通貨ペア中、プラスは4つだけ
2. BTCJPYが圧倒的に好成績
3. ボラティリティの高い急落後反発に最適化された戦略
4. FX通貨ペアには向いていない
YouTubeでEURUSD用として紹介されていたが、
本当の使い方はBTCだった。

📚 検証の経緯まとめ

  1. YouTubeで戦略を発見
  2. Pythonで2025年のEURUSDを検証 → +259pips、PF1.33で「使える」と判断
  3. MT5で30通貨ペア×2年間を検証 → ほぼ全滅
  4. BTCJPYだけが突出して好成績 → 本当の用途が判明
  5. EA化して公開

「紹介された通貨ペアが正解とは限らない」 という教訓。

検証大事。


📺 参考動画: BB+RSI(2)逆張り戦略

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

FX自動売買VPSなら50%OFF

キャンペーンで月1,790円〜。MT4/MT5プリインストール済み、自動復旧機能付き。14日間無料お試し。

シンクラウドデスクトップ for FX
ゴトー日EAを探しているならソースコード付

4年で資金4.7倍のバックテスト実績。ソースコード付きで自由にカスタマイズ可能。

ゴトー日EA Ultimate版(3,980円)

※上記リンクにはプロモーション(広告)が含まれています

🔮
MEMBERSHIP

量子相場謀略|ホソノP

ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。

✓EAソースコード公開
✓バックテスト生データ共有
✓リアルタイム相場分析
✓メンバー限定記事
メンバーシップに参加する※ noteアカウントで簡単登録

📚あわせて読みたい

📄

【検証】BBスクイーズ後のブレイクアウトで+30,000pips!ゴールドが最強

ボリンジャーバンドのスクイーズ(バンド幅縮小)後のブレイクアウトを6,865トレード検証。買いで+40,197pips、XAUUSDで+18,917pips。H4とH1が有効。

trading2025/12/24
📄

【検証】RSIクロスは買いで+30,000pips!ゴールドH1が最強

RSI30オーバークロス(買い)とRSI70アンダークロス(売り)を16,862トレード検証。買いで+30,142pips、売りは-62,363pips。XAUUSDが圧倒的で+20,419pips。

trading2025/12/24
📄

【検証】FVG終点 vs オーダーブロック、どっちでエントリーすべき?25,656トレードで決着

SMC/ICTトレードの永遠の論争「FVGが埋まったところでエントリー」vs「オーダーブロックまで引きつけてエントリー」を25,656トレード・6年間で徹底検証。結果はOBが+125,866pips優位という圧倒的差に。

trading2025/12/27
📄

【検証】ナンピン・マーチンで5万〜100万稼げる確率は?利益目標別シミュレーション

ナンピン・マーチンで5万、10万、20万、50万、100万円の利益を出せる確率を完全シミュレーション。自己資金10万〜100万での到達率と期待値を徹底検証。

trading2025/12/27
📄

【検証】アリゲーター指標は買いだけで+42,000pips!売りは地獄だった

Bill Williamsのアリゲーター指標を6年・10,962トレード検証。買いシグナルは勝率52.3%で累計+42,559pips、売りは47.2%で-34,213pips。XAUUSD(ゴールド)が最強で累計+10,359pips。

trading2025/12/24
📄

【検証】FXの『勝てる手法』は本当に勝てるのか?キャリー・MA・トレンドフォローを6年分検証

『FXで勝てる証明された手法』として挙げられるキャリートレード、移動平均クロス、トレンドフォローを6年分の実データで検証。キャリートレード(円売り)は勝率60%・累計+19,051pips、MAクロスは勝率50%だが累計+15,000pips。

trading2025/12/24