<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iRSI アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/irsi/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/irsi/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:36:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>iRSI アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/irsi/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</title>
		<link>https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[iRSI]]></category>
		<category><![CDATA[RSI]]></category>
		<category><![CDATA[テクニカル指標]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=12999</guid>

					<description><![CDATA[<p>RSI（Relative Strength Index）は、FXトレーダーなら一度は使ったことがあるほど人気のテクニカル指標です。「買われすぎ」「売られすぎ」を数値で判断できるため、逆張りトレードの根拠として非常に重宝し [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/">【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>RSI（Relative Strength Index）は、FXトレーダーなら一度は使ったことがあるほど人気のテクニカル指標です。「買われすぎ」「売られすぎ」を数値で判断できるため、逆張りトレードの根拠として非常に重宝します。</p>
<p>MQL4では、<strong>iRSI関数</strong>を使うことで、たった1行のコードでRSIの値を取得できます。この記事では、iRSI関数のパラメータの意味から、実際に動作する逆張りEAのサンプルコードまで、初心者にもわかりやすく徹底解説します！</p>
<h2><span id="toc1">RSIとは？基本をおさらい</span></h2>
<p>RSI（相対力指数）は、一定期間の値動きにおける「上昇幅」と「下降幅」の比率から、相場の過熱感を0〜100の数値で表すオシレーター系指標です。</p>
<h3><span id="toc2">RSIの一般的な判断基準</span></h3>
<ul>
<li><strong>RSI ≧ 70</strong>：買われすぎ → 売りシグナルの候補</li>
<li><strong>RSI ≦ 30</strong>：売られすぎ → 買いシグナルの候補</li>
<li><strong>RSI = 50</strong>付近：方向感なし（中立）</li>
</ul>
<p>計算に使う期間は<strong>14</strong>が最も一般的で、MetaTraderのデフォルト設定でも14が使われています。期間を短くすると感度が高くなりダマシも増え、長くすると滑らかになりますがシグナルが遅れる傾向があります。</p>
<h2><span id="toc3">iRSI関数の書式とパラメータ</span></h2>
<p>MQL4でRSIの値を取得するには、<strong>iRSI関数</strong>を使います。書式は以下のとおりです。</p>
<pre><code class="language-mql4">double iRSI(
    string symbol,        // 通貨ペア名
    int    timeframe,     // 時間足
    int    period,        // RSIの計算期間
    int    applied_price, // 適用価格
    int    shift          // シフト（何本前の足か）
);
</code></pre>
<h3><span id="toc4">各パラメータの詳細</span></h3>
<table>
<thead>
<tr>
<th>パラメータ</th>
<th>型</th>
<th>説明</th>
<th>よく使う値</th>
</tr>
</thead>
<tbody>
<tr>
<td>symbol</td>
<td>string</td>
<td>通貨ペア名。NULLで現在のチャートの通貨ペア</td>
<td>NULL, Symbol()</td>
</tr>
<tr>
<td>timeframe</td>
<td>int</td>
<td>時間足を指定する定数</td>
<td>0（現在の時間足）</td>
</tr>
<tr>
<td>period</td>
<td>int</td>
<td>RSIの計算期間</td>
<td>14</td>
</tr>
<tr>
<td>applied_price</td>
<td>int</td>
<td>計算に使う価格の種類</td>
<td>PRICE_CLOSE</td>
</tr>
<tr>
<td>shift</td>
<td>int</td>
<td>何本前の足のRSI値を取得するか</td>
<td>0, 1</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">時間足定数の一覧</span></h3>
<table>
<thead>
<tr>
<th>定数名</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_CURRENT</td>
<td>0</td>
<td>現在のチャートの時間足</td>
</tr>
<tr>
<td>PERIOD_M1</td>
<td>1</td>
<td>1分足</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5</td>
<td>5分足</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15</td>
<td>15分足</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30</td>
<td>30分足</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>60</td>
<td>1時間足</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>240</td>
<td>4時間足</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>日足</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>週足</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>月足</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">適用価格定数の一覧</span></h3>
<table>
<thead>
<tr>
<th>定数名</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PRICE_CLOSE</td>
<td>0</td>
<td>終値（最も一般的）</td>
</tr>
<tr>
<td>PRICE_OPEN</td>
<td>1</td>
<td>始値</td>
</tr>
<tr>
<td>PRICE_HIGH</td>
<td>2</td>
<td>高値</td>
</tr>
<tr>
<td>PRICE_LOW</td>
<td>3</td>
<td>安値</td>
</tr>
<tr>
<td>PRICE_MEDIAN</td>
<td>4</td>
<td>中央値（(高値+安値)/2）</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>典型価格（(高値+安値+終値)/3）</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値（(高値+安値+終値+終値)/4）</td>
</tr>
</tbody>
</table>
<h2><span id="toc7">基本的な使い方</span></h2>
<p>まずは最もシンプルなiRSI関数の呼び出し方を見てみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 現在の足（確定前）のRSI値を取得
    double rsi_current = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);

    // 1本前の足（確定済み）のRSI値を取得
    double rsi_prev = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);

    // ログに出力して確認
    Print("RSI(現在): ", rsi_current, " / RSI(1本前): ", rsi_prev);
}
</code></pre>
<p>ここで重要なのが<strong>shiftパラメータ</strong>の使い分けです。</p>
<ul>
<li><strong>shift=0</strong>：現在形成中のローソク足のRSI値。ティックごとに値が変わる（<strong>未確定値</strong>）</li>
<li><strong>shift=1</strong>：1本前の確定済みローソク足のRSI値。その足が閉じた後は変化しない（<strong>確定値</strong>）</li>
</ul>
<p>EAのエントリー判断では、<strong>shift=1（確定値）を基準に使う</strong>のが一般的です。未確定の値で判断すると、ローソク足が確定する前にシグナルが出たり消えたりして、誤ったエントリーにつながる可能性があります。</p>
<h2><span id="toc8">実践！RSI逆張りEAのサンプルコード</span></h2>
<p>ここからは、RSIの「売られすぎ→反転上昇」で買い、「買われすぎ→反転下降」で売るという逆張りロジックのEAを作ってみましょう。単にRSIが閾値を超えているかどうかだけでなく、<strong>「閾値を下から上に（または上から下に）抜けた瞬間」</strong>を検知するテクニックを使います。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//|                                              RSI_Reversal_EA.mq4 |
//|                        RSI逆張りEAサンプル                         |
//+------------------------------------------------------------------+
#property strict

// === 入力パラメータ ===
input int    RSI_Period      = 14;           // RSI計算期間
input double RSI_UpperLevel  = 70.0;         // 買われすぎライン
input double RSI_LowerLevel  = 30.0;         // 売られすぎライン
input double LotSize         = 0.01;         // ロットサイズ
input int    StopLoss_Pips   = 50;           // ストップロス（pips）
input int    TakeProfit_Pips = 100;          // テイクプロフィット（pips）
input int    MagicNumber     = 12345;        // マジックナンバー

// === グローバル変数 ===
datetime lastBarTime = 0; // 新しい足の検出用

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    Print("RSI逆張りEA 起動 - Period:", RSI_Period,
          " Upper:", RSI_UpperLevel, " Lower:", RSI_LowerLevel);
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert tick function                                               |
//+------------------------------------------------------------------+
void OnTick()
{
    // --- 新しい足が確定したときだけ処理を行う ---
    if(Time[0] == lastBarTime)
        return;
    lastBarTime = Time[0];

    // --- 既にポジションを持っていたらエントリーしない ---
    if(CountMyOrders() > 0)
        return;

    // --- RSI値を取得 ---
    double rsi1 = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 1); // 1本前（確定）
    double rsi2 = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 2); // 2本前（確定）

    // --- pipsをポイントに変換（5桁/3桁ブローカー対応）---
    double point = Point;
    if(Digits == 3 || Digits == 5)
        point = Point * 10;

    double sl, tp;

    // === 買いエントリー条件 ===
    // RSIが「売られすぎライン」を下から上に抜けた瞬間
    if(rsi2 < RSI_LowerLevel &#038;&#038; rsi1 >= RSI_LowerLevel)
    {
        sl = Ask - StopLoss_Pips * point;
        tp = Ask + TakeProfit_Pips * point;

        int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp,
                               "RSI Buy", MagicNumber, 0, clrBlue);
        if(ticket > 0)
            Print("買いエントリー成功 RSI(2本前):", rsi2, " RSI(1本前):", rsi1);
        else
            Print("買いエントリー失敗 Error:", GetLastError());
    }

    // === 売りエントリー条件 ===
    // RSIが「買われすぎライン」を上から下に抜けた瞬間
    if(rsi2 > RSI_UpperLevel && rsi1 <= RSI_UpperLevel)
    {
        sl = Bid + StopLoss_Pips * point;
        tp = Bid - TakeProfit_Pips * point;

        int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp,
                               "RSI Sell", MagicNumber, 0, clrRed);
        if(ticket > 0)
            Print("売りエントリー成功 RSI(2本前):", rsi2, " RSI(1本前):", rsi1);
        else
            Print("売りエントリー失敗 Error:", GetLastError());
    }
}

//+------------------------------------------------------------------+
//| 自分のEAのポジション数をカウント                                     |
//+------------------------------------------------------------------+
int CountMyOrders()
{
    int count = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
                count++;
        }
    }
    return count;
}
</code></pre>
<h3><span id="toc9">サンプルコードの4つのポイント</span></h3>
<h3><span id="toc10">① 新しい足の検出で無駄な処理を防止</span></h3>
<p><code>Time[0] == lastBarTime</code> のチェックにより、新しいローソク足が確定したタイミングでのみエントリー判断を行います。ティックごとに何度もオーダーを送るのを防ぎ、安定した動作を実現します。</p>
<h3><span id="toc11">② RSIの「クロス」で瞬間を捉える</span></h3>
<p>単に「RSIが30以下」だけでエントリーすると、RSIが30以下にいる間ずっとシグナルが出続けてしまいます。そこで、<strong>2本前のRSI（rsi2）と1本前のRSI（rsi1）を比較</strong>し、閾値を「抜けた瞬間」だけを検知しています。</p>
<pre><code class="language-mql4">// 例：売られすぎラインを下から上に抜けた瞬間
if(rsi2 < RSI_LowerLevel &#038;&#038; rsi1 >= RSI_LowerLevel)
</code></pre>
<p>この条件は「2本前はまだ30未満だったが、1本前で30以上に回復した」ことを意味します。つまり、売られすぎの状態から反転し始めた瞬間にエントリーできるわけです。</p>
<h3><span id="toc12">③ MagicNumberでEAを識別</span></h3>
<p>MagicNumberを設定することで、複数のEAを同時に稼働させてもポジションの管理が混乱しません。<code>CountMyOrders()</code>関数では、通貨ペアとMagicNumberの両方が一致するポジションだけをカウントしています。</p>
<h3><span id="toc13">④ 5桁ブローカー対応のpips変換</span></h3>
<p>近年のFXブローカーの多くは5桁（3桁）の価格表示を採用しています。<code>Digits == 5</code>の場合は<code>Point * 10</code>として、pips単位の指定が正しく反映されるようにしています。</p>
<h2><span id="toc14">iRSI関数を使うときの注意点</span></h2>
<h3><span id="toc15">shift=0の値は未確定</span></h3>
<p>先ほども触れましたが、shift=0で取得できるRSIの値はティックごとに変化します。エントリー判断に使う場合は、基本的に<strong>shift=1以上の確定値</strong>を使いましょう。</p>
<h3><span id="toc16">マルチタイムフレーム分析への応用</span></h3>
<p>iRSI関数の第2引数（timeframe）を変えることで、現在のチャートとは異なる時間足のRSI値も取得できます。</p>
<pre><code class="language-mql4">// 現在のチャートが5分足でも、日足のRSIを取得できる
double rsi_daily = iRSI(NULL, PERIOD_D1, 14, PRICE_CLOSE, 1);

// 4時間足のRSI
double rsi_h4 = iRSI(NULL, PERIOD_H4, 14, PRICE_CLOSE, 1);
</code></pre>
<p>例えば「日足のRSIが50以上のときだけ、短期足で買いエントリーする」といったフィルターとして活用できます。</p>
<h3><span id="toc17">チャート上のRSIインジケーターとの値一致</span></h3>
<p>iRSI関数で取得した値は、MetaTrader上でRSIインジケーターを表示したときの値と<strong>同じパラメータを指定すれば一致</strong>します。値がずれる場合は、計算期間や適用価格の設定が異なっていないか確認してみてください。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iRSI関数</strong>について、基本から実践まで解説しました。ポイントを振り返りましょう。</p>
<ul>
<li><strong>iRSI関数</strong>は5つの引数（通貨ペア、時間足、期間、適用価格、シフト）を指定してRSI値を取得する</li>
<li>エントリー判断には<strong>shift=1（確定値）</strong>を使うのが基本</li>
<li>RSIの閾値を<strong>「抜けた瞬間」</strong>を検知するには、2本分のRSI値を比較する</li>
<li>timeframeパラメータを活用すれば<strong>マルチタイムフレーム分析</strong>も簡単</li>
<li>MagicNumber管理や5桁ブローカー対応など、<strong>実運用を意識した実装</strong>が大切</li>
</ul>
<p>RSIは非常にシンプルな指標ですが、移動平均線やボリンジャーバンドなど他のインジケーターと組み合わせることで、より精度の高いEAに発展させることができます。まずは今回のサンプルコードをベースに、ストラテジーテスターで動作を確認するところから始めてみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/">【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
