Hola, cuestion sobre Estocástico en Ninja Trader

Foro dedicado a esta excelente herramienta de desarrollo e implementación de sistemas de trading
Responder
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Hola, cuestion sobre Estocástico en Ninja Trader

Mensaje por arras2 »

Hola buenas tardes.

Estoy intentado pasar los indicadores Atlas y Koncorde a Ninja trader y no tengo mucha idea de C. Previamente he tenido que descargarme hacer algún indicador más que se utilizan en éstos.

El indicador Atlas parece que por fin lo conseguí. El problema lo tengo en el Koncorde. Lo que hago es coger el código de Prorealtime y convertirlo a Ninja Trader.

Lo primero decir que agradezco a Blai5 su excelente trabajo y que si lee esto y algo le molesta que me lo haga saber ya que el código y el mérito es suyo. Si hago algo mal no es a mala fe.

El problema que tengo es que se tiene que calcular un estocástico del TotalPrice (que consiste en la suma del máximo,mínimo, apertura y cierre de la vela actual dividido entre 4). El código que aparece en el prorealtime es el siguiente:

STOC = Stochastic[21,3](TotalPrice)

Yo lo que realizo es lo siguiente. En Ninja Trader, para cada vela calculo el TotalPrice y lo almaceno en un DataSeries (ya que no he encontrado nada que me devuelva dicho valor. Si hay algo que devuelva ese valor directamente sin tenerlo que almacenarlo agracedería saberlo :) ). El DataSeries lo llamo SerieTotalPrice. A partir de la vela 21 del gráfico (mediante un IF) calculo el estocástico de SerieTotalPrice (ya que es cuando ya tenemos 21 observaciones y ya se puede calcular) mediante la siguiente línea de código:

if (contador > 20)
{
double STOC = (Stochastics(SerieTotalPrice,1,21,3).K[0]);
}

El problema es que no me coincide el resultado obtenido entre Prorealtime y Ninja trader. Lo obtenido se parece en el gráfico pero en valores no. El de Ninja Trader es como más extenso. Llega a 0 y a 100 cuando en Prorealtime no pasa.

Comento las pruebas que he hecho. Si dibujo o saco por pantalla el SerieTotalPrice coincide con lo que obtengo en el Prorealtime por TotalPrice (salvando decimales que se producen por diferencias en los datos de ProRealtime y los de Ninja Trader que provienen de VC).

Si en Prorealtime hago:

STOC = Stochastic[21,3](Price)

y en Ninja Trader:

double STOC = (Stochastics(1,21,3).K[0]);

coincide (pequeñas diferencias por valores diferentes en los precios)!!! Es decir, el estadístico hace lo mismo en Prorealtime y en Ninja Trader, y los valores para los que calculo el estocástico (el totalprice del Proreal y el SerieTotalPrice del Ninja Trader) también. Que demonios está pasando?

Una vez tenga esto podré empezar a programar para testear lo que tengo planeado sobre papel como sistema.

Muchas gracias, siento el ladrillo.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

Hay varias fórmulas para el stochastic. Prueba el StochasticFast del ninja, creo que es el que coincide con el stochastic de proreal.

s2

PD: para calcular la serie de TotalPrice es correcto lo que has hecho de usar una DataSerie.

Mejor que poner (contador < 20) prueba (CurrentBar < MayorPeriodoInput ) donde MayorPeriodoInput es el mayor de los períodos introducidos por el usuario. Así tienes una condición global que te servirá para cualquier combinación de indicadores y períodos.
P.ej. para 4 periodos el MayorPeriodoInput lo puedes averiguar como Math.Max( periodo1, Math.Max( periodo2, Math.Max(periodo3, periodo4) ) );
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Mensaje por arras2 »

Hola.

Lo primero dar gracias por la rápida respuesta. He probado y el StochasticsFast curiosamente me da el mismo resultado que el normal, es decir, diferente. La verdad es que llevo atascado aquí una semana y no se que puede ser. Mañana seguiré mirando a ver que veo.

Respecto a lo de los periodos tienes razón. De momento lo he hecho así con IF's y un contador para saber cuando puedo calcular un estadístico. Más adelante cuando tenga un poco más de dominio intentaré mejorarlo (iré corrigiendo chapucillas de este tipo. Ahora tengo un

IF contador > 20
calcula el estocástico

y dentro de este IF otro IF contador >139
calcula otro estadístico de 120 periodos

Como los parámetros siempre son los mismos no hay problema

De nuevo agradecerte la molestia. Un saludo.
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Mensaje por cls »

Has comprobado el orden de los parámetros?. En Ninja primero va la D y luego la K: StochasticFast(serie, D, K).
En Proreal es al revés.

S2
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Mensaje por arras2 »

Si, he probado a alterar el orden de los parámetros por si acaso y por ahi no viene el problema o eso creo.

Lo curioso es que si hago un estocástico del precio al cierre salen prácticamente iguales, pero si lo hago del totalprice me salen diferentes. Esto quiere decir que la fórmula del estocástico funciona y también he comprobado que el totalprice es el mismo en los dos programas. Es un expdiente X que no logro resolver.

A ver... he estado mirando el TotalPrice y veo que hay pequeñas diferencias debido a que los datos del ninja provienen del VC y algunas velas son diferentes a las de PRT (Increible?). Pero son pequeñas diferencias del tipo 8940 y en el otro 8943 en alguna vela en concreto... No se si eso puede darme unos resultados tan diferentes en el gráfico.

Pongo un par de capturas.

La de estocásticos precio cierre corresponde a:

para PRT

STOC = Stochastic[21,3]

y para NT

double STOC = (StochasticsFast(3,21)[0]);

Son iguales!

La de estocásticos precio total corresponde a:

para PRT

STOC = Stochastic[21,3](TotalPrice)

y para NT

double STOC = (StochasticsFast(SerieTotalPrice,3,21)[0]);

Aquí se descuadran mucho, la forma se parece pero dan valores muy diferentes. La única diferencia que encuentro es que algunos precios totales no coincidenpor algún punto, pero esos pocos puntos pueden descuadraar tanto el gráfico? Seguiré investigando a ver si fuera capaz de exportar datos del PRT para comprobarlo.

Siento el ladrillo.
Adjuntos
Estocásticos precio cierre
Estocásticos precio cierre
Estocásticos precio total
Estocásticos precio total

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

Mensaje por cls »

Cómo calculas la serie de TotalPrice en el ninja ?
Debería parecerse a esto:

Código: Seleccionar todo

// en la región Variables:
private DataSeries dsTotalPrice;

// en el Initialization:
dsTotalPrice = new DataSeries(this);

// en el OnBarUpdate:
dsTotalPrice.Set( (Open[0] + High[0] + Low[0] + Close[0] ) / 4 )

// y luego el stochastic

S2
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Mensaje por arras2 »

Efectivamente, así calculo el precio total. Exactamente así:

en la parte de variables:

private DataSeries SerieTotalPrice; //Almacenará los precios totales (En PRT consiste en la media entre la apertura, el máximo, el mínimo y el cierre de una vela).

en el intialization:

SerieTotalPrice = new DataSeries(this); //Inicializamos el DataSeries.

y en el código:

SerieTotalPrice.Set(0,((Open[0]+Close[0]+High[0]+Low[0])/4));

De hecho la gráfica del totalprice conincide prácticamente con la de PRT.

y la línea de código del estocástico tengo:

double STOC = (StochasticsFast(SerieTotalPrice,3,21)[0]);

He comparado el resto de variables del código del Koncorde y más o menos me coinciden. Algunas presentan algunas diferencias. No obstante el resultado total del indicador es totalmente diferente al de prorealtime. De momento lo dejo aparcado porqué no se que pasa. Voy a empezar a programar sistemas sencillos para ver si se me ilumina la bombilla en otro momento. Una lástima ya que me gustaría disponer del vigía, atlas y koncorde en ninjatrader.

Si alguien se anima a investigar cual es el problema no tengo ningún problema en pegar aquí el código que ya tengo hecho (junto con los indicadores que he tenido que construir).

Voy a revisar un post que habla sobre combinar cruces de indicadores en diferentes espacios temporales que corre por aquí..

PD: cls, gracias por la ayuda, como se nota que dominas bien el tema.
Avatar de Usuario
Fer137
Mensajes: 1371
Registrado: 12 Nov 2007 18:43

Mensaje por Fer137 »

El estocastico se basa en el maximo y minimo de las ultimas n barras. Lo que hará seguramente ese estocastico del ninja al aplicarlo a una serie es coger el maximo y minimo de esa serie de totalprices, no los maximos y minimos de las barras.

Una solucion es que lo programes tu mismo con la formula: 100*(totalprice-Min)/(Max-Min)
Avatar de Usuario
Fer137
Mensajes: 1371
Registrado: 12 Nov 2007 18:43

Mensaje por Fer137 »

Y eso explica porque llega a los extremos 0-100.
En el proreal no alcanza extremos porque el totalprice nunca coincide con el maximo o minimo, en cambio al hacer el estocastico de la serie coge los maximos y minimos de entre los totalprices.

Hay indicadores que se pueden aplicar a un array o serie porque solo contemplan el close (o el totalprice o lo que sea), pero otros indicadores, como este caso del estocastico, hacen uso de otros datos como maximos y minimos, y al aplicarlos a una serie 'unidimensional' no se tiene eso en cuenta y se modifica el resultado.
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Mensaje por arras2 »

A ver... nada, pensaba q lo había conesguido y no es así. Por eso borré el mensaje rápidamente, pero ya habías contestado.

He descubierto que un Stochastics[21,3](Close) del PRT es lo mismo qe un StochasticsFast(1,21), almacenar dichos valores en un dataseries y calcular una SMA(3) de dicha serie. Lo curioso es que si aplico lo mismo para el TotalPrice no sale lo mismo y los valores en PRT y en NT del totalprice de los que dispongo son prácticamente idénticos.

Puede ser que la cosa vaya por donde comentas Fer137 pero es que he probado de aplicar directamente la fórmula y tampoco. No se que hace exactamente el PRT. Seguiré investigando a ver.
Avatar de Usuario
Fer137
Mensajes: 1371
Registrado: 12 Nov 2007 18:43

Mensaje por Fer137 »

El 'Max' es el máximo de los máximos de las anteriores 21 barras al punto que esta calculando, y el 'Min' analogamente.
Estocastico=100*(totalprice-Min)/(Max-Min)

Otra solucion es que lo hagas simplemente con el close, en vez de complicarte con series de totalprice, los resultados seran muy similares.
Lo que no funciona es aplicar ese indicador a una serie unidimensional.
arras2
Mensajes: 11
Registrado: 17 May 2009 15:51

Mensaje por arras2 »

Correcto! Efectivamente tienes razón. Ya lo he solucionado. Es el máximo de los máximos y el mínimo de los mínimos. Con el close se vuelve más extremo el indicador.

Stochastics[21,3](Close) del PRT es

SerieEstocastico.Set(0, (100*((SerieTotalPrice[0]-MIN(Low,21)[0])/(MAX(High,21)[0]-MIN(Low,21)[0]))));
double STOC = (SMA(SerieEstocastico,3)[0]);

del NT

Muchas gracias, problema solucionado.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Ninja Trader”