Example #1
0
        public void Update(BfChildOrderEvent coe)
        {
            if (!string.IsNullOrEmpty(coe.ChildOrderAcceptanceId))
            {
                AcceptanceId = coe.ChildOrderAcceptanceId;
            }
            if (!string.IsNullOrEmpty(coe.ChildOrderId))
            {
                OrderId = coe.ChildOrderId;
            }
            LastUpdatedTime = coe.EventDate;

            switch (coe.EventType)
            {
            case BfOrderEventType.Order:
                OrderDate  = coe.EventDate;    // Is it same value to real ordered date ?
                ExpireDate = coe.ExpireDate;
                ChangeState(BfxOrderState.Ordered);
                break;

            case BfOrderEventType.OrderFailed:
                ChangeState(BfxOrderState.OrderFailed);
                break;

            case BfOrderEventType.Cancel:
                ChangeState(BfxOrderState.Canceled);
                break;

            case BfOrderEventType.CancelFailed:
                if (State != BfxOrderState.Outstanding)     // Sometimes recived before ordered which under canceled OCO
                {
                    ChangeState(BfxOrderState.CancelFailed);
                }
                break;

            case BfOrderEventType.Execution:
                _executions.Add(new BfxExecution(coe));
                ExecutedSize  = _executions.Sum(e => e.Size);
                ExecutedPrice = Math.Round(_executions.Sum(e => e.Price * e.Size) / ExecutedSize.Value, ProductCode.GetPriceDecimals(), MidpointRounding.ToEven);
                ChangeState(OrderSize > ExecutedSize ? BfxOrderState.PartiallyExecuted : BfxOrderState.Executed);
                break;

            case BfOrderEventType.Expire:
                ChangeState(BfxOrderState.Expired);
                break;

            case BfOrderEventType.Unknown:
            case BfOrderEventType.Trigger:     // Parent order only
            case BfOrderEventType.Complete:    // Parent order only
                throw new NotSupportedException();
            }
        }