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が崩れる。
一目均衡表(雲)フィルタ
条件が厳しく件数が足りない上、クロス直後の反転で早仕舞いが増える。逆シグナル待ちは利確を削りがち。
ロジック | 戦略 | 総トレード数 | 勝率(%) | 平均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にまとめ、
今だけ【メルマガ登録者限定】で無償配布しています。
▶︎ 無料で今すぐ手に入れる(次回より有償化予定)
※この条件での配布は今回限り。
再配布は一切行いません。