RCI(Rank Correlation Index)の計算
なんか実装が見つけられなかったので記載しておきます。nodejsで最初作ったような気がするのですがどっかいってまいました!>みっけた
参考 : https://kabu.com/investment/guide/technical/14.html
python 3.5
def RCI(values,period=5):
result = [None] * (period - 1)
for end in range(period-1,len(values)):
start = end - period + 1
target = values[start:end+1]
target_sorted = sorted(target,reverse=True)
i=0
d=0
while i < period:
time_rank = period - i
price_rank = target_sorted.index(target[i]) +1
d = d + ((time_rank - price_rank)*(time_rank - price_rank))
i += 1
rci = 6*d / (period * (period*period -1))
rci = (1-rci)*100
result.append(rci)
return result
RCI(closes)
```
[None,
None,
None,
None,
90.0,
30.000000000000004,
0.0,
-70.0,
-70.0,
-80.0,
-30.000000000000004,
35.0,
90.0,
50.0,
50.0,
80.0,
80.0,
・
・
・
]
```
JAVASCRIPT
let RCI = (values,period) => {
let result = [];
for(let i =0 ; i<period - 1 ; i++){
result.push(NaN)
}
for(let end = period-1;end < values.length ; end++){
let start = end - period + 1;
let target = values.slice(start,end+1);
let target_sorted = values.slice(start,end+1).sort((a,b) => {
return b-a;
});
let i = 0;
let d = 0;
while( i < period ){
let time_rank = period - i;
let price_rank = target_sorted.indexOf(target[i])+1;
d = d + ((time_rank - price_rank)*(time_rank - price_rank));
i += 1;
}
let rci = 6*d / (period * (period*period -1))
rci = (1-rci)*100
result.push(rci)
}
return result;
};
これだけー。