I’ve been working on a high frequency trading system for NinjaTrader on behalf of a long term client. Mi cuenta real es con MB Trading. En lugar de colocar órdenes de mercado y el pago de una comisión, He cambiado los tipos de órdenes de órdenes de límite. Queremos recibir una pequeña comisión para el estrategia de creación de mercado en lugar de pagar una comisión para aceptar los precios que se muestran.
MetaTrader sufre dos grandes desventajas que hacen NinjaTrader una opción superior para el comercio de alta frecuencia. MT4 no ofrece cartas más bajas que el marco de tiempo M1 y la contexto comercial es error ocupado previene varios gráficos se ejecuten de forma simultánea. NinjaTrader es lo suficientemente complejo como para donde puedo controlar la mayoría de los detalles, but simple enough that I don’t need to invest hundreds of hours to test an idea. Después de probar a fondo la estrategia de gráficos M1 como un tomador de precios, Me siento muy confiado en que la estrategia es acertada. El único problema ahora es determinar si o no si tomar un pasivo (es decir, creación de mercado) enfoque resultará en suficientes rellenos para que la estrategia que vale la pena.
The first issue that I came across wasn’t with NinjaTrader; it was with MB Trading’s API. La estrategia funcionó muy bien en la cuenta de simulación, que sólo rutas órdenes a NinjaTrader (Nuevo Testamento). NT entonces hace conjeturas cuando ocurrirían rellenos. El objetivo de esa fase no era probar la estrategia. Yo sólo quería probar la programación para asegurarse de que funcionaba correctamente.
100 oficios se desarrollaron sin contratiempos en la cuenta de Sim. La estrategia sólo lo hizo a través 2-3 oficios microLOT en la cuenta real antes de que las órdenes pendientes colgaban. Pedidos pendientes NinjaTrader pasan a través 3 estados antes de que realmente llegan al mercado. Para los programadores por ahí, estas son las propiedades de los objetos OrderState iOrder.
- A la espera de presentar – la estrategia envió la orden al corredor y está a la espera de oír de nuevo
- Aceptado – el corredor acusa recibo de la orden, pero todavía se realiza el pedido en el mercado
- Trabajo – la orden está disponible para otros al comercio
Las órdenes de estrategia actualizada en cada tick. Lo que a menudo pasaba era que el ritmo iba demasiado rápido, la creación de una importante cartera de comunicaciones durante los mercados rápidos. NinjaTrader nunca lanzó una excepción. La única evidencia de un problema era que yo iba a ver un orden que cuelga con la propiedad PendingChange. La solución fue un inconveniente para salir y NinjaTrader recargar todo.
Me imaginé que tal vez que el estado orden gestionado causó el problema. He cambiado mi enfoque de las órdenes no administrados, pero eso no hizo que la diferencia. Finalmente me di cuenta de que la API MB Trading no puede manejar más de un orden cada pocos segundos.
La estrategia se encontró el punto dulce después de cambiar de garrapata a segunda gráficos. Actualizaciones de 6 o más segundos parecen dar la API MB Trading tiempo suficiente para actualizar wihle conservando algo de un enfoque de alta frecuencia. Cualquier operación que hay que correr más rápido que ese umbral en MB Trading necesitan para utilizar el protocolo FIX.
El otro elemento que me volvía loco es que las órdenes limitadas NinjaTrader borran automáticamente a sí mismos una vez al bar. Casi me rompí mi pelo, and I don’t have all that much hair, durante varias horas tratando de averiguar por qué órdenes borran a sí mismos de forma automática. Muchas personas se identifican con la escuela de la vida acercarse al aprendizaje. I’m as thick headed as most. I figured out the cause when I revisitied NinjaTrader’s online documentation and discovered a limit entry method that allows good till cancelled (GTC) pedidos.
El problema de la velocidad también se manifestó con sobrellenados. Un sobrellenado es cuando una solicitud de estrategia de cancelar un pedido pendiente, pero el corredor llena la orden antes de la cancelación surte efecto. La mayor preocupación es que con sobrellenados NinjaTrader desactiva automáticamente una estrategia y sale de las posiciones en el mercado cuando se produce un llenado. La única manera de prevenir esta programación es cambiar los métodos de introducción de un enfoque no administrado.
La forma más fácil de desarrollar una estrategia de alta frecuencia en NinjaTrader (pero no ultra-alta frecuencia) es utilizar órdenes que gestiona. Siempre que se necesita una salida, colocar la entrada de límite en la dirección opuesta. NinjaTrader se encarga de poner la orden de salida para la positoin mercado abierto. Limite los cambios a cada puñado de segundos. Permite la API corredor para ponerse al día y ayuda a evitar el problema de sobrellenados.
McQuant dice
Hay, Gracias por compartir esta experiencia. Sin embargo, Yo no soy un programador pero un desarrollador ATS y estoy planeando usar código abierto tradelink que también usa c# para enlazar con la API de Oanda. Mi ATS también utilizará el marco de tiempo minucioso sub y se juega rápido ” medio pies”. He encontrado que tu post es muy útil.
Sin embargo, no estoy familiarizado con NT. Podría NT conectarse API Oanda, así?
Gracias
Shaun Overton dice
Hola McQuant,
I’m glad that you found the post informative. NinjaTrader sólo engancha a corredores compatibles. No va a funcionar con Oanda.
McQuant dice
Hay,
Mi plan es usar OpenQuant no NT. Acabo de empezar que se inclina de codificación por lo que estoy usando ricos NT recursos educativos también aprenden programación con C#. Luego migro a OQ. Con OQ , podría tener un conector de agente de aduana. Planeo conectar con LMAX.
Sin embargo, Mi velocidad ATS podría llegar a 10 k pedidos por día ( alrededor de 1 orden por 8 segundo) y sobre todo que es usando las órdenes pendientes ( 95% de los tiempos).
Por favor actualizar tu post con alguna información relevante en cuanto a diseño de un mayor de frecuencia habitual trading automático. Consejos y trucos sería apreciadas altamente.
Gracias,
McQuant
Shaun Overton dice
Hola McQuant,
Gracias por tu post. Mantendremos esta sugerencia en cuenta para futuros blogs.
Timmie dice
Agradezco tu reseña por sobrellena. Es la más sensata he encontrado para el tema en NinjaTrader. Qué tipo de orden de límite es en Ninja (haciendo referencia a tu post):
I figured out the cause when I revisitied NinjaTrader’s online documentation and discovered a limit entry method that allows good till cancelled (GTC) pedidos.
Shaun Overton dice
Hola Timmie,
It’s been several years since I wrote that post, pero no había nada especial sobre los tipos de orden. Eran órdenes de límite genérico.
–Shaun
Carlos dice
Saludos desde España,
Estaría interesado en hablar contigo sobre este tipo de estrategias.
Podemos mandarnos un email por privado?
gracias.