1. MQL5におけるRSIストラテジーとは
【結論】
RSIストラテジーとは、「RSIの数値を条件に売買を判断するシンプルな自動売買ロジック」です。
MQL5では、iRSIとCopyBufferを使うことで再現性の高いエントリー判断が可能になります。
1.1 RSIとは何か
【結論】
RSIは「価格の上昇・下降の強さを数値化し、買われすぎ・売られすぎを判断する指標」です。
【定義】
RSI(Relative Strength Index)とは、一定期間の値動きから相場の強弱を0〜100の範囲で示すオシレーター系指標です。
RSIは主に以下のように解釈されます。
- RSI > 70:買われすぎ(上昇しすぎ → 下落の可能性)
- RSI < 30:売られすぎ(下落しすぎ → 上昇の可能性)
この「行き過ぎた状態からの反転」を狙うのが、RSIストラテジーの基本です。
重要なのは、RSIは方向ではなく“状態”を示す指標である点です。
つまり、「トレンドの強さ」ではなく「過熱状態」を見るものです。
1.2 MQL5におけるRSIの役割
【結論】
MQL5ではRSIは「売買シグナルを生成するための数値データ」として扱います。
MQL5では、RSIは単なる表示用インジケーターではなく、EA(自動売買)のロジック部品として使用されます。
具体的な役割は以下です。
- エントリー条件の判定
- フィルター条件(例:RSIが特定範囲のみトレード)
- ポジション管理(過熱時のクローズ判断)
実装では以下の流れになります。
- iRSIでインジケーターハンドルを作成
- CopyBufferでRSI値を取得
- if文で売買条件を判定
ここで重要なのは、RSIはリアルタイムで変化する数値であり、
execution(約定処理)やslippage(価格ズレ)、spread(スプレッド)によって実運用結果が変わる点です。
つまり、「条件が成立した=必ず利益」ではなく、
市場環境と注文条件の影響を受けるシグナルです。
1.3 RSIストラテジーの基本構造
【結論】
RSIストラテジーは「数値条件 → 売買判断」という極めて単純な構造で構築されます。
基本的なロジックは以下のようになります。
- RSI < 30 → 買い(Buy)
- RSI > 70 → 売り(Sell)
これをMQL5で表現すると、概念的には次のようになります。
if(rsi_value < 30)
{
// Buy条件
}
if(rsi_value > 70)
{
// Sell条件
}
さらに実務では、以下のような拡張が入ります。
- クロス判定(例:29 → 31に上抜けた瞬間)
- フィルター条件(トレンド、時間帯)
- リスク制御(ロットサイズ、ストップロス)
注意点として、RSI単体の条件はダマシ(誤シグナル)が多いです。
特にトレンド相場では「RSIが張り付き続ける」現象が発生します。
よくある失敗:
- RSIだけでエントリーして連敗する
- 過去検証(バックテスト)だけで判断する
- spreadやexecutionを無視する
そのため実務では、
- トレンドフィルター(MAなど)
- ボラティリティ調整(ATRなど)
と組み合わせるのが基本です。
RSIは「単体で完結する戦略」ではなく、
戦略の一部として使うべき部品という位置付けが現実的です。
2. MQL5でRSIストラテジーを実装する手順
【結論】
MQL5でRSIストラテジーを実装する流れは「RSI作成 → 値取得 → 条件判定 → 注文実行」の4ステップです。
この順序を守ることで、初心者でも再現性のあるEAを構築できます。
2.1 実装の全体フロー
【結論】
まずは処理の全体像を理解することが重要です。構造を把握すれば、コードは単なる組み立てになります。
RSIストラテジーの基本フロー:
- インジケーター作成(iRSI)
- データ取得(CopyBuffer)
- 条件判定(if文)
- 注文実行(OrderSend)
擬似フロー:
OnTick()
{
// 1. RSI取得
// 2. 値チェック
// 3. 条件成立
// 4. 注文
}
重要ポイント:
- OnTickは価格更新ごとに実行される
- 過剰エントリー防止が必要(後述)
- executionタイミングにより結果が変わる

2.2 RSIインジケータの作成(iRSI)
【結論】
RSIはiRSI関数で「ハンドル」を作成し、その後に値を取得します。
基本構文:
int rsi_handle;
rsi_handle = iRSI(_Symbol, PERIOD_CURRENT, 14, PRICE_CLOSE);
パラメータ説明:
- _Symbol:通貨ペア
- PERIOD_CURRENT:時間足
- 14:期間(デフォルト)
- PRICE_CLOSE:終値ベース
注意点:
- ハンドル作成はOnInitで行うのが基本
- 毎Tickで作るとパフォーマンス悪化
- INVALID_HANDLEチェック必須
例:
if(rsi_handle == INVALID_HANDLE)
{
Print("RSI作成失敗");
}
2.3 CopyBufferでRSI値を取得
【結論】
RSIの値はCopyBufferで取得し、配列として扱います。
コード例:
double rsi_array[];
ArraySetAsSeries(rsi_array, true);
CopyBuffer(rsi_handle, 0, 0, 2, rsi_array);
ポイント:
- [0]が最新、[1]が1本前
- ArraySetAsSeriesは必須(時系列逆順)
- 取得数は最低2(クロス判定用)
よくある失敗:
- array out of range(配列エラー)
- CopyBufferの戻り値未チェック
- データ未取得状態で判定
安全対策:
if(CopyBuffer(rsi_handle, 0, 0, 2, rsi_array) <= 0)
{
return;
}
2.4 エントリー条件の実装
【結論】
RSIの閾値とクロスを組み合わせることで、ダマシを減らせます。
基本条件:
double rsi_current = rsi_array[0];
double rsi_prev = rsi_array[1];
// Buy(30を上抜け)
if(rsi_prev < 30 && rsi_current > 30)
{
// Buy条件
}
// Sell(70を下抜け)
if(rsi_prev > 70 && rsi_current < 70)
{
// Sell条件
}
なぜクロスを使うのか:
- 固定条件(<30)だけだと連続エントリー
- クロスは「変化点」を捉える
補足:
- RSI < 30だけの単純戦略は危険
- トレンド時に損失が増える
2.5 OrderSendによる注文処理
【結論】
注文はMqlTradeRequest構造体を使って送信します。
簡易例:
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = 0.1;
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
request.deviation= 10;
OrderSend(request, result);
重要ポイント:
- spreadを考慮(ASK/BIDの違い)
- slippage(deviation)設定
- execution失敗チェック
失敗例:
- trade context busy
- not enough money
- invalid volume
2.6 実装チェックリスト
【結論】
このチェックを満たせば、最低限動作するRSI EAになります。
チェック項目:
- RSIハンドル作成済み
- CopyBuffer成功確認
- 配列エラー回避済み
- クロス条件使用
- 重複エントリー防止(ポジション確認)
- spreadフィルター導入
- 注文結果チェック
追加推奨:
- 取引時間制御(例:ロンドン時間のみ)
- 最大ポジション数制限
- ロットサイズ調整
3. RSIストラテジーの仕組みとロジック
【結論】
RSIストラテジーは「行き過ぎた価格の反転(平均回帰)」を狙うロジックです。
有効性は相場環境に依存し、特にレンジ相場で機能しやすい一方、強いトレンドでは損失が拡大しやすくなります。
3.1 RSIが機能する理由
【結論】
RSIは「価格が短期的に偏った状態」を検出し、その反動を利用する指標です。
RSIは過去の上昇幅と下落幅をもとに算出されます。
そのため、極端な上昇や下落が続いた場合、数値は0または100に近づきます。
この状態は以下を意味します。
- 買いが集中しすぎている(買われすぎ)
- 売りが集中しすぎている(売られすぎ)
市場では、このような偏りは長く続かないことが多く、
反対方向への修正(リバウンド)が起きやすいという性質があります。
これがRSIストラテジーの根拠です。
重要なポイント:
- RSIは「未来を予測する指標」ではない
- 「現在の過熱状態」を数値化したもの
- 反転は確率的に起きるだけで、保証はない
3.2 レンジ相場で強い理由
【結論】
価格が一定範囲内で上下する環境では、RSIの反転シグナルが機能しやすくなります。
レンジ相場の特徴:
- 明確なトレンドがない
- 上下に往復する値動き
- ボラティリティが比較的安定
この環境では、
- RSI > 70 → 下落しやすい
- RSI < 30 → 上昇しやすい
というパターンが繰り返されます。
つまり、RSIの「逆張りロジック」がそのまま機能します。
実務的には:
- 短期足(M5〜M15)で有効
- スプレッド(spread)の影響が相対的に小さい
- executionの遅延(slippage)の影響も限定的
3.3 トレンド相場で弱い理由
【結論】
強いトレンドではRSIが機能せず、連続損失が発生しやすくなります。
トレンド相場の特徴:
- 一方向に価格が継続的に動く
- 押し戻しが小さい
- モメンタムが強い
このとき、RSIは次の状態になります。
- 上昇トレンド → RSIが70以上に張り付き
- 下降トレンド → RSIが30以下に張り付き
結果:
- 売り続けて負ける(上昇トレンド中)
- 買い続けて負ける(下降トレンド中)
これは典型的な失敗パターンです。
よくある誤解:
- 「RSIが70だから必ず下がる」 → 誤り
- 実際は「強いトレンドの可能性」がある
3.4 実務的な補完ロジック
【結論】
RSI単体では不十分であり、フィルターを組み合わせることで実用性が大きく向上します。
代表的な補完方法:
トレンドフィルター(MA)
- 移動平均(Moving Average)を使用
- 上昇トレンドでは買いのみ許可
例:
if(price > ma && rsi_prev < 30 && rsi_current > 30)
{
// Buyのみ
}
効果:
- トレンド逆張りを回避
- 勝率向上
ボラティリティフィルター(ATR)
- ATRで値動きの大きさを確認
- 極端に低い/高い場合はトレード回避
効果:
- 無意味なエントリー削減
- スプレッド拡大時の回避
時間フィルター(セッション)
- ロンドン・NY時間のみトレード
- 流動性の低い時間を回避
効果:
- execution品質改善
- slippage低減
リスク管理
- ロットサイズ固定ではなく動的調整
- ドローダウン(DD)制御
理由:
- RSIは連敗が発生する戦略
- 資金管理が成否を分ける
まとめとして重要なポイント:
- RSIは「単体で勝つ戦略」ではない
- 環境依存型(レンジ向き)
- フィルターとリスク管理が必須
4. RSIストラテジーと他手法の違い
【結論】
RSIは「逆張り型でシンプル・再現性が高い」が、「トレンドに弱い」という明確な特性を持ちます。
そのため、他手法との違いを理解し、相場環境に応じて使い分けることが重要です。
4.1 手法比較(全体像)
【結論】
RSIは「過熱状態の反転」を狙う手法であり、トレンド追従型とは本質的にロジックが異なります。
比較の軸:
- ロジック(逆張り or 順張り)
- 強み(どの相場で有効か)
- 弱み(どの相場で崩れるか)
代表的な比較:
| 手法 | ロジック | 強み | 弱み |
|---|---|---|---|
| RSI | 逆張り | レンジで安定 / 実装が簡単 | トレンドで連敗 |
| 移動平均クロス(MA) | 順張り | トレンド捕捉 | 遅延(lag) |
| MACD | 中間型 | トレンド+モメンタム | ノイズ多い |
| ボリンジャーバンド | 逆張り | ボラティリティ対応 | 設定依存 |
重要ポイント:
- RSIは「反転」を狙う
- MAは「継続」を狙う
- MACDは「転換点」を狙う
つまり、狙っている市場構造が違うため、優劣ではなく適材適所です。
4.2 RSIが向いているケース
【結論】
RSIは「方向性が弱く、価格が往復する相場」で最大の効果を発揮します。
具体的な条件:
- レンジ相場(横ばい)
- ボラティリティが安定
- 明確なトレンドがない
このときの特徴:
- RSIが30〜70の間を行き来する
- 過熱→反転のパターンが繰り返される
実務的には:
- M5〜M15の短期足
- EURUSDなど流動性の高い通貨
- spreadが狭い環境
メリット:
- ロジックが単純 → バグが少ない
- execution影響が比較的小さい
- 再現性が高い
4.3 他手法が有利なケース
【結論】
トレンドが明確な場合は、RSIよりも順張り系手法の方が期待値が高くなります。
移動平均(MA)が有利なケース
- 強いトレンド発生時
- 押し目・戻り売りが機能する相場
理由:
- トレンド継続に乗るため
- RSIの逆張りと真逆の発想
MACDが有利なケース
- トレンドの初動
- モメンタム変化を捉えたい場合
理由:
- トレンド+勢いの両方を見るため
ボリンジャーバンドが有利なケース
- ボラティリティが変化する相場
- ブレイクアウト前後
理由:
- 価格の拡散・収縮を捉える
4.4 実務的な使い分け戦略
【結論】
RSIは単独で使うのではなく、他手法と組み合わせることで期待値が安定します。
代表的な組み合わせ:
RSI + MA(最重要)
- MAでトレンド方向を判定
- RSIでエントリータイミングを決定
例:
if(price > ma && rsi_prev < 30 && rsi_current > 30)
{
// 上昇トレンド中の押し目買い
}
効果:
- トレンド逆張りを排除
- 勝率向上
RSI + ボラティリティフィルター
- ATRで値動き確認
- 低ボラ・高ボラを除外
効果:
- 無駄なトレード削減
- spread拡大時の回避
RSI + セッション制御
- ロンドン / NY時間のみ稼働
- 流動性低下時間を排除
効果:
- execution安定
- slippage低減
重要な結論:
- RSIは「単体最適」ではなく「組み合わせ前提」
- 相場環境で優劣が逆転する
- 戦略は固定ではなく切り替えるべき
5. よくある失敗と注意点
【結論】
RSIストラテジーの失敗の多くは「相場環境の誤認」と「実装上の不備」に起因します。
特にトレンド相場での逆張り連発と、execution条件(spread・slippage)未考慮が損失の主因です。
5.1 RSI単独運用の危険性
【結論】
RSI単体でのエントリーは、トレンド相場で連続損失を生みやすい構造です。
典型パターン:
- 上昇トレンド中にRSI>70で売り続ける
- 下降トレンド中にRSI<30で買い続ける
原因:
- RSIは「過熱」を示すだけで「反転」を保証しない
- 強いモメンタム下ではRSIが張り付く
対策:
- トレンドフィルター(MAなど)を併用
- クロス条件(閾値の上抜け/下抜け)を使う
- 連続エントリー制御(同方向ポジション制限)
最小実装例:
bool HasPosition()
{
return PositionSelect(_Symbol);
}
5.2 スプレッド・スリッページ未考慮
【結論】
backtestで良好でも、実運用ではspreadとslippageにより成績が劣化します。
問題点:
- spread拡大時に不利約定(特に指標時)
- slippageにより想定価格と乖離
- execution遅延でシグナルが無効化
対策:
- スプレッドフィルター(最大許容値を設定)
- deviation(許容スリッページ)の明示
- 流動性の高い時間帯のみトレード
例:
double spread = (SymbolInfoDouble(_Symbol, SYMBOL_ASK) -
SymbolInfoDouble(_Symbol, SYMBOL_BID)) / _Point;
if(spread > 20) // 例:2.0pips相当
{
return; // エントリー回避
}
5.3 過剰最適化(オーバーフィッティング)
【結論】
パラメータ(RSI期間や閾値)を過度に調整すると、将来の相場で機能しなくなります。
よくある誤り:
- RSI期間を14→13→12…と微調整
- 30/70を28/72など細かく調整
- 過去データに過度適合
問題:
- 再現性が消える
- フォワードテストで崩壊
対策:
- シンプルな設定を維持
- 複数期間でテスト(robust性確認)
- ウォークフォワード分析を実施
5.4 ロットサイズ・リスク管理不足
【結論】
RSI戦略は連敗が発生しやすいため、ロット管理を誤ると資金が急減します。
典型的な失敗:
- 固定ロットで運用
- 損切りなし
- DD(ドローダウン)未管理
対策:
- 1トレードあたりのリスク固定(例:1〜2%)
- ストップロス設定(ATRベースなど)
- 最大DD制限(equity protection)
参考ロジック:
double risk_percent = 1.0;
double lot = AccountBalance() * risk_percent / 100.0;
※実際は証拠金・ボラティリティを考慮して調整が必要
5.5 データ取得・配列処理のミス
【結論】
CopyBufferや配列処理のミスは、意図しないエントリーやEA停止の原因になります。
よくあるエラー:
- array out of range
- CopyBuffer未取得状態で参照
- ArraySetAsSeries未設定
安全実装:
double rsi_array[];
ArraySetAsSeries(rsi_array, true);
if(CopyBuffer(rsi_handle, 0, 0, 2, rsi_array) <= 0)
{
return;
}
5.6 ポジション管理の欠如
【結論】
ポジション管理がないと、同方向の重複エントリーでリスクが指数的に増加します。
問題:
- 同一シグナルで複数エントリー
- 意図しないナンピン状態
- 証拠金圧迫(not enough money)
対策:
- ポジション存在チェック
- 最大ポジション数制限
- クローズ条件明確化
重要ポイントまとめ:
- RSI単体運用は危険
- execution条件(spread / slippage)を必ず考慮
- 過剰最適化は長期的に破綻
- リスク管理が最優先
6. 実務での使いどころ
【結論】
RSIストラテジーは「単体で勝つ戦略」ではなく、ポートフォリオの一部として使うことで安定した期待値を生みます。
特にレンジ相場の補完戦略として有効です。
6.1 単体戦略として使う場合
【結論】
RSI単体は「小ロット・短期・限定条件」でのみ実務的に成立します。
適した条件:
- 明確なレンジ相場
- ボラティリティが安定
- spreadが狭い通貨(EURUSDなど)
推奨設定:
- 小ロット運用(資金の1%未満)
- 短期足(M5〜M15)
- クロス条件使用(単純閾値は避ける)
理由:
- RSIは連敗が発生しやすい
- トレンドで崩壊するため、単体運用はリスクが高い
実務上の位置付け:
- 「サブ戦略」または「テスト用戦略」
- 本命ロジックには向かないケースが多い
6.2 他戦略と組み合わせる場合
【結論】
RSIは「タイミング調整ツール」として使うと最も効果的です。
代表的な組み合わせ:
RSI + 移動平均(最重要)
役割分担:
- MA:トレンド方向の判定
- RSI:エントリータイミング
例:
if(price > ma && rsi_prev < 30 && rsi_current > 30)
{
// 押し目買い
}
効果:
- トレンド逆張りを排除
- 勝率と安定性向上
RSI + ATR(ボラティリティ制御)
役割:
- ATRで値動きの大きさを判断
- 低ボラ・高ボラ環境を除外
効果:
- 無意味なエントリー削減
- slippageリスク低減
RSI + セッションフィルター
役割:
- トレード時間を限定
- 流動性の低い時間を回避
例:
- ロンドン市場
- ニューヨーク市場
効果:
- execution品質向上
- spread拡大回避
6.3 推奨運用モデル(実務)
【結論】
RSIは「戦略ポートフォリオの一部」として組み込むのが最も現実的です。
推奨モデル:
- トレンド戦略(MA系)
- 逆張り戦略(RSI)
- ボラティリティ戦略(ATR系)
このように複数戦略を組み合わせます。
理由:
- 相場は常に変化する
- 単一戦略は環境依存が強い
6.4 ドローダウン分散の考え方
【結論】
RSIは「トレンド時に負ける」ため、他戦略と組み合わせることでDDを分散できます。
例:
| 相場 | RSI | トレンド戦略 |
|---|---|---|
| レンジ | 利益 | 微損 |
| トレンド | 損失 | 利益 |
この構造により:
- 全体の損益が安定
- equityカーブが滑らかになる
6.5 実務での重要ポイント
【結論】
RSIを実務で使う際は「環境認識」と「リスク制御」が最重要です。
チェックポイント:
- 今の相場はレンジか?トレンドか?
- spreadは許容範囲か?
- slippageが発生しやすい時間帯か?
- ポジションが過剰になっていないか?
これらを無視すると:
- バックテストと乖離
- 想定外の損失
重要なまとめ:
- RSIは単体では不安定
- 組み合わせで価値が出る
- ポートフォリオ設計が前提
7. よくある質問(FAQ)
【結論】
RSIストラテジーはシンプルな反面、「設定・使い方・相場環境」によって結果が大きく変わります。
以下のFAQは、実務で頻出する疑問とその最短回答です。
7.1 RSIの最適な期間は?
【結論】
一般的には14が標準ですが、最適値は通貨ペア・時間足・相場環境によって変わります。
補足:
- 短期(7〜10):反応が速いがノイズ多い
- 長期(20〜30):安定するが遅延(lag)発生
実務では:
- まず14で検証
- 変更する場合は大きく(例:14→21)
7.2 RSIは単独で使える?
【結論】
単独運用は推奨されません。トレンドフィルターとの併用が前提です。
理由:
- トレンド相場で連敗する
- ダマシが多い
推奨:
- RSI + MA(最重要)
- RSI + ATR
7.3 RSIの30/70は固定?
【結論】
固定ではなく、相場に応じて調整可能です。
例:
- ボラが高い → 20 / 80
- レンジが狭い → 40 / 60
ただし:
- 過度な調整はオーバーフィッティングの原因
7.4 RSIとMACDの違いは?
【結論】
RSIは逆張り、MACDはトレンド寄りの指標です。
違い:
- RSI:過熱状態(オシレーター)
- MACD:トレンド+モメンタム
使い分け:
- レンジ → RSI
- トレンド → MACD
7.5 RSIが効かない相場は?
【結論】
強いトレンド相場では機能しません。
特徴:
- RSIが張り付く(70以上 / 30以下)
- 反転しない
対策:
- トレンド判定を先に行う
- フィルター導入
7.6 バックテストだけで十分?
【結論】
不十分です。必ずフォワードテストが必要です。
理由:
- execution条件(spread / slippage)が再現されない
- 過剰最適化のリスク
推奨:
- デモ口座で検証
- VPS環境で実運用テスト
7.7 スキャルピングに使える?
【結論】
使用可能ですが、コスト(spread・slippage)の影響が非常に大きくなります。
注意点:
- スプレッドが広いと利益消失
- execution遅延で条件崩壊
対策:
- 低スプレッド口座
- 高速約定環境
7.8 RSIとボリンジャーバンドはどちらが良い?
【結論】
優劣ではなく、目的が異なります。
違い:
- RSI:過熱状態を見る
- ボリンジャー:価格の分布を見る
実務では:
- 組み合わせて使うケースも多い
重要なまとめ:
- RSIは「設定」と「環境」で結果が変わる
- 単独より組み合わせが前提
- 検証プロセスが最重要