in src/main/java/deltix/ember/service/oms/risk/sample/SamplePnLRiskRule.java [95:117]
public void onOrderEvent(@Nonnull RiskOrder order, @Nonnull OrderEvent event, @Nonnull OrderState previousState, @Nullable RiskObserver observer) {
if (activeOrders.size() > 0 && event instanceof OrderTradeReportEvent) {
if (observer != null && ! Decimal64Utils.isNull(maxLoss)) {
@Decimal long realizedPnL = position.getRealizedPnL();
if (Decimal64Utils.isNegative(realizedPnL) && Decimal64Utils.isGreater(Decimal64Utils.abs(realizedPnL), maxLoss)) {
for (RiskOrder activeOrder : activeOrders) {
MutableOrderCancelRequest request = new MutableOrderCancelRequest();
request.setTimestamp(context.getClock().time());
request.setRequestId("cancel_" + activeOrder.getOrderId());
request.setSourceId(activeOrder.getSourceId());
request.setOrderId(activeOrder.getOrderId());
request.setDestinationId(activeOrder.getDestinationId());
request.setReason("MaxLoss limit breached");
context.sendCancelOrderRequest(request);
}
}
}
}
if (order.isFinal())
activeOrders.remove(order);
}