「RCI を EA で使いたいけど、どの値をどう取得すればいいの?」 「短期・中期・長期 RCI をロジックに組み込む方法が分からない…」
そんな悩みを解決するために、本記事ではRCIをEAの売買ロジックに組み込む具体的な方法を解説します。 現在主流となっている RCI Multi Signal(非リペイント対応・1〜3本表示) を前提にしており、初心者でも理解しやすい構成です。
🔗 まずは RCI インジ(Multi Signal)を MT4 に入れておく
EAでRCIを使うには インジケータ本体が MT4 に入っていることが必須 です。
まだ導入していない方はこちらから👇
上記の準備をしないと、正常にRCIのEAが動きませんのでご注意ください。
MT4への追加手順が必要な場合はこちら👇
EAの概要とポイント
- RCI Multi Signal(非リペイント対応)を
iCustom()で取得して自動判定
MT4標準インジではなく、短期・中期・長期RCIを同時に扱える専用インジを使用します。 - 短期RCIの過熱判定+中期RCIの向きで逆張りエントリー
短期RCIが買われすぎ/売られすぎ水準に到達し、
中期RCIが反転方向を向いたタイミングでエントリーします。 - 長期RCIをフィルターとして使用し、逆張りの質を向上
長期RCIは完全な反転を要求せず、
「弱い上昇・弱い下落」まで許容することでダマシを軽減しています。 - 決済はエントリー時の指値・逆指値のみで管理
本サンプルではRCIによる決済条件は設けず、
エントリー精度の検証にフォーカスした設計です。 - RCI期間・判定値・表示本数・TP/SLはすべてパラメータで調整可能
短期・中期・長期RCIの期間や、エントリー閾値、
ロット数・利確幅・損切幅を自由にカスタマイズできます。
エントリーロジック解説
ロング条件(買い)
- 短期RCI が設定値(例:-80)以下
- 中期RCI が1本前より上向き
- 長期RCIは弱めの下落~上昇まで許容(完全上昇でなくてもOK)
ショート条件(売り)
- 短期RCI が設定値(例:+80)以上
- 中期RCI が1本前より下向き
- 長期RCIは弱めの上昇~下降まで許容(完全下降でなくてもOK)
ロジック例(図解)

短期が設定値に振れたタイミングでエントリーしますが、
中期・長期の方向もチェックしているので「逆張りの質」で精度の高いトレードを行います。
決済タイミング
エントリー時の逆指値、指値でのみ管理。
初期値として、指値・逆指値共に20pipsです。(設定で変更可)
その他の仕様
設定値は以下の通りです。
- RCI_KIKAN1 = 9 ⇒ 短期RCIの期間
- RCI_KIKAN2 = 26 ⇒ 中期RCIの期間
- RCI_KIKAN3 = 52 ⇒ 長期RCIの期間
- RCI_VIEW_CNT = 3 ⇒ RCIの表示数(1~3)
- RCI_KAI = -70 ⇒ 短期RCIがいくらになったらロングするか
- RCI_URI = 60 ⇒ 短期RCIがいくらになったらショートするか
- A_SPREAD = 20 ⇒ エントリー時に許容するスプレッドの値です(20 = 2pips)
- Lots = 1 ⇒ ロット数です(0.01=1000通貨)
- SL = 200 ⇒ 損切り幅
- TP = 200 ⇒ 利確幅
既にポジションがある場合は追加でエントリーしません。
新しい足(バー)が出来た際に1度だけ処理を行います。※1時間足の場合だと1時間に1回処理する
⚠️ 注意点
- RCIはレンジ相場で有効ですが、強いトレンド相場では逆張りが失敗しやすくなります
特に長期RCIが一方向へ張り付いている相場では、短期RCIの反転だけでエントリーすると逆行しやすくなります。 - 短期RCIの数値だけで判断せず、中期・長期RCIを必ずフィルターとして使用してください
「−80に到達=即買い」「+80に到達=即売り」といった単純な使い方は、ダマシが増える原因になります。 - 本EAは、新しいローソク足が確定したタイミングで1回だけ処理を行う設計です
ティックごとの判定ではなく、バー確定ベースで動作するため、裁量トレードとはエントリータイミングが異なります。 - マジックナンバーによる複数EA管理は行っていません
本サンプルEAは単独運用を前提としているため、同一通貨・同一口座で複数EAを同時稼働させないでください。 - TP・SLは固定値で設定していますが、相場状況に応じた最適化が必須です
RCIの特性上、通貨ペアや時間足によって適切な利確・損切幅は大きく異なります。
ダウンロード
EAファイルのダウンロードはこちら👇
📥 RCIのEA をダウンロード \ 国内最大級のEAプラットフォーム /
GogoJungle(ゴゴジャン)でEAの評価・レビューをチェック!
📜 RCI EAのサンプルコード解説
以下にMQL4サンプルコードを掲載します。
そのままコピーしてMT4(MetaEditor)に貼り付ければコンパイル可能で、動作確認も済んでいます。
//+------------------------------------------------------------------+
//| 10_RCI.mq4 |
//| Copyright © 2020-2025 ぷろぐらむFX |
//| https://fx-prog.com/ |
//|使い方:
//|パラメータ設定と、OnTick内「新規注文判断」「TP/SL判断」「決済注文判断」に
//|当サイトのロジックを埋め込むだけでEA化できます。
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020-2025 ぷろぐらむFX"
#property link "https://fx-prog.com/"
#property version "1.00"
#property strict
input double Lots = 0.01; //ロット
input int TP = 100; //利確(pips)
input int SL = 50; //損切り(pips)
//***【パラメータ設定↓】***//
input int RCI_KIKAN1 = 9;
input int RCI_KIKAN2 = 26;
input int RCI_KIKAN3 = 52;
input int RCI_VIEW_CNT = 3;
input int RCI_KAI = -80;
input int RCI_URI = 80;
//***【パラメータ設定↑】***//
string Ea_Name = WindowExpertName(); //チャート上のEA名称を取得(オーダーコメントに使用)
double PipValue; //ブローカー桁数に対応した Point 補正
datetime prevtime; //ローソク足時間保持用
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit(){
//デジットチェック
if (Digits == 3 || Digits == 5){
PipValue = Point * 10; // 例: EURUSD 1.23456 → 1pip = 0.00010
}else{
PipValue = Point; // 例: USDJPY 123.45 → 1pip = 0.01
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick(){
int total = OrdersTotal(); //ポジショントータル数をセット
int ea_order_Type = -1; //0:OP_BUY 1:OP_SELL
double ea_order_stop_price = 0; //ストップロスレート
double ea_order_good_price = 0; //利確レート
//新しい足ができた時だけやる
if(Time[0] != prevtime){
prevtime = Time[0];
}else{
return;
}
//ポジションがない場合はエントリー判定
if(total == 0){
bool openBuy = false; //買い新規注文判断
bool openSell = false; //売り新規注文判断
//***【新規注文判断↓】***//
// RCI Multi Signal を利用したサイン判定
bool isBullRCI_S = false;
bool isBearRCI_S = false;
// RCI値取得
double rciS = GetRCI_MS(0, 1);
double rciM = GetRCI_MS(1, 1);
double rciL = GetRCI_MS(2, 1);
double rciM_prev = GetRCI_MS(1, 2);
double rciL_prev = GetRCI_MS(2, 2);
double slopeM = rciM - rciM_prev;
double slopeL = rciL - rciL_prev;
// -----------------------------
// BUY条件(緩和版)
// -----------------------------
bool condBuy =
(
rciS <= RCI_KAI // 短期が売られすぎ
&&
(rciM > rciM_prev) // 中期が上向きならOK(クロス不要)
&&
slopeM > 1 // 傾きの最低強度
&&
slopeL > -5 // 長期が“弱い下落”まで許可
);
if(condBuy) isBullRCI_S = true;
// -----------------------------
// SELL条件(緩和版)
// -----------------------------
bool condSell =
(
rciS >= RCI_URI // 短期が買われすぎ
&&
(rciM < rciM_prev) // 中期が下向きならOK
&&
slopeM < -1 // 傾き(強度)緩め
&&
slopeL < 5 // 長期が“弱い上昇”まで許可
);
if(condSell) isBearRCI_S = true;
//***【新規注文判断↑】***//
//参照するサンプルEAの買いエントリーフラグをセットしてください
if(isBullRCI_S){
openBuy =true;
ea_order_Type = OP_BUY;
//参照するサンプルEAの売りエントリーフラグをセットしてください
}else if(isBearRCI_S){
openSell =true;
ea_order_Type = OP_SELL;
}
//***【TP/SL判断↓】***//
// TP/SLを変更したい場合はこの部分を変更してください。
if(openBuy){
ea_order_stop_price = Ask - SL * PipValue;
ea_order_good_price = Ask + TP * PipValue;
}else if(openSell){
ea_order_stop_price = Bid + SL * PipValue;
ea_order_good_price = Bid - TP * PipValue;
}
//***【TP/SL判断↑】***//
if(ea_order_Type > -1){
funcOrder_Send(ea_order_Type,ea_order_stop_price,ea_order_good_price,Lots,Ea_Name,777,0);
}
//ポジションがある場合は決済判定
}else{
//***【決済注文判断↓】***//
// ※今回サンプルでは RCI での決済条件は設定しません。
// 追加したい場合はここに条件を記述してください。
//***【決済注文判断↑】***//
}
return;
}
//+------------------------------------------------------------------+
//| ★ RCI Multi Signal 値取得 共通関数(新規追加) |
//+------------------------------------------------------------------+
double GetRCI_MS(int buffer, int shift)
{
double v = iCustom(NULL, 0,
"RCI-Multi-Signal",
RCI_VIEW_CNT, // 1〜3本表示
RCI_KIKAN1,
RCI_KIKAN2,
RCI_KIKAN3,
true, // Signal_On
buffer,
shift);
if(v == EMPTY_VALUE) return 0;
return v;
}
//★★★★★★★★★★★★★★★★★★★★ ここから下は共通関数 ★★★★★★★★★★★★★★★★★★★★
//+------------------------------------------------------------------+
//|【関数】新規注文関数
//|
//|【引数】 orderType:売買(0=BUY, 1=SELL)
//|【引数】 sl:損切り価格 tp:利確価格
//|【引数】 lots:取引ロット数
//|【引数】 orderComment:オーダーコメント
//|【引数】 magic:マジックNo
//|【引数】 maxSpreadPips: 許容スプレッド[Point] (0=制限なし)
//|
//|【戻値】true=成功 false=失敗
//+------------------------------------------------------------------+
bool funcOrder_Send(int orderType, double sl, double tp, double lots,
string orderComment, int magic, int maxSpreadPoints){
int ticket = -1;
double price = 0;
color clr = clrNONE;
double spread = 0;
// 最大10回リトライ
for(int retry=0; retry<10; retry++)
{
RefreshRates();
// スプレッド取得(MT4表示と同じポイント単位)
spread = MarketInfo(Symbol(), MODE_SPREAD);
// スプレッドチェック(maxSpreadPoints=0 の場合はスキップ)
if(maxSpreadPoints > 0 && spread > maxSpreadPoints){
Print("スプレッド拡大中(", spread,
"ポイント) → 待機中 (リトライ=", retry+1, ")");
Sleep(2000);
continue;
}
// エントリー価格と色を決定
if(orderType == OP_BUY){
price = Ask;
clr = clrBlue;
}else if(orderType == OP_SELL){
price = Bid;
clr = clrRed;
}
ticket = OrderSend(Symbol(), orderType, lots, price,
20, sl, tp, orderComment, magic, 0, clr);
if(ticket > 0){
Print("新規注文成功! チケットNo=", ticket,
" レート=", price, " Lots=", lots,
" スプレッド=", spread, "ポイント");
return true;
}else{
int err = GetLastError();
Print("新規注文失敗 エラーNo=", err,
" リトライ回数=", retry+1);
Sleep(2000);
}
}
return false;
}
今回は、RCIの値を取得するGetRCI_MS()関数を作成しRCIの情報を取得しています。
iCustom で RCI を取得する方法(Multi Signal対応)
『RCI Multi Signal』は、短期・中期・長期を
バッファ 0 / 1 / 2 に格納しています。
double rci_short = iCustom(NULL,0,"RCI-Multi-Signal",9,26,52,3,0,1);
double rci_middle = iCustom(NULL,0,"RCI-Multi-Signal",9,26,52,3,1,1);
double rci_long = iCustom(NULL,0,"RCI-Multi-Signal",9,26,52,3,2,1);今回は、オリジナルインジケータなのでiCustom()関数を使用しています。
※当ブログでRCIインジケータを作成した前提で解説しています
引数は以下の通りです。
- 引数1・・・通貨ペアです(NULLでチャートの通貨になります)
- 引数2・・・時間軸です(0でチャートの時間軸になります)
- 引数3・・・インジケータ名称(当サイトのRCIインジを使う場合は、RCI-Multi-Signal)
- 引数4・・・短期期間です(9が一般的です)
- 引数5・・・中期期間です(26が一般的です)
- 引数6・・・長期期間です(52が一般的です)
- 引数7・・・RCIの表示本数です
- 引数8・・・取得する値です(0が短期、1が中期、2が長期の値になります ※3はシグナル値)
- 引数9・・・バーシフトです(0で現在の値、1で1つ前ーのバーの時の値です)
インジケータ名称が間違っている場合

このような形で、「RCI-Multi-Signal.ex4」が存在しないというエラーが出ますので名称はインストールしたインジケータとしっかり合わせましょう。
EAバックテストレポート(RCI EA)
USDJPY(M15, 2020/12〜2025/12, 初期証拠金100万円, FXTFヒストリカル)での結果:
| 通貨ペア・時間足 | PF | 勝率 | 最大DD | 取引回数 | 備考 |
|---|---|---|---|---|---|
| USDJPY M15 | 1.22 | 約39% | 0.21% | 591回 | 中期・長期RCIをフィルターに使い、ダマしを抑えた設計 |

短期RCIだけでなく、中期・長期RCIの向きや傾きを条件に加えているため、 取引回数は少なめですが、その分エントリーの精度が高いEAとなっています。
さいごに|RCIはEA化との相性がとても良い指標です
RCIは「反転に強い」「ノイズに強い」という特性があり、EAロジックに組み込むと相場の地合い判断とエントリー精度が大きく向上する指標です。 今回のサンプルでは、RCIインジケータを iCustom() で取得して売買判定に活用しましたが、RCIは組み合わせ次第で無数の応用ができます。
また、RCI Multi Signal(非リペイント・1〜3本対応)を使えば、 短期・中期・長期の地合いを同時にチェックできるため、EAロジックの設計幅はさらに広がります。
インジケータを自作したり、市販インジを iCustom() で読み込んでEA化することで、 裁量トレードでは見えなかったシグナルの“再現性”を機械的に検証できる点がとても大きなメリットです。
RCIを軸にしたEAは、フィルター追加・傾き条件の調整・クロス判定の強化など、 カスタマイズ次第で精度とエントリー数のバランスを自由に最適化できます。 ぜひ、この記事を参考にご自身のロジックへ発展させてみてください。
RCIを使った分析・EA化を体系的に学びたい方はこちらもどうぞ。
- ✔ RCI Multi Signal(インジ本体・無料配布)
- ✔ RCIインジケータの使い方ガイド(見方・設定ガイド)
- ✔ EAでRCIを使う(iCustom・サンプルEA)※この記事
✅ 今回のロジックをベースにしたEAサンプルも多数公開中
今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。
ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。
📊 【2025年最新】FX自動売買EAランキングも公開中!
当サイトの「どのEA(インジ)が実際に勝っているのか?」を知りたい方はこちら👇
PF(プロフィットファクター)や勝率で徹底比較した最新ランキングから、あなたに最適なEA(インジ)を見つけましょう。
EA開発初心者向けに、今後も実践的なMQL4関数を紹介していきます。
気になる機能やロジックがあれば、ぜひ他の記事もあわせてご覧ください!











コメント
はじめまして。
xmのmt4にて、記事を参考に実装したのですが、テスターを実行すると操作履歴に新規注文約定。チケットNO=0 レート:0
のみが複数実行されます。
インジは読めてるようですが、なにが原因でしょうか??
1分足が良くないでしょうか?
ご教示いただけますと幸いです。
宜しくお願い致します。
はじめまして、かわむさん。多分テスターのスプレッド設定が10pips以上になってるような気がします。その場合、許容スプレッド設定(10→20等に変更)を変えるとエントリーしてくれるようになります。
A_SPREAD = 10 ⇒ エントリー時に許容するスプレッドの設定です(10 = 10pips)
りょうさん
返信ありがとうございます。
おっしゃる通りで、MarketInfo(NULL,MODE_SPREAD)とA_SPREADの値により、if文が通っていない状態でした
ありがとうございます。
りょうさん
別件となりますが、ブログ内でRCIとボリンジャーバンドなど、複数のインジを使用したEAの作成は検討されていないでしょうか??
いくつかロジックの案はあるのですが、実装するのは簡単ではないかもと思い、参考記事を探していたのですが、りょうさんのプログラムはまとまりがよく読みやすいので、記載してもらえたら嬉しいなという思いです。
勝手な要望ですが、ご検討いただけますと幸いです。
こんばんは、ありがとうございます。
RCI+他のインジの組み合わせという感じでしょうか?お問合せからでも良いのでロジック案をお伝え頂ければ、検討いたします。