Ninjascript, el C # API utilizada para las estrategias de programación en NinjaTrader, intenta stirke un equilibrio entre hacer el proceso de desarrollo de estrategia lo más sencillo posible preservando la flexibilidad en los tipos de estrategias que soportan. Maneja estos requerimientos competitivos por estrategias de división en dos tipos de métodos de la orden. Muchos programadores de la comunidad NinjaTrader también se refieren a estos tipos como enfoques.
Enfoque Gestionado
La primera y más común método de orden es un enfoque de gestión. El enfoque de gestión es también el supuesto defecto que NinjaTrader asume que está utilizando cuando se escribe una estrategia.
Yo backtest estrategias de esta manera 90%+ del tiempo. Es la forma más fácil de escribir utilizando un enfoque de gestión una vez que todas las variables y las propiedades se configuran. NinjaScript pone a disposición una serie de métodos que todos inter-relacionan. Los nombres y la funcionalidad de cada uno es obvio. Introduzca larga(), por ejemplo, entra en un comercio a larga.
Todos estos métodos han preasignados relaciones entre cada otro. Cuando la estrategia exige ExitLong(), NinjaTrader se encarga de los detalles, como sabiendo que el tiempo que necesita para salir. Eso parece bastante obvio, pero muchas aplicaciones comerciales no se conectan los puntos tan fácilmente entre funciones de negociación. MetaTrader 4 & 5 son buenos ejemplos de este tipo de funcionalidad sencilla no estar disponible.
La facilidad con que se manejan las decisiones comerciales lo hace ideal para el desarrollo de código rápido y sucio para probar ideas simples. La mayoría de mis ideas estrategia seguir el principio KISS; mantenlo simple, estúpido. Por lo general es un proceso de desarrollo muy simple (10-20 acta) programar y probar una idea de comercio desde el momento en que entra en mi mente. La mayoría de las ideas no funcionan, pero por lo menos tengo la satisfacción de saber la respuesta rápida.
Descubrí la manera dura que el enfoque de gestión hace suposiciones acerca de la gestión de pedidos. Introduzca límite larga(), por ejemplo, elimina automáticamente una orden de límite a la espera después de un bar. Recuerdo haber pasado varias horas con una estrategia en vivo tratando de averiguar por qué tantos de mis órdenes entraron correctamente en las cartas de garrapatas, sólo para que ellos desaparecen en el siguiente pulso. Con cuidado, estudiando detenidamente la documentación me llevó a descubrir un método sobrecargado con el parámetro liveUntilCandelled.
Es ejemplos como esta funcionalidad preprogramado que usted necesita a tener en cuenta. Esto es especialmente cierto si usted tiene un error que no tiene sentido en el contexto de su estrategia.
Enfoque no administrado
Un enfoque no administrado quita todos los supuestos que NinjaTrader hace tiempo una estrategia ejecuta en tiempo real. Esta opción deja en manos del codificador para almacenar el estado de la posición en la memoria y tomar las decisiones adecuadas.
Cada estrategia que hemos escrito con las órdenes no administrados utiliza pendiente detener y limitar pedidos. Un ejemplo reciente es el de una estrategia de creación de mercado en Interactive Brokers. La estrategia es 100% en el mercado durante los EE.UU. y las sesiones de Asia. Originalmente empezamos con un enfoque de gestión pero encontramos con problemas con las comisiones y sobrellenados.
La estrategia es sólo comercio 2 mini lotes durante la fase de pruebas, que es el tamaño mínimo de comercio. Aunque la comisión estándar de 0.2 pips por lado es bastante bajo, la comisión mínima es $2.50. Eso es relativamente alto para un pequeño tamaño tal posición. Me di cuenta en el primer día que mi cliente estaba recibiendo comisiones que se cobran por la pierna de entrada y salida de la pierna, respectivamente.
El primer comercio entró con 20k. Cuando llegó el momento de salir, el enfoque de gestión establece un límite de salida para 20k y un límite de entrada independiente para otro 20k. IB cargada comisiones dos veces para ambas órdenes, cuyo costo $5 por el comercio vuelta redonda. El informe de comercio parecía:
20k BOT $2.50
20k SLD $2.50
20k SLD $2.50
BOT 20k $ 2,5 o
20k BOT $2.50
20k SLD $2.50
20k BOT $2.50
20k SLD $2.50
Eso es efectiva 4 oficios a un costo de $20.
La agrupación de las operaciones en una sola orden más o menos cortar las comisiones por la mitad. Me pareció más fácil que ver con un enfoque no administrado porque no me tengo que preocupar de cómo la entrada() y Salir() métodos interactuarían. El Informe sobre el Comercio cambió a:
20k BOT $2.50
40k SLD $2.50
40k BOT $2.50
40k SLD $2.50
20k BOT $2.50
La misma secuencia agrupados cae el coste de la 4 oficios a $12.50. La entrada inicial y el costo de salida final $2.50, pero las operaciones en el medio sólo pagan $2.50 para la entrada y salida combinada. Cuando el tamaño del pedido aumenta a lotes estándar, los ahorros Comisión mejorará dramáticamente el retorno del cliente.
La otra razón por la que nos cambiamos a un enfoque no administrado fue que NinjaTrader mata a una estrategia cada vez que se produce un llenado. Un sobrellenado es cuando una estrategia solicita la cancelación de un pedido pendiente, pero esa orden pendiente se llena antes de que llegue la petición de cancelación. A continuación, sale de la nueva posición en el mercado y se apaga la estrategia.
Encontré este casi intolerable con una estrategia de creación de mercado, ya que un exceso de llenado casi seguro que se produzca al menos una vez al día. Las órdenes no administradas tienen la opción de desactivar un sobrellenado y la manipulacion de cualquier manera el operador considere oportunas. En mi caso, era simplemente aumentar la cantidad de la posición que la estrategia estaba tratando de salir.
La principal desventaja de las órdenes no administrados es que todo se hace un seguimiento interno. Si necesita desactivar una estrategia para cambiar la configuración o perder la conexión broker, el código probablemente no va a interactuar muy bien con las posiciones que ya están abiertas. Cualquier objetos guardias fueron almacenados en la memoria, que es como la estrategia sabe qué posiciones están abiertas, desaparecer cada vez que se retira la estrategia de un gráfico.
Estrategias no administrados también toman mucho más tiempo para probar. La cantidad de código involucrado no difiere drásticamente de pedidos gestionados. Es más grande, pero no tan grotescamente. La razón de que se necesita más tiempo es que la interacción entre los tipos de órdenes no se pule como es en pedidos gestionados. El programador debe escribir todo desde cero, que invariablemente significa que la estrategia va a sufrir de muchos errores más iniciales, especialmente en un entorno real.
Las estrategias que se basan en las órdenes de mercado no tienen que considerar este enfoque en mi opinión. Causa mucho más trabajo y todavía tengo que encontrar una situación donde tiene sentido. Más importante, No puedo pensar en una situación hipotética en la que tendría sentido, ya sea.