RCI(計算式、チャート、エクセルVBAコード)テクニカル指標


2008年12月10日



 

 

RCIについてです。計算式、チャート、エクセルVBAコード

 

過去のレートの順位付けにより算出される指標です。

 

時間の順位とレートの順位を算出し、それらを用いて計算されます。

 

計算式、計算方法、チャート、エクセルVBAコードを掲載しています。

 

RCIは表と計算式のみで計算を実行すると、使用列数が膨大となるためエクセルVBAコードなど、書き換え可能な状況が必要となります。

 

 

 

 

RCIの計算式(Nは足数)

 

RCI = ( 1 – 6y / ( N × ( N^2 – 1 ) ) ) × 100

a = 時間の順位

b = レートの順位

y = (a-b)^2 の合計

※“^2”は2乗

 

エクセルで計算する場合は、期間内の時間の順位、レートの順位を表示の上、上記式内のaを求めます。

 

時間の順位は、例えばRCIのパラメータが10の場合は、現在の足が1、直前の足が2、9本前の足が10と成ります。

 

レートの順位は、現在の足も含めた直近の10本のうち、一番大きなレートを1、2番目に大きなレートを2、一番小さなレートを10として計算されます。この値を使用して、bを算出します。

 

そして、aとbを使用して、a-b、(a-b)^2を算出します。

 

例えば、下記のようなレート推移があった場合、a-b、(a-b)^2はそれぞれ表の右側の様に成ります。

 

 

レート 時刻 a
時間の順位
b
レートの順位
a-b (a-b)^2
202.97 6:30:00 9 3 6 36
203.06 7:00:00 8 1 7 49
203.04 7:30:00 7 2 5 25
202.85 8:00:00 6 4 2 4
202.85 8:30:00 5 4 1 1
202.59 9:00:00 4 6 -2 4
202.52 9:30:00 3 7 -4 16
202.51 10:00:00 2 8 -6 36
202.45 10:30:00 1 9 -8 64

 

 

算出されたa-b、(a-b)^2を使用して、下記式にてRCIを求めます。(Nはパラメータ)

 

RCI = ( 1 – 6y / ( N × ( N^2 – 1 ) ) ) × 100

 

 

上記表や計算式からも分かるとおり、エクセルの関数等を使用してRCIを算出する場合には、過去N本内における現在レートの順位がパラメータ分必要となり、その順位はパラメータ内にあるうちは確定値ではない(現在の足と次の足ではパラメータ期間内での順位が変わる可能性がある。)ため、パラメータの数分、各位置においての順位を表示する必要があります。

 

例えば、現在の足でRCIを算出する場合と、次の足でRCIを算出する場合、現在の足の時間の順位は必ず、レートの順位は可能性として、変わることがあります。

 

上記表で言えば、一番したの10:30時点で計算を行う場合と、下から2段目の10:00時点で計算を行う場合、10時の段のa,b,a-b,(a-b)^2は変わるため、確定値を書き込み、それを次の段(10:30の段)で使用する事が出来ず、表で計算を行う場合、上記表がパラメータ分(上記表の場合は10組分の列が)必要となります。

 

VBAを使用すると、RCI算出の都度、順位の書き換えを行なうことが出来ますので、その限りではなく、パラメータの変更も列を追加することなく、容易に可能です。(後述)

 

RCIのチャート

青線:9本 赤線:26本 黄色線:52本

 

売買の指標としては、短期のRCIと長期のRCIのゴールデンクロス、デッドクロスで行ないます。

 

また、RCIの単純移動平均線を別に算出し、MACDと同じようにRCIシグナルとし、それとRCIとのクロスを売買指標とすることも可能です。(下記RCI26本とRCIシグナル3本)

 

 

 

RCIのVBAコード

‘※ エクセルの1列目(A列)に行番号、2列目(B列)に日時、
‘※ 3列目(C列)~6列目(F列)に始値・高値・安値・終値
‘********************************
‘rci :RCIの採用本数
‘num:現在の行
‘cell_rci:RCI計算値書込み列
‘cell_rci_2:前述計算式(a-b)^2書込み列

‘rank_t:時間の順位
‘rank_r:レートの順位
‘hani1:パラメータの期間内レートの範囲
‘********************************
If Cells(num – (rci – 1), 6)  <> “”  Then
Set hani1 = Range(Cells(num – (rci – 1), 6), .Cells(num, 6))
For ii1 = 1 To rci_s
i1 = num – (rci – ii1)
rank_r = Application.WorksheetFunction.Rank(Cells(i1, 5), hani1) + _
(Application.WorksheetFunction.CountIf _
(hani1, Cells(i1, 5)) – 1) / 2
rank_t = rci + 1 – ii1
.Cells(i1, 108) = (rank_t – rank_r) ^ 2
Next ii1
x = Application.WorksheetFunction.Sum _
(Range(Cells(num – (rci – 1), cell_rci_2), _
Cells(num, cell_rci_2)))
.Cells(num_1, cell_rci) = (1 – 6 * x / (rci * (rci ^ 2 – 1))) * 100
End If

 

 

テクニカル指標一覧

罫線談義一覧

(外部リンク)テクニカル指標(Wikipedia)