I am using OnOrderUpdate to follow the order set (connected Enter/Stop/Target orders) and update the order data on my end. I managed to get the order averageFillPrice, the update of either the stop or target order and cancelation of the opposite order (target/stop), but I don't get the averageFillPrice for the Stop/Target order. Therefore I can't figure out the result of the order (Profit/Loss).
Is there a way to get the results of the active order?
Of maybe how to get to the Trades related to the order?
Here is my OnOrderUpdate code. SOrder is my order class with data on the order. sOrders is a list of active orders:
protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string nativeError)
{
string fromSignalName = (order.FromEntrySignal!="")?order.FromEntrySignal:order.Name;
SOrder sOrder = sOrders.Find(o=> o.name==fromSignalName);
if (sOrder!=null)
{
if (order.Name==fromSignalName) // the Enter order
{
sOrder.orderId = order.OrderId;
sOrder.SetStatus(orderState);
sOrder.entryOrder = order;
if (quantity>0) sOrder.qty = quantity;
if (limitPrice>0) sOrder.enterPrice = limitPrice;
if (orderState==OrderState.Filled || orderState==OrderState.PartFilled)
{
SetAvgSlippage(sOrder.enterPrice,averageFillPrice);
sOrder.filledEnterPrice = averageFillPrice;
sOrder.filledQty = filled;
}
}
else if (order.Name.ToLower().Contains("stop")) // Stop Order
{
sOrder.stopOrder = order;
sOrder.stopPrice = stopPrice;
}
else if (order.Name.ToLower().Contains("target")) // Target Order
{
sOrder.targetOrder = order;
}
if (orderState==OrderState.Cancelled)
{
if (order.Name!=fromSignalName)
sOrder.Completed(); // either Stop or Target were cancelled, the order is comapleted
else
sOrder.Cancelled(); // Enter order was canccelled
}
}
}

Comment