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;
};

これだけー。

この記事が気に入ったらサポートをしてみませんか?