Пример #1
0
        //
        //
        // *************************************
        // ****     ProcessFillConfirm      ****
        // *************************************
        private void ProcessFillConfirm(FillEventArgs fillEvent)
        {
            Order orderToModify;
            Order orderToReturn = null;

            if (m_OrdersById.TryGetValue(fillEvent.OrderId, out orderToModify))
            {
                lock (m_Lock)
                {
                    orderToModify.ExecutedQty += fillEvent.Fill.Qty;
                    if (fillEvent.isComplete)
                    {
                        orderToModify.OrderStateConfirmed = OrderState.Dead;
                    }
                }
                if (fillEvent.isComplete)
                {
                    m_ParentOrderBook.TryDelete(fillEvent.OrderId);
                }

                // Trigger fill event
                fillEvent.OrderBookID = m_ParentOrderBook.BookID;           // assign the correct id now that we know it.
                m_ParentOrderBook.OnOrderFilled(fillEvent);                 // fire fill event for my subscribers
                // Trigger order state change
                if (m_ParentOrderBook.TryGet(fillEvent.OrderId, out orderToReturn, true))
                {
                    OrderEventArgs orderEvent = new OrderEventArgs();
                    orderEvent.Order       = orderToReturn;
                    orderEvent.Fill        = fillEvent.Fill;
                    orderEvent.OrderBookID = m_ParentOrderBook.BookID;
                    m_ParentOrderBook.OnOrderStateChanged(orderEvent);
                }
            }
        }
Пример #2
0
 //
 /// <summary>
 /// After any order status updated and after we have already updated our quoting orders,
 /// this event is fired first before all others.
 /// </summary>
 public void OnOrderFilled(FillEventArgs fillEventArgs)
 {
     if (this.OrderFilled != null)
     {
         this.OrderFilled(this, fillEventArgs);
     }
 }
Пример #3
0
        //
        //

        //
        //
        //
        //
        // *************************************
        // ****         OrderFilled()       ****
        // *************************************
        public bool OrderFilled(FillEventArgs fillEventArgs)
        {
            int bookId;

            if (m_OrderIDToBookMap.TryGetValue(fillEventArgs.OrderId, out bookId))
            {
                OrderBook orderBook;
                if (m_OrderBooks.TryGetValue(bookId, out orderBook))
                { // we have this order book
                    if (orderBook.IsReady)
                    {
                        fillEventArgs.OrderBookID = bookId;
                        orderBook.OnOrderFilled(fillEventArgs);
                    }
                }
            }
            return(false);
        }
Пример #4
0
        //
        //
        // *************************************************
        // ****              ProcessRequest()           ****
        // *************************************************
        // orderReq.Data[0] = InstrumentName
        // orderReq.Data[1] = orderId
        // orderReq.Data[2] = orderside
        // orderReq.Data[3] = Order/fill/other data?
        /// <summary>
        /// /// Threadsafe method to request manipulation of an internal order.
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="orderSide"></param>
        /// <param name="orderReq"></param>
        public void ProcessRequest(int orderId, int orderSide, RequestEventArg <OrderRequestType> orderReq)
        {
            Order order;

            switch (orderReq.RequestType)
            {
            case OrderRequestType.None:
                break;

            //
            // Add
            //
            case OrderRequestType.AddConfirm:
                order = (Order)orderReq.Data[3];
                ProcessAddConfirm(order);
                break;

            case OrderRequestType.AddReject:
                ProcessAddReject(orderId);
                break;

            //
            // Delete
            //
            case OrderRequestType.DeleteConfirm:
                ProcessDeleteConfirm(orderId);
                break;

            case OrderRequestType.DeleteRequest:
                ProcessDeleteRequest(orderId);
                break;

            case OrderRequestType.DeleteReject:
                // TODO
                break;

            //
            // Fills
            //
            case OrderRequestType.FillConfirm:
                FillEventArgs fillEvent = (FillEventArgs)orderReq.Data[3];
                ProcessFillConfirm(fillEvent);
                break;

            //
            // Change
            //
            case OrderRequestType.ChangeRequest:
                order = (Order)orderReq.Data[3];
                ProcessChangeRequest(order);
                break;

            case OrderRequestType.ChangeConfirm:
                order = (Order)orderReq.Data[3];
                ProcessChangeConfirm(order);
                break;

            case OrderRequestType.ChangeReject:
                ProcessChangeReject(orderId);
                break;

            //
            // Unknown
            //
            case OrderRequestType.Unknown:
                order = (Order)orderReq.Data[3];
                ProcessUknownOrder(order);
                break;

            default:
                break;
            }
        }