iRSI関数の書式や引数を調べても、実際にコンパイルして動かせるサンプルコードが見つからず、自分のインジケーターにどう組み込めばいいか分からない——という人向けの記事です。

この記事では、iRSI関数の書式・引数の意味に加えて、実際にMetaEditorでコンパイルしてチャート上に表示できる、iRSI関数を使ったRSIインジケーターのサンプルコードを紹介します。

iRSI関数

RSIとは、テクニカル指標の1つでRelative Strength Indexの頭文字を取った略語になります。

RSIを日本語に訳すと相対力指数になります。

相対力指数は買われ過ぎか売られ過ぎかを判断するための指標として利用します。

RSIについては以下の記事を参照してください。

FXのRSIの計算式・期間やオススメの手法についてわかりやすく解説してみた
RSIとは、Relative Strength Indexの略語で一定期間内の相対的な「買われ過ぎ」「売られ過ぎ」を表します。 RSIはJ.W.ワイルダーが考案したテクニカル指標になります。 今回は、FXのRSIの計算式・期間やオススメの手…

iRSI関数とはRSIの値を取得するために使用する関数になります。

RSIの計算式

RSIの計算式は過去の一定期間の上げ幅(前日比)の合計を

同じ期間の上げ幅の合計と下げ幅の合計を足した数字で割って、100を掛けたものです。

RSIの数字は0〜100で表されて、一般的には

  • 70~80%以上で買われすぎライン
  • 20~30%以下で売られすぎライン

と判断されます。

iRSI関数の書式

iRSI関数の書式は以下のようになります。

double iRSI(
string symbol, // 通貨ペア
int timeframe, // 時間軸
int period, // 平均期間
int applied_price, // 適用価格
int shift // シフト
);

iRSI関数の引数の説明

iRSI関数の引数の説明していきます。

string symbol

symbolは通貨ペアを指定します。

通貨ペア名を指定せず、チャートの通貨ペアのRSIの値を取得したい場合はNULLを設定します。

int timeframe

timeframeはRSIの値を計算する時間軸の指定します。

種類 定数 説明
PERIOD_CURRENT 0 現在の時間足
PERIOD_M1 1 1分足
PERIOD_M5 5 5分足
PERIOD_M15 15 15分足
PERIOD_M30 30 30分足
PERIOD_H1 60 1時間足
PERIOD_H4 240 4時間足
PERIOD_D1 1440 日足
PERIOD_W1 10080 週足
PERIOD_MN1 43200 月足

int period

periodはRSIの値を計算する期間の指定します。

int applied_price

applied_priceはRSIの値の計算に使用する価格データの指定します。

種類 定数 説明
PRICE_CLOSE 0 終値
PRICE_OPEN 1 始値
PRICE_HIGH 2 高値
PRICE_LOW 3 安値
PRICE_MEDIAN 4
中央値
(高値+安値)÷2
PRICE_TYPICAL 5
代表値
(高値+安値+終値)÷3
PRICE_WEIGHTED 6
加重終値
(高値+安値+終値+終値)÷4

int shift

shiftはRSIの値を取得したいバーの位置の指定します。

  • 現在のバーであれば:0
  • 1本前のバーであれば:1
  • 2本前のバーであれば:2

と言う形で記述します。

iRSI関数を使ってRSIインジケーターを作る

書式と引数が分かったところで、実際にiRSI関数を使ってRSIをサブウィンドウに表示するカスタムインジケーターを作ってみましょう。

コピーしてMetaEditorに貼り付ければ、そのままコンパイルして動作を確認できます。

//+------------------------------------------------------------------+
//|                                                  iRSI_Sample.mq4 |
//+------------------------------------------------------------------+
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_minimum 0
#property indicator_maximum 100

input int RSI_Period    = 14;//RSIの計算期間
input int Applied_Price = PRICE_CLOSE;//適用価格

double RSIBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0, RSIBuffer);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexLabel(0, "RSI(" + IntegerToString(RSI_Period) + ")");
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted = IndicatorCounted();
   int limit = Bars - counted;
   if(counted > 0)
      limit++;

   for(int i = limit - 1; i >= 0; i--)
     {
      RSIBuffer[i] = iRSI(NULL, 0, RSI_Period, Applied_Price, i);
     }
   return(0);
  }
//+------------------------------------------------------------------+
Copy

ポイントは次の3つです。

  • SetIndexBuffer(0, RSIBuffer):計算したRSIの値を、画面に描画するバッファ0番へ結び付けます
  • IndicatorCounted():前回のティックまでに計算済みのバー数を取得し、そこから先の未計算分だけをループすることで、毎ティック全バーを計算し直す無駄を避けます
  • iRSI(NULL, 0, RSI_Period, Applied_Price, i):シフトiに対応するバーごとのRSI値を1本ずつ取得し、RSIBuffer[i]へ格納します

RSI_Period(計算期間)とApplied_Price(適用価格)はinput変数にしているので、チャートに読み込んだ後にプロパティ画面から数値を変更して試すこともできます。

まとめ

今回はiRSI関数について説明しました。

よく使うテクニカル指標なので、しっかりとiRSI関数を使いこなせるようになりましょう。

関連記事