[k-matsuのページトップ]>[FX関連]>[MT4]>[RCI]
RCI
MT4用のRCIインジはRCIの定義と違って-1〜1の範囲になっているSpearmanRankCorr.mq4しかない
(というかSpearmanRankCorr.mq4は『スピアマンの順位相関係数を実装したもの』でRCIはそれ×100だったんですね)
という今となっては古い情報に基づいて作ってみました(ぉ
どうやらもう他にも存在するようなのですが、
- SpearmanRankCorr.mq4にはちょっとしたバグがあったのでもし他のRCIインジがそれを元にしていたらバグが残っているかも
(オリジナルのコードだったら杞憂です、はい)
- 多次元配列のArraySortによるソートを使ったコードがちょっとだけ探した範囲では見つからなかったのでそのサンプル代わりにもなる
- 範囲を-100〜100のデフォルトと別に-0〜100にする機能を追加(別の0〜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つとりこぼしていました。
価格 | 99 | 98 | 98 | 97 | 97 | 97 | 96 |
スポーツ/日常生活的順位 | 1位 | 同率2位 | 同率2位 | 同率4位 | 同率4位 | 同率4位 | 7位 |
順位(RCI) | 1 | 2.5 | 2.5 | 5 | 5 | 5 | 7 |
順位(SpeamanRankCorr) | 1 | 2.5 | 2.5 | 4 | 5.5 | 5.5 | 7 |
ここを取りこぼすのでここが単独4位に↑ | ↑1つとりこぼしてるので2つ分の平均に |
ちなみに同コードを修正するなら以下のようになります。(80〜82行目,修正箇所は82行目)
for(m = i; m < k; m++)
TrueRanks[m] = averageRank;
i = k-1; // -1を追加
重ねて比較(黄色が修正後)
同率順位が多いところということで値動きが少ないところで差が出ています。あと期間を長くとると同率が出やすくなる分差も出やすくなります。
まあぶっちゃけ大した違いではないのですが(ぉ
[k-matsuのページトップ]>[FX関連]>[MT4]>[RCI]