iRSI関数の書式や引数を調べても、実際にコンパイルして動かせるサンプルコードが見つからず、自分のインジケーターにどう組み込めばいいか分からない——という人向けの記事です。
この記事では、iRSI関数の書式・引数の意味に加えて、実際にMetaEditorでコンパイルしてチャート上に表示できる、iRSI関数を使ったRSIインジケーターのサンプルコードを紹介します。
iRSI関数
RSIとは、テクニカル指標の1つでRelative Strength Indexの頭文字を取った略語になります。
RSIを日本語に訳すと相対力指数になります。
相対力指数は買われ過ぎか売られ過ぎかを判断するための指標として利用します。
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 | |
| PRICE_TYPICAL | 5 | |
| PRICE_WEIGHTED | 6 |
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);
}
//+------------------------------------------------------------------+
ポイントは次の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関数を使いこなせるようになりましょう。
コメント