Respuesta

Ninjatrader Orden Stop Redondeo Problem

8 respuestas

xlhuang1995

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 8 años #114993

Estaba corriendo SQ y encontré algunos buenos candidatos para EURUSD. Así que exporté esas estrategias a ninjatrader, pero cuando les backtested en ninjatrader, que no hizo ningún comercio con sólo unas pocas órdenes de stop cancelado en 1.0000 para la entrada (ver captura de pantalla adjunta). Esas estrategias fueron todos utilizando orden de entrada de parada. 

 

En el código encontré que SQ estaba usando price = roundprice() para el precio de entrada. Así que añadí Print(price) en la línea siguiente e imprimió líneas de 1 cuando corrí el backtest de nuevo.

 

Entonces eliminé roundprice() y dejé el precio sin redondear. Sorprendentemente, los precios se redondearon correctamente según mi ticksize (incluso sin roundprice()).

 

Luego calculé roundprice() usando mi cerebro, según SQMangedStrategy, que también pasó por round() y _round (), y obtuve el precio correcto. Sin embargo, la estrategia me siguió dando 1.00000 cuando corrí backtest.

 

Esto no tiene ningún sentido. No puedo entender por qué me sigue dando 1.00000 cuando el precio correcto debería ser algo así como 1.42365.

 

BTW, mi ticksize era 0.00005. Yo estaba corriendo en Interactive Brokers.

 

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 8 años #136454

Intenté duplicar tu problema usando datos de futuros 6E (tamaño de tick 0.00005) y estrategia generada aleatoriamente usando solo orden Limit y los problemas también me ocurren a mi. No hay operaciones ejecutadas sólo órdenes con precio límite de 1,0000. Mark mirará que se puede hacer.

0

xlhuang1995

Abonado, bbp_participant, comunidad, 11 respuestas.

Visitar el perfil

hace 8 años #136613

Si, creo que he llegado al punto. Es un error en el SQManagedStrategy, una estrategia importada a NT por SQ.

 

Cuando NT está calculando cuántos decimales hay en el tamaño del tick, está DISEÑADO para dividir el tamaño del tick en el punto decimal. De mi ejemplo, 0.00005 se convierte en 0 y 00005. A continuación, toma el último y cuenta cuántos dígitos hay.

 

Sin embargo, el tamaño del tick que NT obtiene, y luego divide, está en NOTACIÓN CIENTÍFICA. Así que realmente no puede dividirlo en el punto decimal porque no hay punto decimal en 5E10-5. Y esto causa el problema. Y esto causa el problema.

 

He jugado con el código en SQManagedStrategy, y arreglado este problema por mi mismo. Fue una solución fácil, pero no puedo entender cómo los ingenieros de SQ pueden cometer un error tan estúpido. ¿Y cómo puede la gente usar SQ para generar estrategias forex con tamaño de tick pequeño para ser usadas en NT? ¿O en realidad no hay nadie usando SQ con NT?

0

mabi

Cliente, bbp_participant, comunidad, 261 respuestas.

Visitar el perfil

hace 8 años #136706

"¡StrategyQuant ahora es totalmente compatible con la plataforma de comercio NinjaTraderââ'¢!" ??

0

kazex

Cliente, bbp_participant, comunidad, 6 respuestas.

Visitar el perfil

hace 7 años #143048

Tengo exactamente el mismo problema, ¿cuál es la modificación necesaria en SQManagedStrategy para solucionarlo?

 

Gracias.

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 7 años #143051

Hola,

 

esto podría ayudar a resolver el problema

 

En NT abra Herramientas -> Editar NinjaScript -> Editar Estrategia, busque SQManagedStrategy y encuentre el método Initialize().
Hay una línea:

string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0');           

sustitúyalo por línea:

string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0');

y debería empezar a funcionar correctamente.

0

mabi

Cliente, bbp_participant, comunidad, 261 respuestas.

Visitar el perfil

hace 7 años #143078

Gracias Tomas. Lo que no entiendo es por qué la plantilla en la que SQ generar código para no se actualiza con esto.

0

kazex

Cliente, bbp_participant, comunidad, 6 respuestas.

Visitar el perfil

hace 7 años #143087

Hola,

esto podría ayudar a resolver el problema

En NT abra Herramientas -> Editar NinjaScript -> Editar Estrategia, busque SQManagedStrategy y encuentre el método Initialize().
Hay una línea:

string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0');

sustitúyalo por línea:

string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0');

y debería empezar a funcionar correctamente.

Hice el cambio pero el problema sigue, imprimi el precio y los valores parecen tener sentido pero las operaciones entre SQ y NT son diferentes, esto no pasa con ordenes de mercado, solo con ordenes stop (entry order o stop trailing).

Enviado desde mi iPhone utilizando Tapatalk

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 6 años #143275

Envíenme el archivo de estrategia STR a [email protected]. Tengo que comprobar por qué sucede con su estrategia, gracias

0

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)