Actualmente estoy desarrollando un comercial de trading automatizado programa en el que los usuarios pueden escribir su propio código y desarrollar estrategias, como en ninja trader MetaTrader etc. Ahora mismo estoy trabajando en el manejo del orden de una parte, que es realmente importante. No puedo averiguar cómo hacer referencia a los pedidos ingresados durante la ejecución de una estrategia.
Supongamos que en una estrategia, no es este trozo de código:
if(some_condition)
EnterLong("IBM",100)
Mi problema es some_condition
se puede establecer en true varias veces, lo que resulta en la generación de varias órdenes de compra. De alguna manera tengo que proporcionar a los usuarios la capacidad de modificar o cancelar algunas de estas órdenes.
NinjaTrader, por ejemplo, tiene una característica llamada EntriesPerDirection
, lo que limita el número de entrada para una dirección (largo o corto). Así que usted puede tener un número determinado de objetos de pedido (o una matriz de órdenes) que son devueltos por orden de entrada de las funciones y di order1.Cancel();
sin Embargo, esto no tiene ningún sentido para un iceberging estrategia en la que miles de pedidos podría ser generada. Ambos programas permiten al usuario recorrer los pedidos que no hayan conducido a una transacción todavía. De nuevo, esto podría ser doloroso para iceberging fines. Yo creo que esos dos programas no son construidas específicamente para el manejo de grandes números de pedidos o para el desarrollo de algoritmos de ejecución (por ejemplo, VWAP, la Llegada de Precios, Ejecución Déficit) que son ampliamente utilizados entre las empresas de compra.
También NT y MT tienen eventos (OnOrderUpdate
, OnExecution
, OnTrade
) que se desencadena cuando el estado de un pedido es cambiado. Esta es una buena idea, pero no estoy seguro de que es la mejor solución.
Hay enfoques o metodologías de abordar mi problema que son comúnmente utilizados por otro software de comercio automatizado?