Salidas estrategia NT
Salidas estrategia NT
Hola.
Estoy haciendo correr una estrategia en NT. Tiene dos entradas largas (1 y 2) con su signal name cada una. Cada una tiene su SetProfit y su SetStop con sus correspondientes fromEntrySignal.
A pesar de ello, de continuo se producen entradas tipo1, p.e. y cierres de la operación con un Set tipo 2.
Además de que cada entrada+Setprofit+SetStop está con sus { }
¿Os ha pasado?¿Sabeis solucionarlo?
Gracias por adelantado
Estoy haciendo correr una estrategia en NT. Tiene dos entradas largas (1 y 2) con su signal name cada una. Cada una tiene su SetProfit y su SetStop con sus correspondientes fromEntrySignal.
A pesar de ello, de continuo se producen entradas tipo1, p.e. y cierres de la operación con un Set tipo 2.
Además de que cada entrada+Setprofit+SetStop está con sus { }
¿Os ha pasado?¿Sabeis solucionarlo?
Gracias por adelantado
Re: Salidas estrategia NT
Hola,
en algún sitio tiene que haber un error. Prueba a volcar la info del OnExecution y del OnOrderUpdate con Prints para ver qué ordenes se ejecutan, y cómo van cambiando su status. Y pon el TraceOrder = true.
Busca cancelaciones de órdenes. Y ahí puede estar la causa.
Saludos
en algún sitio tiene que haber un error. Prueba a volcar la info del OnExecution y del OnOrderUpdate con Prints para ver qué ordenes se ejecutan, y cómo van cambiando su status. Y pon el TraceOrder = true.
Busca cancelaciones de órdenes. Y ahí puede estar la causa.
Saludos
Re: Salidas estrategia NT
Gracias por tu respuesta. No tengo incluídos estos 2 métodos en las estrategias. Después de Initialize, todo está puesto en OnBarUpdate. Veo que no lo puedo explicar sin tenerme que extender. Espero no pasarme:
Además de 2 entradas largas (1 y 2), hay 2 entradas cortas (3 y 4). Así, p.e., a1es3 es estrategia a1 entrada short nº3.
{
if...
{
Print("a1es3");
this.EnterShortLimit(Close[0],"a1es3");
entry = Close[0];
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetProfitTarget(CalculationMode.Ticks, profittargetticks); //definidos en variables e Initialize
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if ( Close[0]>=this.ParabolicSAR
{
Print("a1sp3");
SetProfitTarget("a1es3",CalculationMode.Price,Close[0]); }
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetStopLoss(CalculationMode.Ticks, stoplossticks);
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if (Close[0]>= (entry+9*TickSize))
{
Print("a1ss3");
SetStopLoss("a1es3",CalculationMode.Price,Close[0],false); }
}
}
Y lo mismo para la operativa de la entrada 4. ¿Es posible que al detectar MarketPosition.Short envíe SetStop independientemente de si es entrada 3 ó 4 (los tenía en true y con false se repite el problema).
En output:
a1sp3
11/08/2014 14:19:32 Entered internal SetStopTarget() method: Type=Target FromEntrySignal='a1es3' Mode=Price Value=1,3393 Currency=0 Simulated=False
11/08/2014 14:19:32 Ignored internal SetStopTarget() method: Type=Target FromEntrySignal='a1es3' Mode=Price Value=1,3393 Currency=0 Simulated=False' Reason='Another SetStopTarget() method call has already submitted a stop/target order'
a1ss4
11/08/2014 14:19:32 Entered internal SetStopTarget() method: Type=Stop FromEntrySignal='a1es4' Mode=Price Value=1,3393 Currency=0 Simulated=False
La salida correcta hubiese sido a 14.19.32. Se salió en la siguiente barra a 14.28.12 (aunque esta barra cerró a 14.29.27 y está todo CalculateOnBarClose = true;)
Gracias de nuevo por tu atención y paciencia.
Además de 2 entradas largas (1 y 2), hay 2 entradas cortas (3 y 4). Así, p.e., a1es3 es estrategia a1 entrada short nº3.
{
if...
{
Print("a1es3");
this.EnterShortLimit(Close[0],"a1es3");
entry = Close[0];
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetProfitTarget(CalculationMode.Ticks, profittargetticks); //definidos en variables e Initialize
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if ( Close[0]>=this.ParabolicSAR
{
Print("a1sp3");
SetProfitTarget("a1es3",CalculationMode.Price,Close[0]); }
}
if (Position.MarketPosition == MarketPosition.Flat)
{
SetStopLoss(CalculationMode.Ticks, stoplossticks);
}
else if (Position.MarketPosition == MarketPosition.Short)
{
if (Close[0]>= (entry+9*TickSize))
{
Print("a1ss3");
SetStopLoss("a1es3",CalculationMode.Price,Close[0],false); }
}
}
Y lo mismo para la operativa de la entrada 4. ¿Es posible que al detectar MarketPosition.Short envíe SetStop independientemente de si es entrada 3 ó 4 (los tenía en true y con false se repite el problema).
En output:
a1sp3
11/08/2014 14:19:32 Entered internal SetStopTarget() method: Type=Target FromEntrySignal='a1es3' Mode=Price Value=1,3393 Currency=0 Simulated=False
11/08/2014 14:19:32 Ignored internal SetStopTarget() method: Type=Target FromEntrySignal='a1es3' Mode=Price Value=1,3393 Currency=0 Simulated=False' Reason='Another SetStopTarget() method call has already submitted a stop/target order'
a1ss4
11/08/2014 14:19:32 Entered internal SetStopTarget() method: Type=Stop FromEntrySignal='a1es4' Mode=Price Value=1,3393 Currency=0 Simulated=False
La salida correcta hubiese sido a 14.19.32. Se salió en la siguiente barra a 14.28.12 (aunque esta barra cerró a 14.29.27 y está todo CalculateOnBarClose = true;)
Gracias de nuevo por tu atención y paciencia.
Re: Salidas estrategia NT
Al final del todo no se ha escrito un tercer } que cerraría toda la entrada 3.
Re: Salidas estrategia NT
Y en el proceso de envío tbn se ha eliminado otro } para cerrar SetProfit a1sp3 (pero creo que todo ello está bien y compilado. He copiado y pegado, estaba correcto y en el envío se han perdido esos detalles).
Re: Salidas estrategia NT
Hola agtlgtar,
Simplifica la estrategia al máximo. Y poco a poco ve aumentando su complejidad. Primero comienza con solo tipo de orden y comprueba que hace bien sus entradas y salidas. Cuando estés completamente seguro de que tu sistema no tienes errores (me refiero a errores funcionales no de compilación) añades el segundo tipo y así sucesivamente.
Si de entrada empiezas mezclando varios tipos sin estar seguro de cómo funcionan las cosas tendrás un problema serio para depurar y encontrar errores.
Cuando se programan estrategias avanzadas en imprescindible sobrescribir los métodos OnExecution, OnOrderUpdate y OnPositionUpdate, aunque sea para añadir un simple log, con el fin de llevar un seguimiento absoluto de todo lo que ocurre con las órdenes dentro de la estrategia. Si no se hace así, es prácticamente imposible encontrar la causa de los errores funcionales.
Y si controlas un poco de programación .net instala el Visual Studio (la community edition es gratis) y úsalo como debugger. Podrás detener la ejecución del sistema en cualquier barra, analizar los valores de las variables, etc. Y así encontrar la causa de los errores funcionales más fácilmente.
Saludos
Simplifica la estrategia al máximo. Y poco a poco ve aumentando su complejidad. Primero comienza con solo tipo de orden y comprueba que hace bien sus entradas y salidas. Cuando estés completamente seguro de que tu sistema no tienes errores (me refiero a errores funcionales no de compilación) añades el segundo tipo y así sucesivamente.
Si de entrada empiezas mezclando varios tipos sin estar seguro de cómo funcionan las cosas tendrás un problema serio para depurar y encontrar errores.
Cuando se programan estrategias avanzadas en imprescindible sobrescribir los métodos OnExecution, OnOrderUpdate y OnPositionUpdate, aunque sea para añadir un simple log, con el fin de llevar un seguimiento absoluto de todo lo que ocurre con las órdenes dentro de la estrategia. Si no se hace así, es prácticamente imposible encontrar la causa de los errores funcionales.
Y si controlas un poco de programación .net instala el Visual Studio (la community edition es gratis) y úsalo como debugger. Podrás detener la ejecución del sistema en cualquier barra, analizar los valores de las variables, etc. Y así encontrar la causa de los errores funcionales más fácilmente.
Saludos
Re: Salidas estrategia NT
Gracias. Voy a intentarlo, aunque la información al respecto de NT la estoy encontrando muy confusa.
Tbn me encuentro que algún draw no se dibuja en el gráfico.
Tbn me encuentro que algún draw no se dibuja en el gráfico.
Re: Salidas estrategia NT
A lo mejor es por un conflicto de nombres. Cada draw tiene que tener un nombre único. Si dos objetos comparten el mismo nombre, el segundo sobrescribe al primero.agtlgtar escribió:Tbn me encuentro que algún draw no se dibuja en el gráfico.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!