※当サイトはアフィリエイト広告(Amazonアソシエイツ等)を利用しています。
こんにちは。trade-engineer.com 運営者のHです。
RSIの逆張りシグナルは「売られすぎ・買われすぎ」を示す教科書的な使い方として広く知られていますが、実際にバックテストで検証した結果を公開しているケースはあまり多くありません。今回はMQL4を使ってUSDJPY 5分足の確定足ベースSTFで、RSIの期間・閾値・複合条件を変えながら勝率がどう変わるかを数値で確認します。
- RSI(14)の70/30逆張りは5分後判定で勝率53.02%、判定時間を伸ばすほど勝率が上昇する
- RSI期間を短くすると(7)エントリー回数は増えるが勝率が低下し、長くすると(21)逆の傾向になる
- 閾値を80/20に引き上げると勝率は上がるがエントリー機会が激減し、実用性とのトレードオフが生じる
- ロウソク足の方向一致フィルターを加えると、エントリー回数を保ちながら勝率を改善できる
RSI逆張りの検証条件と基本結果
まず検証の全体像を整理します。この記事で使うデータはすべて同じ環境で取ったものなので、条件間の比較が成立します。
検証環境の設定(USDJPY 5分足・確定足STF)
今回の検証環境は以下のとおりです。シングルタイムフレーム(STF)で確定足ベースのエントリー判定を使い、他のインジケーターや時間帯フィルターは一切加えていません。RSI単体の素の勝率を確認するためです。
| 項目 | 設定値 |
|---|---|
| 通貨ペア | USDJPY |
| 時間足 | 5分足 |
| 判定方式 | 確定足ベース STF(シングルタイムフレーム) |
| エントリー方向 | 逆張り(RSIが70超→売り、30割れ→買い) |
| 判定時間 | 5分後・10分後・15分後(1本・2本・3本後の終値) |
「判定時間」は、エントリーから何本後の終値でトレードを評価するかを示します。5分後=1本後の終値、15分後=3本後の終値です。
確定足ベースとは「現在進行中のローソク足が確定(閉じた)タイミングでインジケーターの値を参照する」方式です。リペイントを防ぐために重要な設定で、MQL4では iRSI(Symbol(), PERIOD_M5, 14, PRICE_CLOSE, 1) のように shift=1 を指定します。
RSI(14)レベル70/30の基本勝率
最初に最も標準的な設定、RSI期間14・閾値70/30での結果を確認します。これが今回の比較の基準になります。

RSI(14)のレベル70に到達した足の確定後に売りエントリー、レベル30に到達した足の確定後に買いエントリーするルールで検証しました。5分後判定の勝率は53.02%です。5分という短い時間では誤差の範囲に近く、RSI単体でエッジを出すには不十分な印象です。ただし損益分岐点(50%)は超えており、方向性としては機能していることは確認できます。
判定時間別(1本後・2本後・3本後)の比較
判定時間を変えると勝率はどう変わるでしょうか。5分後・10分後・15分後の3パターンで比較します。


5分後から判定時間を伸ばすほど勝率が上昇する傾向が確認できました。15分後(3本後)では5分後よりも2〜3ポイント高い結果になっています。これはRSIの示す「行き過ぎ」が解消されるまでに一定の時間がかかるためと考えられます。以降の比較は15分後判定を基準に進めます。
判定時間を伸ばすほど勝率が上がる傾向は、RSIに限らずモメンタム系インジケーター全般に見られます。ただし同時に「他のシグナルと重なる」リスクも増えるため、上位時間足の方向を確認するMTF分析と組み合わせる価値があります。
RSI期間を変えた場合の影響(7・14・21)
次に、RSIの計算期間を変えて勝率とエントリー回数がどう変わるかを確認します。期間7・14・21の3パターン、いずれも閾値70/30・15分後判定での比較です。
| RSI期間 | エントリー回数(相対) | 勝率 | 評価 |
|---|---|---|---|
| 7 | 大幅増(14の約3倍) | 低下 | 回数は稼げるが精度が落ちる |
| 14 | 基準 | 約55〜56% | バランスが最も取れている |
| 21 | 半分以下 | わずかに上昇 | サンプル不足で統計精度に不安 |
期間7では閾値70/30に到達する頻度が急増するためエントリー回数が大幅に増えますが、シグナルの「質」が低下して勝率が下がります。期間21では逆に、滅多に閾値に達しないため勝率はわずかに上がるものの、サンプル数が少なすぎて統計的な信頼度が下がります。期間14がエントリー回数と勝率のバランスとして最も現実的です。
閾値80/20と70/30の結果比較
閾値を標準の70/30から80/20に引き上げると「より強い行き過ぎ」だけを狙うことになります。直感的には勝率が上がりそうですが、実際の結果を確認します。
| 閾値 | エントリー回数(相対) | 勝率 | 評価 |
|---|---|---|---|
| 70/30 | 基準 | 基準(約55〜56%) | 回数・勝率ともに実用的 |
| 80/20 | 激減 | 上昇 | 月間エントリー機会が極めて少ない |
80/20は確かに勝率が上がりますが、エントリー回数が大幅に減少します。USDJPY 5分足でRSIが80を超える瞬間は頻繁には起きないため、戦略として機能させるには別の条件と組み合わせる必要があります。
エントリー回数が少ないほど「たまたま良かった」可能性が高くなります。閾値80/20で月間5〜10エントリーしか取れない場合、数ヶ月分のデータを集めないと統計的な有意性を主張できません。短期間の良結果を根拠に実運用するのは危険です。
フィルター追加の効果と実運用への展開
RSI単体での検証結果を踏まえ、フィルターを加えることで勝率を改善できるかを確認します。MQL5での実装コードと連敗リスクへの対処まで整理します。
ロウソク足の方向一致フィルターの結果
RSI(14)の70/30条件に「エントリー判定足のローソク足の方向」を追加したフィルターを検証します。売りエントリーの場合は「RSI(14)≥70 かつ 判定足が陽線」、買いエントリーは「RSI(14)≤30 かつ 判定足が陰線」という条件です。
この複合条件は「行き過ぎた方向へのローソク足が確定した瞬間」を狙います。RSI単体より絞り込まれますが、エントリー回数は実用的な水準を保ちながら勝率が改善されました。閾値80/20と同程度かそれ以上の勝率改善が、より多いエントリー回数で実現できています。
陽線確定後に売りというのは「上方向へのモメンタムが一時的に強まったが、RSIが過熱を示している状態」を捉えています。陽線だからといってそのまま上がり続けるとは限らず、むしろ短期的な反転が起きやすいタイミングと判断できます。
連敗パターンの分析と資金管理
勝率55〜57%という数字は「ほぼ互角」に近く、連敗が起きるのは避けられません。実際にバックテストを確認すると、RSIシグナルが密集するトレンド相場で連続して逆方向に動く区間が複数見られます。
| 連敗回数 | 確率の目安(勝率55%の場合) | 対策 |
|---|---|---|
| 3連敗 | 約9%(10回に1回程度) | 1回あたりの損失を資金の1〜2%以内に抑える |
| 5連敗 | 約2%(50回に1回程度) | ドローダウン上限を設定し一時停止ルールを持つ |
| 7連敗 | 約0.5% | EAのフォワードテストで先に確認する |
特にトレンドが強い時間帯(ロンドン・NYセッション開始直後)はRSI逆張りが機能しにくくなります。時間帯フィルターを加えることが改善の次のステップです。
MTF RSIとの組み合わせ可能性
5分足RSIだけでなく、上位時間足(15分・1時間足)のRSIも同時に確認するマルチタイムフレーム(MTF)分析は逆張りの精度を高める有効な手段です。
例えば「1時間足のRSIがニュートラル圏(40〜60)にある状態で5分足RSIが70を超えた場合にのみ売りエントリー」とする条件は、上位足トレンドと逆らう局面を除外できます。MTF RSIの実装については マルチタイムフレーム分析とMTF_RSIインジケーターの実装 で詳しく解説しています。
MQL5でのRSI逆張りロジック実装
今回検証した「RSI(14)≥70 かつ 確定足が陽線 → 売り」の条件をMQL5のEAに落とし込む場合のコア部分を示します。
// RSI + ローソク足フィルター(売り・買いエントリー条件)
// 確定足ベース: shift=1
double rsi_val = iRSI(_Symbol, PERIOD_M5, 14, PRICE_CLOSE, 1);
// 1本前(確定足)のローソク足の方向判定
double close1 = iClose(_Symbol, PERIOD_M5, 1);
double open1 = iOpen(_Symbol, PERIOD_M5, 1);
bool is_bullish = (close1 > open1); // 陽線
// 売りエントリー条件: RSI過熱 + 陽線確定
bool sell_signal = (rsi_val >= 70.0) && is_bullish;
// 買いエントリー条件: RSI売られすぎ + 陰線確定
bool buy_signal = (rsi_val <= 30.0) && !is_bullish;
バックテストの実装と勝率確認の手順については MQLでバックテストを取って勝率を確認する の記事を参照してください。
上記コードはエントリー条件の判定部分のみです。実際のEAにするにはOnTick関数内でのポジション管理、ストップロス・テイクプロフィットの設定、1ポジションのみ保有するガード処理などを追加する必要があります。
ローソク足判定のMQL4実装と注意点
MQL4でローソク足が陽線か陰線かを判定する関数は標準では用意されていないため、自作する必要があります。iBarType関数の実装については MQL4でiBarType関数を自作する陽線陰線判定の実装手順 に詳細をまとめています。
今回の複合条件でよくあるミスは「現在進行中の足(shift=0)を参照してしまうリペイント問題」です。shift=1(確定済みの1本前)を常に使うことが、バックテスト結果とフォワードの乖離を防ぐ最重要ポイントです。
RSI逆張りをFXで使う際のまとめと次のステップ
今回の検証結果をまとめます。RSI(14)の70/30逆張りはUSDJPY 5分足において、単体では「損益分岐点はわずかに超えるが強力なエッジとは言えない」という結果でした。ただしロウソク足フィルターとの組み合わせによって、実用的なエントリー回数を保ちながら勝率を改善できることも確認できています。
| 条件 | 勝率の傾向 | エントリー回数 | 実用性 |
|---|---|---|---|
| RSI(14) 70/30 5分後 | 53.02% | 十分 | △ 単独では弱い |
| RSI(14) 70/30 15分後 | 約55〜56% | 十分 | ○ ベースとして使える |
| RSI(7) 70/30 | 低下 | 過多 | △ ノイズが多い |
| RSI(21) 70/30 | わずかに上昇 | 不足 | △ サンプル不足 |
| RSI(14) 80/20 | 上昇 | 激減 | △ 単独では機会が少ない |
| RSI(14) 70/30+ロウソク足 | 上昇 | 適切 | ◎ 最も実用的 |
次の改善ステップとしては、①時間帯フィルター(トレンドが強いセッション重複時を除外)、②MTF RSIとの組み合わせ、③ストップロス設定による期待値計算、の3方向が考えられます。EAとしての実装と長期フォワードテストに移行することで、より信頼性の高い検証データが得られます。


コメント