Pretendo construir un screener con el indicador filtro de kalman, presente en la biblioteca de prorealcode.
El screener calcula el número de giros(el inverso al número de giros) que se han producido en el anterior indicador en las últimas 250 barras(es lo que me permite la versión completa), con objeto de buscar los valores que menos giros tengan, es decir, valores en los que la tendencia sea más constante en el tiempo. Esto es lo que he construido, pero el resultado del screener no es el esperado y no sé por qué, a ver si alguien ayudar.
Saludos
REM
TIMEFRAME(1 hour)
Series = TotalPrice
ONCE Pred = Series
IF BarIndex = 0 THEN
KF = Series
ELSE
Smooth = Pred + (Series - Pred) * SQRT((K / 10000) * 2)
Velo = Velo + ((K / 10000) * (Series - Pred))
Pred = Smooth + Velo
KF = Pred
ENDIF
once nintervalos=0
FOR i=0 TO 250 DO
cambioup=kf[i]> kf[i+1] and kf[i+1]<kf[i+2]
cambiodw=kf[i]< kf[i+1] and kf[i+1]>kf[i+2]
if cambioup or cambiodw then
nintervalos=nintervalos + 1
else
endif
NEXT
//c1=volume>4000000
c2=barindex>253
SCREENER[c2](1/nintervalos*1000 as " menor numero giros")
¡Hola! Prueba utilizando islastbarupdate
once nintervalos=0
if islastbarupdate then
FOR i=0 TO 250 DO
cambioup=kf[i]> kf[i+1] and kf[i+1]<kf[i+2]
cambiodw=kf[i]< kf[i+1] and kf[i+1]>kf[i+2]
if cambioup or cambiodw then
nintervalos=nintervalos + 1
else
endif
NEXT
endif
//c1=volume>4000000
c2=barindex>253
SCREENER[c2](nintervalos as " menor numero giros")
Creo que es la variable K (no la incluiste en el código que publicaste).
No debe exceder los 250.
No, lo siento, me equivoqué, K no es el número de unidades, así que ese no puede ser el problema.
Sí señor, muchas gracias Iván, ahora funciona perfectamente. Gran trabajo el tuyo en el foro, muchas gracias.
REM
TIMEFRAME(1 hour)
k=4//valores entre 1 y 100
Series = TotalPrice
ONCE Pred = Series
IF BarIndex = 0 THEN
KF = Series
ELSE
Smooth = Pred + (Series - Pred) * SQRT((K / 10000) * 2)
Velo = Velo + ((K / 10000) * (Series - Pred))
Pred = Smooth + Velo
KF = Pred
ENDIF
once nintervalos=0
if islastbarupdate then
FOR i=0 TO 250 DO
cambioup=kf[i]> kf[i+1] and kf[i+1]<kf[i+2]
cambiodw=kf[i]< kf[i+1] and kf[i+1]>kf[i+2]
if cambioup or cambiodw then
nintervalos=nintervalos + 1
else
endif
NEXT
endif
//c1=volume>4000000
c2=barindex>253
SCREENER[c2](1/nintervalos as "inverso número giros")
Quedaría así, por si alguien lo quiere usar. Saludos