public void orderReplaceRequestAdded(FIXOrder order,
FIXMessage requestMessage, FIXEngineMessageHandlerStatus status) {
if (order instanceof FIXRegularOrder) {
FIXRegularOrder singleOrder = (FIXRegularOrder)order;
// Make sure the session handler status is "Normal". It could be "Recovery", in which case no execution should be sent back.
if (status == FIXEngineMessageHandlerStatus.NORMAL) {
// Developer can implement their own way of generating "OrderID"
String orderID = generateOrderID(requestMessage);
// Example: Accept the request by sending back a "PendingCancel" execution.
{
FIXMessage execMsg = singleOrder.createNewExecutionPendingReplace(requestMessage);
// Developer can implement their own way of generating "OrderID"
String execID = generateExecID(requestMessage);
execMsg.setValue(Tags.OrderID, orderID);
execMsg.setValue(Tags.ExecID, execID);
FIXMessageComponent lastExec = singleOrder.getLastExecution();
if (lastExec != null) {
execMsg.setValue(Tags.CumQty, lastExec.getFloatValue(Tags.CumQty));
execMsg.setValue(Tags.LeavesQty, lastExec.getFloatValue(Tags.LeavesQty));
execMsg.setValue(Tags.AvgPx, lastExec.getFloatValue(Tags.AvgPx));
} else {
FIXMessageComponent curOrder = singleOrder.getCurrentOrder();
execMsg.setValue(Tags.CumQty, 0);
execMsg.setValue(Tags.LeavesQty, curOrder.getFloatValue(Tags.OrderQty));
execMsg.setValue(Tags.AvgPx, 0);
}
singleOrder.addExecution(execMsg);
}
// Another example: Reject the request by sending back "OrderCancelReject"
{
FIXMessage cxlRej = singleOrder.createOrderCancelReject(requestMessage, singleOrder.getOrdStatus(), ValidValues.CxlRejReason.AlreadyPendingCxl, null);
cxlRej.setValue(Tags.OrderID, orderID);
singleOrder.addCancelReject(cxlRej);
}
// TODO: Implement your own business logic ...
}
}
}
|