My stops and targets do not seem to get placed at random times.... they'll get placed for a while... then all of a sudden after an hour or two of live sim test, they don't get placed...
I've used the following OnOrderUpdate() and OnExecution() methods... from looking at the sample OnOrderUpdate() code in the sample code section, things should be ok...
protected override void OnOrderUpdate(IOrder order) { // HANDLE ORDER UPDATES FOR LONG A // Entry if (longentryOrderA != null && longentryOrderA.Token == order.Token) { if (order.OrderState == OrderState.Cancelled) { longentryOrderA = null; } } // Target if (longtargetOrderA != null && longtargetOrderA.Token == order.Token) { if (order.OrderState == OrderState.Filled || order.OrderState == OrderState.PartFilled) { longtargetOrderA = null; longentryOrderA = null; longstopOrderA = null; } } // Stop if (longstopOrderA != null && longstopOrderA.Token == order.Token) { if (order.OrderState == OrderState.Filled || order.OrderState == OrderState.PartFilled) { longstopOrderA = null; longentryOrderA = null; longtargetOrderA = null; } } // HANDLE ORDER UPDATES FOR SHORT A // Entry if (shortentryOrderA != null && shortentryOrderA.Token == order.Token) { if (order.OrderState == OrderState.Cancelled) { shortentryOrderA = null; } } // Target if (shorttargetOrderA != null && shorttargetOrderA.Token == order.Token) { if (order.OrderState == OrderState.Filled || order.OrderState == OrderState.PartFilled) { shorttargetOrderA = null; shortentryOrderA = null; shortstopOrderA = null; } } // Stop if (shortstopOrderA != null && shortstopOrderA.Token == order.Token) { if (order.OrderState == OrderState.Filled || order.OrderState == OrderState.PartFilled) { shortstopOrderA = null; shortentryOrderA = null; shorttargetOrderA = null; } } } /// <summary> /// Called on each incoming execution /// </summary> protected override void OnExecution(IExecution execution) { // LONG ORDER A STOP AND TARGET if (longentryOrderA != null && longentryOrderA.Token == execution.Order.Token) { if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled || (execution.Order.OrderState == OrderState.Cancelled && execution.Order.Filled > 0)) { longstopOrderA = ExitLongStop(0, true, execution.Order.Filled, execution.Order.AvgFillPrice - 4 * TickSize, "LongStopA", "LongA"); longtargetOrderA = ExitLongLimit(0, true, execution.Order.Filled, execution.Order.AvgFillPrice + 6 * TickSize, "LongTargetA", "LongA"); } } // SHORT ORDER A STOP AND TARGET if (shortentryOrderA != null && shortentryOrderA.Token == execution.Order.Token) { if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled || (execution.Order.OrderState == OrderState.Cancelled && execution.Order.Filled > 0)) { shortstopOrderA = ExitShortStop(0, true, execution.Order.Filled, execution.Order.AvgFillPrice + 4 * TickSize, "ShortStopA", "ShortA"); shorttargetOrderA = ExitShortLimit(0, true, execution.Order.Filled, execution.Order.AvgFillPrice - 6 * TickSize, "ShortTargetA", "ShortA"); } } }
Comment