Code:
protected override void OnOrderFilled(Order order)
{
if (order == enterOrder)
{
if (Position.Side == PositionSide.Long)
{
// Calculate prices.
double takeProfitPrice = [your price];
double stopLossPrice = [your price];
// Create orders.
takeProfitOrder = SellLimitOrder(Instrument, Qty, takeProfitPrice, "TakeProfit "+ Position.EntryDate);
stopLossOrder = SellStopOrder(Instrument, Qty, stopLossPrice, "StopLoss "+ Position.EntryDate);
// Send orders.
Send(stopLossOrder);
Send(takeProfitOrder);
}
else
{
// Calculate prices.
double takeProfitPrice = [your price];
double stopLossPrice = [your price];
// Create orders.
takeProfitOrder = BuyLimitOrder(Instrument, Qty, takeProfitPrice, "TakeProfit "+ Position.EntryDate);
stopLossOrder = BuyStopOrder(Instrument, Qty, stopLossPrice, "StopLoss "+ Position.EntryDate);
// Send orders.
Send(stopLossOrder);
Send(takeProfitOrder);
}
}
else if (order == stopLossOrder)
{
// Cancel take profit order.
if (!takeProfitOrder.IsDone)
Cancel(takeProfitOrder);
else
{
if (Position.Side == PositionSide.Long)
{
exceptionOrder = SellOrder(Instrument, Qty, "Exception TakeProfit");
Send(exceptionOrder);
}
else
{
exceptionOrder = BuyOrder(Instrument, Qty, "Exception TakeProfit");
Send(exceptionOrder);
}
}
}
else if (order == takeProfitOrder)
{
// Cancel stop loss order.
if (!stopLossOrder.IsDone)
Cancel(stopLossOrder);
else
{
if (Position.Side == PositionSide.Long)
{
exceptionOrder = SellOrder(Instrument, Qty, "Exception StopLoss");
Send(exceptionOrder);
}
else
{
exceptionOrder = BuyOrder(Instrument, Qty, "Exception StopLoss");
Send(exceptionOrder);
}
}
}
}
I added exceptionOrder to avoid the issue.
Hopefully this helps somebody!