Web Lukes
📄

【コピペOK】RSI逆張りEAの作り方|売られすぎ・買われすぎで自動売買

公開日: 2025/12/13更新日: 2025/12/13

前回は移動平均線クロス(順張り)を作りました。今回はRSI(相対力指数)を使った逆張りEAに挑戦します。

「みんなが売ってる時に買い、みんなが買ってる時に売る」

逆張りの基本をEAで自動化しましょう。

RSIって何?

RSI(Relative Strength Index)は、相場の過熱感を数値化したものです。

  • 0〜100の範囲で動く
  • 30以下 = 売られすぎ(そろそろ反転して上がるかも?)
  • 70以上 = 買われすぎ(そろそろ反転して下がるかも?)

つまり:

  • RSI 30以下 → 買いのチャンス
  • RSI 70以上 → 売りのチャンス

順張りと逆張りの違い

順張り(MA Cross)逆張り(RSI)
考え方トレンドに乗る反転を狙う
買うタイミング上がり始めたら下がりすぎたら
売るタイミング下がり始めたら上がりすぎたら
得意な相場トレンド相場レンジ相場
苦手な相場レンジ相場トレンド相場

両方のEAを持っておくと、相場に応じて使い分けができます。

完成コード(コピペOK)

MQL4
//+------------------------------------------------------------------+
//| RSI Reversal EA - RSI逆張りで自動売買 |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property version "1.00"
#property strict
//--- 入力パラメータ
input int RSI_Period = 14; // RSI期間
input int RSI_Oversold = 30; // 売られすぎライン
input int RSI_Overbought = 70; // 買われすぎライン
input double LotSize = 0.01; // ロット数
input int StopLoss = 30; // 損切り(pips)
input int TakeProfit = 60; // 利確(pips)
input int MagicNumber = 54321; // マジックナンバー
//--- グローバル変数
bool canBuy = true; // 買いエントリー可能フラグ
bool canSell = true; // 売りエントリー可能フラグ
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Print("RSI Reversal EA 起動!");
Print("RSI期間: ", RSI_Period, " / 売られすぎ: ", RSI_Oversold, " / 買われすぎ: ", RSI_Overbought);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 既存ポジションがあれば何もしない
if(CountMyPositions() > 0)
{
canBuy = true;
canSell = true;
return;
}
// RSI値を取得
double rsi_current = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 0);
double rsi_prev = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 1);
// 売られすぎゾーンから抜け出した → 買いエントリー
if(rsi_prev < RSI_Oversold && rsi_current >= RSI_Oversold && canBuy)
{
Print("★RSI売られすぎゾーンから反転!買いエントリー");
Print("RSI: ", rsi_prev, " → ", rsi_current);
OpenBuy();
canBuy = false; // 連続エントリー防止
}
// 買われすぎゾーンから抜け出した → 売りエントリー
if(rsi_prev > RSI_Overbought && rsi_current <= RSI_Overbought && canSell)
{
Print("★RSI買われすぎゾーンから反転!売りエントリー");
Print("RSI: ", rsi_prev, " → ", rsi_current);
OpenSell();
canSell = false; // 連続エントリー防止
}
// ゾーンに入ったらフラグをリセット
if(rsi_current < RSI_Oversold)
canBuy = true;
if(rsi_current > RSI_Overbought)
canSell = true;
}
//+------------------------------------------------------------------+
//| 買い注文を出す |
//+------------------------------------------------------------------+
void OpenBuy()
{
double sl = Ask - StopLoss * Point * 10;
double tp = Ask + TakeProfit * Point * 10;
int ticket = OrderSend(
Symbol(),
OP_BUY,
LotSize,
Ask,
3,
sl,
tp,
"RSI Buy",
MagicNumber,
0,
clrGreen
);
if(ticket < 0)
Print("買い注文エラー: ", GetLastError());
else
Print("買い注文成功!チケット: ", ticket);
}
//+------------------------------------------------------------------+
//| 売り注文を出す |
//+------------------------------------------------------------------+
void OpenSell()
{
double sl = Bid + StopLoss * Point * 10;
double tp = Bid - TakeProfit * Point * 10;
int ticket = OrderSend(
Symbol(),
OP_SELL,
LotSize,
Bid,
3,
sl,
tp,
"RSI Sell",
MagicNumber,
0,
clrRed
);
if(ticket < 0)
Print("売り注文エラー: ", GetLastError());
else
Print("売り注文成功!チケット: ", ticket);
}
//+------------------------------------------------------------------+
//| このEAのポジション数を数える |
//+------------------------------------------------------------------+
int CountMyPositions()
{
int count = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
count++;
}
}
return count;
}
//+------------------------------------------------------------------+

動かし方

前回の移動平均線EAと同じです。

  1. MetaEditorで新規EA作成
  2. コードを貼り付け
  3. F7でコンパイル
  4. チャートにセット
  5. 自動売買ON

コードのポイント解説

RSI値の取得

MQL4
double rsi_current = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 0);
double rsi_prev = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 1);

iRSI()関数でRSI値を取得します。

  • NULL = 現在のチャートの通貨ペア
  • 0 = 現在のチャートの時間足
  • RSI_Period = RSIの計算期間(デフォルト14)
  • PRICE_CLOSE = 終値を使って計算
  • 最後の数字 = 何本前のローソク足か(0=現在、1=1本前)

エントリー条件(重要!)

単純に「RSIが30以下なら買い」とすると、ずっと30以下の間、毎ティック買い注文を出してしまいます。

なので、**「30以下から30以上に戻った瞬間」**をトリガーにしています。

MQL4
// 1本前は30以下だった かつ 現在は30以上
if(rsi_prev < RSI_Oversold && rsi_current >= RSI_Oversold)

これで「売られすぎゾーンから抜け出した」=「反転の兆し」を検出します。

連続エントリー防止

MQL4
bool canBuy = true;
bool canSell = true;

フラグを使って、同じシグナルで何度もエントリーしないようにしています。

  1. エントリーしたら canBuy = false
  2. 再度ゾーンに入ったら canBuy = true にリセット
  3. 次にゾーンから抜けた時にエントリー可能

カスタマイズしてみよう

RSIレベルを変更

デフォルトは30/70ですが、より極端な値にすると:

Code
RSI_Oversold = 20 // より売られすぎを狙う
RSI_Overbought = 80 // より買われすぎを狙う

シグナルは減るけど、精度は上がる可能性があります。

移動平均線フィルターを追加

「大きなトレンドに逆らわない」ようにフィルター追加:

MQL4
void OnTick()
{
// 200MAを取得
double ma200 = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 0);
// 200MAより上にいる時は買いのみ
if(Bid > ma200)
{
// 買いエントリーロジック
}
// 200MAより下にいる時は売りのみ
if(Bid < ma200)
{
// 売りエントリーロジック
}
}

RSIダイバージェンス検出(上級)

価格は下がってるのにRSIは上がってる → 反転サインのダイバージェンス。これは少し複雑なので、基本が理解できてから挑戦しましょう。

RSI EA vs MA Cross EA

RSI EAMA Cross EA
戦略タイプ逆張り順張り
エントリー回数多め少なめ
勝率高め低め
リスクリワード1:2くらい1:2以上狙える
得意な相場レンジトレンド

両方を持って、相場を見て使い分けるのがベストです。

逆張りEAの注意点

⚠️ トレンド相場では負けやすい

RSI30で買っても、そのまま20、10と下がり続けることがあります。これが「落ちるナイフを掴む」状態。

対策:

  1. 損切りは必ず設定する
  2. トレンドフィルター(MAなど)を追加
  3. レンジ相場でのみ使う
  4. ロットを控えめにする

次のステップ

これで順張り(MA Cross)と逆張り(RSI)、2つのEAが作れるようになりました!

次は、作ったEAを過去データで検証する方法を学びましょう。バックテストをしないと、そのEAが本当に勝てるのかわかりません。

📚 次に読む記事: MT4バックテスト完全ガイド

「このEA、本当に勝てるの?」を自分で検証できるようになれば、詐欺EAに騙されることもなくなります。データで判断する習慣をつけましょう! 📊

🎁おすすめツール・サービス

FX自動売買VPSなら50%OFF

キャンペーンで月1,790円〜。MT4/MT5プリインストール済み、自動復旧機能付き。14日間無料お試し。

シンクラウドデスクトップ for FX
ゴトー日EAを探しているならソースコード付

4年で資金4.7倍のバックテスト実績。ソースコード付きで自由にカスタマイズ可能。

ゴトー日EA Ultimate版(3,980円)

※上記リンクにはプロモーション(広告)が含まれています

🔮
MEMBERSHIP

量子相場謀略|ホソノP

ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。

✓EAソースコード公開
✓バックテスト生データ共有
✓リアルタイム相場分析
✓メンバー限定記事
メンバーシップに参加する※ noteアカウントで簡単登録

📚あわせて読みたい

📄

【コピペOK】移動平均線クロスEAの作り方|ゴールデンクロス・デッドクロスで自動売買

移動平均線のゴールデンクロス・デッドクロスで自動売買するEAを作ります。コード全文公開、コピペですぐ動く!初心者でも理解できるよう1行ずつ解説します。

FX自動売買2025/12/13
📄

【完全初心者向け】MT4 EA(自動売買)の作り方|30分で動くEAを作ろう

MT4のEA(自動売買プログラム)を作りたいけど何から始めればいいかわからない...そんな完全初心者のあなたへ。プログラミング未経験でも30分で動くEAが作れる入門ガイドです。

FX自動売買2025/12/13
📄

【Python】RSI逆張りボットを作る|pandas-taでテクニカル指標計算

Pythonとpandas-taを使ってRSI逆張り戦略のFXボットを作ります。RSIが30以下で買い、70以上で売り。テクニカル指標の計算が1行で完結!

FX自動売買2025/12/13
📄

🤖【革命】ChatGPTでEA開発!プログラミング初心者でも自動売買が作れる時代に

ChatGPTを使えばプログラミング未経験でもMT4/MT5のEA(自動売買)が作れる?実際に試した人の声と、メリット・デメリット、成功のコツをまとめました。EA開発のハードルが劇的に下がっています。

FX自動売買2026/1/18
📄

【2026年最新】シンクラウドデスクトップFXの評判と5社比較!さくら・ConoHa・ABLENET・お名前.com

シンクラウドデスクトップfor FXの評判・口コミを徹底調査。さくらVPS、ConoHa、ABLENET、お名前.comデスクトップクラウドと料金・スペック・機能を比較。FX自動売買VPS選びの決定版ガイド。

FX自動売買2026/1/1
📄

【MQL4入門】プログラミング未経験者のための基礎文法ガイド

MQL4のプログラミングを始めたいけど、変数?関数?何それ?という完全初心者向け。日常の例えを使って、EAを書くために必要な基礎文法をゼロから解説します。

FX自動売買2025/12/13