El código parece correcto, aunque hay un error, culpa mía por no haber explicado bien.
El valor (1,2,3,4) que aparece en el código de amibroker se refiere a la barra actual(1), la anterior(2),… que en prorealcode es [0], [1],….
Por tanto el código debería quedar así, supongo
//r1 = ValueWhen ( C < O , H – O , 1 ); r2 = ValueWhen ( C < O , H – O , 2 );
//r3 = ValueWhen ( C < O , H – O , 3 ); r4 = ValueWhen ( C < O , H – O , 4 );
$r[0]=0
$r[1]=0
$r[2]=0
$r[3]=0
a = 0
for i = 0 to 200 do
if close[i]<open[i] then
$r[a] = high[i]-open[i]
a=a+1
if a=3 then
break
endif
endif
next
rmedium = 0.25 * ($r[0] + $r[1] + $r[2] + $r[3])
return rmedium
Pero por alguna razón no da el resultado correcto.
Acabo de probarlo en el gráfico del SPY y en los últimos 4 días bajistas se han producido los siguientes valores
Día HIGH LOW H-L
16 abril 417.91 417.25 0.66
19 abril 416.74 416.26 0.48
20 abril 415.09 413.91 1.18
22 abril 416.78 415.89 0.89
SUMA 3.21 MEDIA = 3.21/4 = 0.8025
Ese es el resultado que debería dar, pero el indicador me da como resultado 0.63750
No alcanzo a ver donde está el error