[k-matsuのページトップ]>[FX関連]>[MT4]>[RCI]


RCI

MT4用のRCIインジはRCIの定義と違って-1〜1の範囲になっているSpearmanRankCorr.mq4しかない
(というかSpearmanRankCorr.mq4は『スピアマンの順位相関係数を実装したもの』でRCIはそれ×100だったんですね)
という今となっては古い情報に基づいて作ってみました(ぉ
どうやらもう他にも存在するようなのですが、

というのもあるので拙作も公開強行(w
でも機能少ないし需要ないかも…あ、複数本の表示はドラッグ&ドロップによる重ねがけで御対応ください。

ダウンロード

RCI.mq4 (4kB,禁転載)

パラメータ

RCIPeriod
RCIを求める際の期間。デフォルトは9(SpearmanRankCorr.mq4ではデフォルト14)
この期間分の価格のソートをチャートの表示されているローソク(バー)の数の回数(厳密にはバー数−期間分)行いますので
あまり大きい数を指定すると遅くなりますので御注意。
大きい数を指定したいけど遅くなっては困る場合後述のCountBarMaxを指定してチャートの最近の部分のみ表示させるようにして下さい。
RCImin0max100
RCIを本来の定義通りに算出すると-100〜100になりますがこれを0〜100になるようにするかどうか。
デフォルトはfalse(定義通りの-100〜100)。
CountBarMax (SpearmanRankCorr.mq4のCalculatedBarsに相当)
RCIを計算/表示する数を制限する場合に指定してください。
0の場合制限なし。デフォルトは0。

雑記

拙作分とSpearmanRankCorr.mq4を100倍した物の線が重ならないのでどこが間違ってるのか探し回った結果見つかりました。
RCIは指定した期間での価格の順位付けをしますが、その際同率の順位は平均化します。
例えば同率2位の価格が2つある場合、1位-2位-2位-4位ではなく1位-2.5位-2.5位-4位になります。
ここで期間内に同率の価格が複数組あってさらにそれが隣接している場合、SpearmanRankCorr.mq4は順位の平均化を1つとりこぼしていました。

価格99989897979796
スポーツ/日常生活的順位1位同率2位同率2位同率4位同率4位同率4位7位
順位(RCI)12.52.55557
順位(SpeamanRankCorr)12.52.545.55.57
ここを取りこぼすのでここが単独4位に↑↑1つとりこぼしてるので2つ分の平均に

ちなみに同コードを修正するなら以下のようになります。(80〜82行目,修正箇所は82行目)

       for(m = i; m < k; m++)
           TrueRanks[m] = averageRank;
       i = k-1; // -1を追加

重ねて比較(黄色が修正後)
同率順位が多いところということで値動きが少ないところで差が出ています。あと期間を長くとると同率が出やすくなる分差も出やすくなります。
まあぶっちゃけ大した違いではないのですが(ぉ


[k-matsuのページトップ]>[FX関連]>[MT4]>[RCI]