MT4のRSIは本当にRSI ???

RSI(Relative Strength Index:相対力指数)は、J.W.ワイルダーが『ワイルダーテクニカル分析入門』で紹介したモメンタム・オシレーター系のテクニカル指標で、計算式は、
RSI = 100 - [100 / (1 + RS)]
RS=計算期間の値上がり幅の平均を計算期間の値下がり幅の平均値で割ったもの(=相対力)
と紹介されていることが多いと思います。

…で、実際にこれを手計算で求めてみるとMT4付属のRSIとは一致しません
MT4のRSIの計算式は、RSI.mq4 のコード(http://codebase.mql4.com/source/1210 )を見れば分かりますが、
平均の求め方がちょっと変わっています。

{
//---- smoothed moving average
rel=Close[i]-Close[i+1];
if(rel>0) sump=rel;
else sumn=-rel;
positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
}

これは、計算期間の単純平均を求めない代わりに、前日の平均値と今日の値から今日の平均値を求めている感じで、EMA(指数移動平均)に近い考え方です。
これって、本当に正しいRSIなの???と思って調べたところ、
http://www.k3.dion.ne.jp/~forex/tc/rsi.htm
にRSIの計算方法のBパターンとして紹介されていました。

ワイルダーの定義がどちらだったのかは分かりませんが、計算式の定義は注意して見る必要がありそうですね。

  • Kiriri

    自分はRSIと言えばタイプBを指すだと思っており、別タイプが存在するということはいままで知りませんでした。たまたま今まで使っていたシステムがすべてタイプBだったからです。そういえば、某プロパイダでシグナルを出しているのに使われているRSIがどうも自分のRSIとは違う値を示しておりず〜っと不思議に思っていましたが、このブログを見てタイプAを使っていることがわかりました。なお、この件でRSIググってみたらたまたまRSIについて書かれている興味深いブログをみつけましたので、ご紹介します。勝手にアドレス載せて良いのか分からないので、”勝てる逆張りスイングトレード”でググってみると辿り着きます。かなり(理系の人間には)おもしろい記載がありますので、自分は全ページ一気読みしてしまいました。
    追記:MT4のインディケータで問題なのはRSIではなく、ADX(DMI)です。MT4のADXはどうも一般に使用されているものとはだいぶ違うように思いますので、注意が必要と思います。

  • ふぁい (id:fai_fx)

    コメント&ブログの紹介ありがとうございます。^^ちらっと検索したら、なかなか面白そうなサイトですねぇ。あとでじっくり読みたいと思います。
    追記頂いた件は、海外のフォーラムでそういう噂を聞いたことがあったのですが、せっかくなので調査してまとめ?て置きました。

  • 澄心 (id:chousin)

    RSIについて林康史は
    「RSIの計算方法はまずRSIを算出し、このRSをベースにインデックスを作成します」として
    RS=一定期間の終値の上昇幅の合計/一定期間の終値の下落幅の合計
    RSI=100−100/RS+1
    を紹介しています。
    また、同氏の他書では
    上昇幅の合計をU、下落幅の合計をDとすると
    RSI=100-100/RS+1
     =100-100/(U/D)+1
     =100-100D/U+D
     =100U+100D-100D/U+D
     =(U/U+D)*100(%)
    と紹介していました。

    ブログ「新米為替トレーダーのテクニカル分析入門」では下記の紹介でした。
    RSIの計算方法は何通りかあるようです。
    値上がり幅、値下がり幅の計算には通常は前日の終値と当日の終値を使用します。
    Aパターン
    RSI=N日間の値上がり幅平均÷(N日間の値上がり幅平均+N日間の値下がり幅平均)×100
    Bパターン
    一日目
    RSI=N日間の値上がり幅平均÷(N日間の値上がり幅平均+N日間の値下がり幅平均)×100
    二日目以降 (A=一日目のN日間の値上がり幅平均 B=一日目のN日間の値下がり幅平均)
    RSI=(A×(N-1)+当日の値上がり幅)÷((A×(N-1)+当日の値上がり幅)÷N+(B×(N-1)+当日の値下がり幅)÷N)

コメントを書く