MQL5 RSIストラテジーの実装方法と使い方

目次

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は「設定」と「環境」で結果が変わる
  • 単独より組み合わせが前提
  • 検証プロセスが最重要