Indicador CPADX

Responder
Alpema
Mensajes: 6
Registrado: 04 Ene 2021 12:42

Indicador CPADX

Mensaje por Alpema »

Hola amigos

estuve registrado en el foro con otro nick hace muchos años. Ahora no he podido usar el mismo nombre (que parece desactivado), así que he creado un nuevo perfil.

Anteriormente usaba Visualchart para programar sistemas e indicadores. Sistemas que puse en real con moderado éxito. Ahora he dado el salto a Ninjatrader y después de unas semanas de adaptación (y hacerme con los conceptos básicos de C#) puedo decir que estoy encantado. Comparado con VC, NT8 es mucho más rápido cuando se trata de programar sistemas y hacer backtests. Y más estable sin duda.

Mi duda: estoy tratando de convertir de NT7 a NT8 el indicador CPADX tal cual publica Andrés García en Tradingsys (página que es casi una biblia para mí) pero una vez inserto el indicador, se queda en modo suspensión (colgado) y no muestra nada en el gráfico. Este es el código con mi intento de conversión a NT8:

protected override void OnBarUpdate()

{
double step = FinalPeriod/20;
for (int x = 10; x < FinalPeriod+1; x+=step)

if (Slope(ADX(x),Filter,0)<0)
{
Ma = Ma+1;

}

nA = nA+1;


Value[0] = (((double)Ma/nA)*100);

}


Si comento // el bucle for... el bug desaparece pero evidentemente no hay indicador. Así que pienso que el error puede estar en el bucle (pero ni idea de cómo solucionarlo).

¿Alguna idea de dónde puede venir el error?

Tenéis el código original así como el artículo del indicador aquí:

http://www.tradingsys.org/indicadores-consensuales

saludos!
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Indicador CPADX

Mensaje por cls »

Has declarado la variable step de tipo double. Prueba con int.

Código: Seleccionar todo

int step = FinalPeriod/20;
S2
Alpema
Mensajes: 6
Registrado: 04 Ene 2021 12:42

Re: Indicador CPADX

Mensaje por Alpema »

Hola CLS

muchas gracias por tu respuesta,

he declarado ahora la variable como int y va bien. Pero dado que la variable toma el valor de FinalPeriod/20, no debería ser de tipo double (para que pueda contener los decimales cuando sea el caso)? es una duda que tengo..

Después de compilar ahora dibuja el Plot pero el resultado está lejos de lo que espero (entre otras cosas los valores no están acotados entre 0 y 100 como debería para que fuera útil).
NQadx.PNG


¿Serías tan amable de darle un vistazo? Adjunto el archivo .zip (es la 1a vez que exporto un Script, espero haberlo hecho de la manera correcta).

Un saludo,
Adjuntos
miCPADX.zip
(3.68 KiB) Descargado 84 veces
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Indicador CPADX

Mensaje por cls »

Hola Alpema, como bien dices el cociente perderá todos los decimales al asignarlo a una variable de tipo int. Pero es que usar un double es un error. No puedes incrementar el contador del for que es de tipo int con un double.

El error de ahora es con las llaves. Te faltan las del bucle for. Y por otro lado el resto son innecesarias - aunque no erróneas - ya que sólo engloban a una única línea. Haz un copy+paste de este código para sustituir al OnBarUpdate y tendría que funcionarte.

Código: Seleccionar todo

protected override void OnBarUpdate()
{
	int step = FinalPeriod/20;
	for (int x = 10; x < FinalPeriod+1; x+=step)    
	{
		if (Slope(ADX(x),Filter,0)<0)
			Ma = Ma+1;
		
		nA = nA+1;                        

		Value[0] = ( 100.0 * Ma/nA );
		
		if (Value[0]<80)
			BackBrush=Brushes.Salmon;
		else
			BackBrush=Brushes.Aquamarine;
	}
}

Y hay otro error conceptual más. Si FinalPeriod es menor que 20, la variable 'step' valdrá 0, con lo que el contador del bucle nunca se incrementará, la condición nunca se cumplirá, y el bucle no tendrá fin.

S2
Alpema
Mensajes: 6
Registrado: 04 Ene 2021 12:42

Re: Indicador CPADX

Mensaje por Alpema »

Hola Cls,

gracias de nuevo por tu mensaje.

He modificado el código según indicas. El indicador se muestra como en la imagen, así que algo debe fallar aún. No alcanzo a entender por qué. Si puedes revisarlo, genial. Si no, te estoy igualmente muy agradecido por la ayuda prestada y tu tiempo.
error4.PNG
Tratando de solcuionarlo he añadido paréntesis así (Ma/nA):

Código: Seleccionar todo

Value[0] = ( 100.0 * (Ma/nA));
la escala del indicador muestra rango de 0 a 100 (bien) pero el valor del Plot = 0.
error5.PNG
Y hay otro error conceptual más. Si FinalPeriod es menor que 20, la variable 'step' valdrá 0, con lo que el contador del bucle nunca se incrementará, la condición nunca se cumplirá, y el bucle no tendrá fin.
Sí, cierto! lo que pasa es que es tal cual el código original de Andrés (tradingsys), así que preferí dejarlo asumiendo que nunca usará valores inferiores a 20.

Un saludo!

Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Indicador CPADX

Mensaje por cls »

Prueba con este código. Ya tendría que ir bien.
S2
Adjuntos
Zi8CPADX.zip
(3.68 KiB) Descargado 97 veces
Alpema
Mensajes: 6
Registrado: 04 Ene 2021 12:42

Re: Indicador CPADX

Mensaje por Alpema »

Hola Cls,

wow, qué crack eres! muchas gracias, ahora parece funcionar!

Revisaré el método try-catch y ver si puedo aprender de ello.

Para probar la eficacia del filtro lo he incluido en dos de mis sistemas que tengo en desarrollo: uno está basado en rotura de canales y el otro en cruce de medias. Ambos dejan posiciones abiertas a fin de día. Los resultados no incluyen comisiones ni deslizamientos. Histórico de 10 años en el futuro Ibex35. He dejado los mismos parámetros 'base' que tengo en los sistemas, he aplicado el filtro y he hecho una optimización muy gruesa, es decir, saltos de 5 y 10 en los parámetros FinalPeriod y Filter.

Este es el resultado:
sistema basado en rotura de canales
rotura_canales.PNG
sistema basado en cruce de medias
cruce_medias.PNG
Es cierto que, como pasa con la mayoría de filtros, el beneficio total se reduce pero mejoran algunos ratios. En este caso la mejora no es muy evidente. El DD apenas se reduce unos pocos euros. El profit factor sí que mejora algo. Lo positivo es que se incrementa el beneficio medio por operación.

Seguiré investigando,

gracias de nuevo Cls

saludos!
Última edición por Alpema el 21 Ene 2021 14:48, editado 1 vez en total.
Alpema
Mensajes: 6
Registrado: 04 Ene 2021 12:42

Re: Indicador CPADX

Mensaje por Alpema »

Hola Cls,

wow, qué crack eres! muchas gracias, ahora parece funcionar!

Revisaré el método try-catch y ver si puedo aprender de ello.

Para probar la eficacia del filtro lo he incluido en dos de mis sistemas que tengo en desarrollo: uno está basado en rotura de canales y el otro en cruce de medias. Ambos dejan posiciones abiertas a fin de día. Los resultados no incluyen comisiones ni deslizamientos. Histórico de 10 años en el futuro Ibex35. He dejado los mismos parámetros 'base' que tengo en los sistemas, he aplicado el filtro y he hecho una optimización gruesa, es decir, saltos de 5 y 10 en los parámetros FinalPeriod y Filter.

Este es el resultado:

sistema basado en rotura de canales (sin filtro / con filtro):

Total net profit 135.000 € 114.750 €
profit factor 1,63 1,75
max DD -13.890 € -13.930 €
nº trades 565 418
% profitable 43,72% 44,26%
avg trade 238,99 € 274,52 €

sistema basado en cruce de medias (sin filtro / con filtro):

Total net profit 134.730 € 110.570 €
profit factor 1,52 1,63
max DD -12.200 € -11.660 €
nº trades 898 602
% profitable 40,98% 40,86%
avg trade 150,03 € 183,67 €


Es cierto que, como pasa con la mayoría de filtros, el beneficio total se reduce pero mejoran otros ratios. En este caso la mejora no es muy evidente: El DD apenas se reduce unos pocos euros. El profit factor sí que mejora algo. Lo positivo es que se incrementa el beneficio medio por operación.

Seguiré investigando,

gracias de nuevo Cls

saludos!
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Indicadores”