RSIだけで勝てる?【使えない説をAI検証】手法・だまし回避・最強設定まとめ

インジケーター

【結論】RSIだけで勝てる?それとも使えない?

FXでRSIをそのまま使っただけでは長期的に勝ち続けることはできない。

AIによる検証では、勝率はおよそ64.1%・PF1.026とほぼ横ばい。

ただし、だましを回避する条件(Zigzag)を加えると、PF約1.1に改善する場面もあった。

つまり「RSIだけで勝てる」は微妙なところ。

でも、組み合わせればFXでRSIで勝てる。

導入

RSI(Relative Strength Index)。

テクニカルの定番中の定番。

昔から「RSI30以下で買い、70以上で売り」なんて言われてきた。
一見シンプルで、初心者もすぐに飛びつく。

「RSIだけで勝てる」なんて声は多い。
でも本当に?と私は疑った。

だからAIに検証を任せた。

感覚ではなく、数字で答えを出したかった。

RSIとは?なぜRSI手法が人気なのか

RSIは相場の「買われすぎ」「売られすぎ」を数値化する指標。

0〜100の間で推移し、一般的には70以上で売り、30以下で買いと解釈される。

なぜ人気か?
シンプルだから。
赤青緑のラインがなくても、一つの数値で判断できる。

「数字を見れば良い」そんな直感性が支持されてきた。

でも、実際にそのまま従うとどうなるか。

AIに検証を依頼してみた

検証条件はこう設定した。

    ・環境:MT4
    ・通貨ペア:USDJPY

    ・期間:2021年1月〜2025年8月

    ・時間足:5分足

    ・RSI設定値:期間14
    ・売買ルール:RSI30以下で買い、70以上で売り
    ・決済:反対シグナルが点灯したらクローズ

    ・資金管理:固定ロット
    ※今回の検証はAXIORYのヒストリカルティックデータを使用しています。
    (他社口座ではティック精度が異なるため、同じ成績は再現できません。
    なおスプレッドを含まないバックテストベースでの分析です)

AXIORYのヒストリカルデータを読み込ませた後、AIに入力したプロンプトは以下。

RSIだけで勝てるかどうかを検証してください。

条件:
・通貨ペア:USDJPY

・期間:2021年1月〜2025年8月

・時間足:5分足

・RSI設定値:期間14
・売買ルール:RSI30以下で買い、70以上で売り
・決済:反対シグナルが点灯したらクローズ

・資金管理:固定ロット

出力内容:
①総トレード数
②勝率
③平均リスクリワード比
④トータル損益 
⑤プロフィットファクター(PF)

初回検証の結果 → 期待を裏切る

AIの出した数字は以下。

    ・総トレード数:2,554回
    ・勝率:64.1%

    ・平均リスクリワード比:0.57

    ・トータル損益:+1,255 pips

    ・PF:1.026

「RSIシグナルだけ」に従った結果は横ばい。


「鉄板の逆張りロジック」は数字の前に崩れ落ちた。

なぜRSIだけでは勝てないのか

レンジとトレンドを区別できない


RSIは値動きに反応するだけ。トレンド相場では「売られすぎ」「買われすぎ」状態が続き、その間に逆張りしたら大きく踏み上げられる。

だましが多すぎる

30を割ったと思ったらすぐ反転、70を超えたと思ったらすぐ落ちる。短期足では特に顕著。

決済が遅れる

反対シグナルを待つと、含み益が簡単にゼロになる。
…結局、RSI単体は「環境認識がない逆張りサイン」でしかない。

条件を加えて再検証

では、どうすれば勝てるようになるのか?


AIに次のインジケーターを加えて再検証してもらった。

「Zigzag」
Depth : 12
Deviation : 30
Backstep : 12

ルールを継続

結果はこうなった。

    ・総トレード数:2,554回 → 950回

    ・勝率:64.1% → 67.89%

    ・平均リスクリワード比:0.57 → 0.52

    ・トータル損益:+1,255 pips → +1,916 pips
    ・PF:1.026 → 1.095

数字がプラスに転じた。

「だけ」では負けても、トレンド系のインジケーター「Zigzag」との組み合わせなら勝てる。

今すぐ使えるTradingViewのインジケーター

//@version=5
indicator("RSI x ZigZag Filter (70/30) — Deviation model (MT4-like)", overlay=true)

// ===== Inputs =====
// RSI
rsiLen  = input.int(14, "RSI Length")
buyLvl  = input.float(30, "RSI Buy Level (cross up)")
sellLvl = input.float(70, "RSI Sell Level (cross down)")

// ZigZag(MT4に近いパラメータ感)
leftBars  = input.int(12,  "ZigZag Depth (left bars)",  minval=1)
rightBars = input.int(12,  "ZigZag Backstep (right bars)", minval=1)
useCustomPip = input.bool(false, "Override Pip Size?")
pipManual    = input.float(0.01, "Pip Size (price units)", step=0.0001, tooltip="例: USDJPYなら通常0.01(=1 pip)。EURUSDなら0.0001。")
deviationPips = input.float(30.0, "Deviation (pips)", step=0.1, tooltip="反転とみなす最小幅(pips)。MT4のDeviationに相当")

// ===== Pip・Deviation(価格単位に変換) =====
isJPY   = str.contains(syminfo.currency, "JPY") or str.contains(syminfo.ticker, "JPY")
pipAuto = isJPY ? 0.01 : syminfo.mintick
pip     = useCustomPip ? pipManual : pipAuto
devPx   = deviationPips * pip

// ===== RSI =====
rsi = ta.rsi(close, rsiLen)
longTrig  = ta.crossover(rsi, buyLvl)
shortTrig = ta.crossunder(rsi, sellLvl)

// ===== Pivot(確定ピボット) =====
// MT4のDepth/Backstep ≒ ta.pivothigh/low(leftBars, rightBars) に対応
ph = ta.pivothigh(high, leftBars, rightBars)  // ピボット確定バーの「高値」
pl = ta.pivotlow(low,  leftBars, rightBars)   // ピボット確定バーの「安値」
// 確定バーのインデックス(現在バーからrightBars本前)
phBar = not na(ph) ? (bar_index - rightBars) : na
plBar = not na(pl) ? (bar_index - rightBars) : na

// ===== Deviationフィルタ付き ZigZag 構築(非リペイント確定式) =====
var float lastPivotPrice = na
var int   lastPivotBar   = na
var bool  lastWasHigh    = na
var int   dir            = 0   // +1: up leg / -1: down leg

// ライン管理(描画しすぎ対策)
var line[] lns = array.new_line()

f_drawLine(_x1, _y1, _x2, _y2) =>
    l = line.new(_x1, _y1, _x2, _y2, xloc=xloc.bar_index, extend=extend.none, color=color.orange, width=2)
    array.push(lns, l)
    if array.size(lns) > 200
        line.delete(array.shift(lns))

// 新規ピボット候補(Deviationチェックを通す)
newHighPivot = not na(ph) and (na(lastPivotPrice) or math.abs(ph - lastPivotPrice) >= devPx)
newLowPivot  = not na(pl) and (na(lastPivotPrice) or math.abs(pl - lastPivotPrice) >= devPx)

// ピボット確定&ZigZag更新
if newHighPivot
    // 直前のピボットがあれば線で結ぶ
    if not na(lastPivotPrice) and not na(lastPivotBar)
        f_drawLine(lastPivotBar, lastPivotPrice, phBar, ph)
    lastPivotPrice := ph
    lastPivotBar   := phBar
    lastWasHigh    := true
    dir            := -1   // 高値が確定 => 次の足は下方向レッグへ

if newLowPivot
    if not na(lastPivotPrice) and not na(lastPivotBar)
        f_drawLine(lastPivotBar, lastPivotPrice, plBar, pl)
    lastPivotPrice := pl
    lastPivotBar   := plBar
    lastWasHigh    := false
    dir            := +1   // 安値が確定 => 次の足は上方向レッグへ

// ===== Signals: RSIクロス × ZigZag方向 =====
longSignal  = longTrig  and dir == 1
shortSignal = shortTrig and dir == -1

// ===== Plots =====
plotshape(longSignal,  title="BUY",  style=shape.labelup,   text="BUY",  color=color.new(color.lime, 0), size=size.tiny, location=location.belowbar)
plotshape(shortSignal, title="SELL", style=shape.labeldown, text="SELL", color=color.new(color.red, 0),  size=size.tiny, location=location.abovebar)
bgcolor(dir == 1 ? color.new(color.lime, 92) : dir == -1 ? color.new(color.red, 92) : na)

// ===== Alerts =====
alertcondition(longSignal,  "BUY (RSI x ZigZag)",  "BUY: RSI crossed above 30 with ZigZag up leg")
alertcondition(shortSignal, "SELL (RSI x ZigZag)", "SELL: RSI crossed below 70 with ZigZag down leg")

// ===== Tips(画面下にヒントを出す) =====
var label hint = na
if barstate.islast
    if na(hint)
        hint := label.new(bar_index, na, "", style=label.style_label_left, textcolor=color.white, color=color.new(color.black, 0))
    info = "RSI: " + str.tostring(rsiLen) + " | Levels 30/70\n" +
           "ZigZag: Depth=" + str.tostring(leftBars) + " / Backstep=" + str.tostring(rightBars) +
           " / Deviation=" + str.tostring(deviationPips) + " pips (" + str.tostring(devPx) + " price)"
    label.set_text(hint, info)
    label.set_xy(hint, bar_index, low)

「RSIは使えない」と言う人へ

確かにRSI単体では勝てない。
だから「使えない」と言われるのも無理はない。
でも、それは条件なしの素手で戦っているからだ。
逆にいえば、
トレンドフィルターを加え、だまし回避をする設計をすれば「使える」。
AIが出した数字は、その現実的な答えだった。

だましを回避するRSI最強設定値

RSIの設定値を20/80・25/75・30/70で横並び比較。

RSIだけとRSI×ZigZagの2モデルで、総トレード数/勝率/PF/総損益を整理しました。

RSIのみ vs RSI×ZigZag

閾値 モデル 総トレード数 勝率(%) 平均RR トータル損益(pips) PF
20/80 RSIのみ 365 61.37 0.66 776.0 1.046
20/80 RSI×ZigZag方向フィルタ 188 67.02 0.58 1632.6 1.182
25/75 RSIのみ 902 58.76 0.65 -1989.9 0.924
25/75 RSI×ZigZag方向フィルタ 434 65.21 0.58 1103.1 1.078
30/70 RSIのみ 2005 62.84 0.58 -898.6 0.977
30/70 RSI×ZigZag方向フィルタ 950 67.89 0.52 1916.2 1.095

25/75はバランス良く回転、30/70は勝率寄り、20/80はシグナル厳選で件数減。
 ZigZagフィルタはダマシ減でPFが安定しやすい一方、成立数は減ります。

3ロジックの組み合わせ失敗パターン

ボリンジャーバンド逆張り

ボラ拡大局面で再侵入→再拡張となりやすく、逆行を抱えやすい。強トレンド日は逆張りが機能しにくい。

HLバンド(ドンチャン)順張り

ブレイクの鮮度が落ちると押し目が作られず、フェイクに巻き込まれやすい。ニュース相場でRRが崩れる。

一目均衡表(雲)フィルタ

条件が厳しく件数が足りない上、クロス直後の反転で早仕舞いが増える。逆シグナル待ちは利確を削りがち。

3ロジック比較サマリー(USDJPY M5/2021-01〜2025-08)
ロジック 戦略 総トレード数 勝率(%) 平均RR トータル損益(pips) PF
RSI×BB逆張り・再侵入型(M5) RSI×BB逆張り・再侵入型(M5) SL=1.0ATR / TP=1.4ATR / 半分利確=0.7ATR / BE=+1.0ATR 6233 35.33 0.79 -8849.7 0.568
RSI×ドンチャン順張り・モメンタム検出(デイトレ) RSI×Donchian順張り(M15信号→M5押し) SL=1.4ATR / TP1=1.6ATR(50%) / TP2=2.3ATR(50%) 5917 40.90 1.46 442.7 1.008
RSI×一目(M5, 70/30+雲フィルタ) RSI(70/30) × 一目(雲上/下+転換>基準 or 転換<基準)+Kijun早期手仕舞い 2 100.00 NaN 32.9 NaN

AI検証結果 │ まとめ

・RSIだけ → 勝率64.1%、PF1.026、横ばい。

・RSI+Zigzag → 勝率67.89%、PF1.095、プラス。

結論 : RSIは「だけで勝てる」魔法のインジではない。


でも──条件を組み合わせれば、最強の武器になる可能性は十分ある。

    特典&ご案内

    今回の検証は Axioryのヒストリカルデータを使用しました。
    AXIORY口座を利用しない場合、同じ結果は再現できません)

    詳細データや手法はPDFにまとめ、
    
今だけ【メルマガ登録者限定】で無償配布しています。

    ▶︎ 無料で今すぐ手に入れる(次回より有償化予定)
    ※この条件での配布は今回限り。
再配布は一切行いません。