// Update by parent order event public void Update(BfParentOrderEvent poe) { if (poe.EventType != BfOrderEventType.Trigger) { return; } AcceptanceId = poe.ChildOrderAcceptanceId; }
public void OnParentOrderEvent(BfParentOrderEvent poe) { if (poe.ParentOrderAcceptanceId != _order.AcceptanceId) { throw new ApplicationException(); } _order.Update(poe); switch (poe.EventType) { case BfOrderEventType.Order: // Order accepted ChangeState(BfxTransactionState.Idle); NotifyEvent(BfxTransactionEventType.Ordered, poe); break; case BfOrderEventType.OrderFailed: ChangeState(BfxTransactionState.Idle); NotifyEvent(BfxTransactionEventType.OrderFailed, poe); break; case BfOrderEventType.Cancel: ChangeState(BfxTransactionState.Closed); NotifyEvent(BfxTransactionEventType.Canceled, poe); break; case BfOrderEventType.CancelFailed: ChangeState(BfxTransactionState.Idle); NotifyEvent(BfxTransactionEventType.CancelFailed, poe); break; case BfOrderEventType.Trigger: Log.Trace($"Trigger {poe.Side} P:{poe.Price} S:{poe.Size}"); break; case BfOrderEventType.Expire: ChangeState(BfxTransactionState.Closed); NotifyEvent(BfxTransactionEventType.Expired, poe); break; case BfOrderEventType.Complete: if (Order.State == BfxOrderState.Completed) { ChangeState(BfxTransactionState.Closed); NotifyEvent(BfxTransactionEventType.Completed, poe); } break; case BfOrderEventType.Unknown: case BfOrderEventType.Execution: throw new NotSupportedException(); } }
public void Update(BfParentOrderEvent poe) { _orderMethod = poe.ParentOrderType; LastUpdatedTime = poe.EventDate; switch (poe.EventType) { case BfOrderEventType.Order: OrderDate = poe.EventDate; // Is it same value to real ordered date ? ExpireDate = poe.ExpireDate; ChangeState(BfxOrderState.Ordered); break; case BfOrderEventType.OrderFailed: ChangeState(BfxOrderState.OrderFailed); break; case BfOrderEventType.Cancel: ChangeState(BfxOrderState.Canceled); break; case BfOrderEventType.CancelFailed: ChangeState(BfxOrderState.CancelFailed); break; case BfOrderEventType.Trigger: _childOrders[poe.ChildOrderIndex - 1].Update(poe); break; case BfOrderEventType.Expire: ChangeState(BfxOrderState.Expired); break; case BfOrderEventType.Complete: CompletedCount++; Log.Trace($"BfOrderEventType.Complete received. count = {CompletedCount}"); switch (OrderType) { case BfOrderType.IFD: case BfOrderType.IFDOCO: if (CompletedCount == 2) { ChangeState(BfxOrderState.Completed); } break; } break; case BfOrderEventType.Unknown: case BfOrderEventType.Execution: throw new NotSupportedException(); } }
public void Update(BfParentOrderEvent poe) { ParentOrderAcceptanceId = poe.ParentOrderAcceptanceId; ParentOrderId = poe.ParentOrderId; AcceptanceId = poe.ChildOrderAcceptanceId; ChildOrderIndex = poe.ChildOrderIndex - 1; switch (poe.EventType) { case BfOrderEventType.Trigger: ExpireDate = poe.ExpireDate; break; case BfOrderEventType.Complete: break; } }
internal void ForwardParentOrderEvents(BfParentOrderEvent poe) { OrderCache?.RegisterParentOrderEvent(poe); // Sometimes parent order event arraives faster than send order process completes. var tx = _parentOrderTransactions.GetOrAdd(poe.ParentOrderAcceptanceId, key => new BfxParentTransactionPlaceHolder()); if (tx is BfxParentTransactionPlaceHolder placeHolder) { Log.Info($"Parent transaction place holder found or placed. {poe.ParentOrderAcceptanceId} {poe.EventType}"); placeHolder.ParentOrderEvents.Add(poe); return; } if (!(tx is BfxParentTransaction txParent)) { throw new ApplicationException(); } txParent.OnParentOrderEvent(poe); if (poe.EventType == BfOrderEventType.Trigger) { if (!(txParent.Order.Children[poe.ChildOrderIndex - 1] is BfxChildOrder childOrder)) { throw new ApplicationException(); } if (!string.IsNullOrEmpty(childOrder.AcceptanceId)) { var txChild = new BfxChildTransaction(this, childOrder, txParent); _childOrderTransactions.AddOrUpdate(childOrder.AcceptanceId, txChild, (key, value) => { Log.Info($"Child transaction place holder found and merged to parent. {childOrder.AcceptanceId} Parent.{poe.EventType}"); if (!(value is BfxChildTransactionPlaceHolder placeHolder)) { throw new ApplicationException(); } // ToList() prevents "Collection was modified; enumeration operation may not execute." placeHolder.ChildOrderEvents.ToList().ForEach(coe => txParent.OnChildOrderEvent(coe)); return(txChild); });
public void Update(BfParentOrderEvent poe) { AcceptanceId = poe.ParentOrderAcceptanceId; OrderId = poe.ParentOrderId; State = poe.EventType switch { BfOrderEventType.Complete => BfOrderState.Completed, BfOrderEventType.Cancel => BfOrderState.Canceled, BfOrderEventType.Expire => BfOrderState.Expired, BfOrderEventType.OrderFailed => BfOrderState.Rejected, _ => BfOrderState.Active }; if (poe.EventType == BfOrderEventType.Order) { OrderDate = poe.EventDate; ExpireDate = poe.ExpireDate; } if (poe.EventType == BfOrderEventType.OrderFailed) { OrderFailedReason = poe.OrderFailedReason; } } }
static void OnParentOrderEvent(BfParentOrderEvent poe) { switch (poe.EventType) { } }
public DbParentOrder(BfProductCode productCode, BfParentOrderEvent poe) { ProductCode = productCode; OrderType = poe.ParentOrderType; Update(poe); }
protected void NotifyEvent(BfxTransactionEventType oet, BfParentOrderEvent poe) => NotifyEvent(oet, poe.EventDate, poe);
void IBfOrderSource.RegisterParentOrderEvent(BfParentOrderEvent poe) { }