I have tried to use getrealtimeorders method to update the historical to live order when i start my strategy, but i’m still getting the error. am i doing something wrong here?
protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice,
int quantity, int filled, double averageFillPrice,
OrderState orderState, DateTime time, ErrorCode error,
string comment)
{
// Update historical order references to live ones
if (State == State.Realtime)
{
if (longEntryOrder != null && longEntryOrder.IsBacktestOrder)
longEntryOrder = GetRealtimeOrder(longEntryOrder);
if (shortEntryOrder != null && shortEntryOrder.IsBacktestOrder)
shortEntryOrder = GetRealtimeOrder(shortEntryOrder);
if (pivotEntryOrder != null && pivotEntryOrder.IsBacktestOrder)
pivotEntryOrder = GetRealtimeOrder(pivotEntryOrder);
}
// Assign entry orders by name
if (order.Name == "Dynamic Long")
longEntryOrder = order;
else if (order.Name == "Dynamic Short")
shortEntryOrder = order;
else if (order.Name == "Pivot Long" || order.Name == "Pivot Short")
pivotEntryOrder = order;
// Handle entry orders
if (order.Name == "Dynamic Long" || order.Name == "Dynamic Short" ||
order.Name == "Pivot Long" || order.Name == "Pivot Short")
{
if (order.OrderState == OrderState.Filled)
{
// Cancel opposite order when one is filled
if (order == longEntryOrder && shortEntryOrder != null)
CancelOrder(shortEntryOrder);
else if (order == shortEntryOrder && longEntryOrder != null)
CancelOrder(longEntryOrder);
else if (order == pivotEntryOrder && (longEntryOrder != null || shortEntryOrder != null))
{
CancelOrder(longEntryOrder);
CancelOrder(shortEntryOrder);
}
// Set exit orders
if (order.Name.Contains("Long"))
{
exitOrder = ExitLongLimit(0, true, order.Quantity, averageFillPrice + takeProfit, "Take Profit", "Dynamic Long");
stopOrder = ExitLongStopMarket(0, true, order.Quantity, averageFillPrice - stopLoss, "Stop Loss", "Dynamic Long");
}
else if (order.Name.Contains("Short"))
{
exitOrder = ExitShortLimit(0, true, order.Quantity, averageFillPrice - takeProfit, "Take Profit", "Dynamic Short");
stopOrder = ExitShortStopMarket(0, true, order.Quantity, averageFillPrice + stopLoss, "Stop Loss", "Dynamic Short");
}
}
else if (order.OrderState == OrderState.Cancelled)
{
if (order == longEntryOrder)
longEntryOrder = null;
else if (order == shortEntryOrder)
shortEntryOrder = null;
else if (order == pivotEntryOrder)
pivotEntryOrder = null;
}
}
// Handle exit orders
if (order.Name == "Take Profit" || order.Name == "Stop Loss")
{
if (order.OrderState == OrderState.Filled)
{
pivotTradeActive = false;
pivotTradeLevel = 0;
if (order.Name == "Stop Loss")
{
consecutiveLosses++;
if (consecutiveLosses >= 2)
{
tradingPaused = true;
lastTradeHour = Times[0][0];
}
}
else
{
consecutiveLosses = 0;
}
longEntryOrder = null;
shortEntryOrder = null;
}
}
}