Indicador Signal to Noise Ratio para PRT

Avatar de Usuario
X-Trader
Administrador
Mensajes: 13002
Registrado: 06 Sep 2004 10:18
Contactar:

Indicador Signal to Noise Ratio para PRT

Mensaje por X-Trader »

Creo este hilo para seguir con el debate.

Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
Avatar de Usuario
Rafa7
Mensajes: 4929
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Indicador Signal to Noise Ratio para PRT

Mensaje por Rafa7 »

Sres foristas,


En el código del Effective Ratio de Kauffman que compartí, colgué el siguiente código:

Código: Seleccionar todo

pi = 3.141592653589793
velocidad = abs(momentum[n])
recorrido = summation[n] (abs(momentum[1]))
er = 100 * velocidad / recorrido
return er as "%Ratio de eficacia", 50 / pi as "Frontera"
Al numerador lo llamé velocidad y al denominador lo llamé recorrido, porque así lo he visto implementado por alguien.
Pero, en realidad los nombres están errados.
Si bien es cierto que al numerador lo podríamos llamar velocidad, al denominador lo podríamos también llamar velocidad. Este es el punto.
Es como si consideramos ir de Madrid a Barcelona en auto. Entre Barcelona y Madrid hay n kilómetros de distancia (si fuéramos en línea recta) pero hemos hecho curvas y en realidad hemos recorrido m kilómetros. Obviamente con m > n, ya que hemos hecho curvas. n / m tendrá un valor entre 0 y 1, y representa la eficacia del recorrido.
En realidad, lo que estamos calculado es velocidad eficaz dividida por velocidad del recorrido. O visto de otra manera lo que estamos calculando es la distancia (longitud de un recorrido en línea recta) dividida por la longitud del recorrido.
Así que la variable que he llamado velocidad sería más correcto llamarla distancia.

O sea que:
er = 100 * distancia / recorrido.

Así que el nombre que eligió Kauffman, Effective Ratio, es muy adecuado.

En cuanto al nombre que he puesto al indicador Meander, es muy difícil encontrar un nombre apropiado. Por lo que prefiero llamarle por lo que me inspiró la creación del indicador: los meandros.

Otra cosa a considerar es el peligro de que el indicador divida por cero. ¿Puede ocurrir? Sí puede ocurrir. Supongamos que durante n velas el precio de cierre es idéntico. ¿Qué pasaría? Estaríamos dividiendo por cero. La probabilidad de que dividamos por cero existe, y es mayor cuanto menor sea n.
Para evitarlo yo emplearía este otro código:

Código: Seleccionar todo

//parámetros:
//   n (número de velas), entero > 0, 22 por defecto
pi = 3.141592653589793
distancia = abs(momentum[n])
recorrido = summation[n] (abs(momentum[1]))
if distancia = 0 then
   eficacia = 0
else
   eficacia = 100 * distancia / recorrido
endif
return  eficacia as "%Ratio de eficacia", 50 / pi as "%Frontera"
Explicación: si recorrido fuese cero, también lo sería distancia. Pero si distancia fuese cero no necesariamente recorrido sería cero. Así que prefiero preguntar por distancia, en lugar de por recorrido, porque es más probable que distancia sea cero que recorrido sea cero.

Tocaré los códigos de Meander y StochMeander para también evitar el caso de división por cero, y para que los nombres de las variables sean las más lógicas posibles.



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Avatar de Usuario
Rafa7
Mensajes: 4929
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Indicador Signal to Noise Ratio para PRT

Mensaje por Rafa7 »

Sres. foristas,


He hecho correcciones en los códigos de los 3 indicadores para evitar que se pueda producir la división por cero. De paso he puesto nombres más lógicos a las variables.

Así quedan los códigos:

Effective Ratio de Kauffman:

Código: Seleccionar todo

//parámetros:
//   n (número de velas), entero > 0, 22 por defecto
pi = 3.141592653589793
distancia = abs(momentum[n])
recorrido = summation[n] (abs(momentum[1]))
if distancia = 0 then
   eficacia = 0
else
   eficacia = 100 * distancia / recorrido
endif
return  eficacia as "%Ratio de eficacia", 50 / pi as "%Frontera"
Meander:

Código: Seleccionar todo

//parámetros:
//   n (número de velas), entero > 0, 22 por defecto
pi = 3.141592653589793
cte = 1 / (2 * pi)
distancia = momentum[n]
recorrido = summation[n] (abs(momentum[1]))
if distancia = 0 then
   meander = 50
else
   meander = 50 * (distancia / recorrido + 1)
endif
return  meander as "%Meander", 50 * (1 - cte) as "%Bajista", 50 * (1 + cte) as "%Alcista"
Y StochMeander:

Código: Seleccionar todo

//parámetros:
//   n (número de velas), entero > 0, 11 por defecto
m = 2 * n
distancia = momentum[m]
recorrido = summation[m] (abs(momentum[1]))
if distancia = 0 then
   eficacia = 0
else
   eficacia = distancia / recorrido
endif
stochMeander = 100 * (eficacia - lowest[n] (eficacia)) / (highest[n] (eficacia) - lowest[n] (eficacia))
return stochMeander as "%StochMeander", 20 as "%Bajista", 80 as "%Alcista"
Podría en el StochMeander, llamar al Meander para simplificar el código, pero no lo hago porque ello provocaría un indicador con mayor consumo de CPU (el consumo de CPU de llamadas a funciones personales es muy superior a la de llamadas a funciones de ProRealTime).



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Indicadores”