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