示例#1
0
 /// <summary>
 /// Insert order before the specific offer.
 /// </summary>
 /// <param name="orderbook">Orderbook</param>
 /// <param name="orderWrapper">An order to insert</param>
 /// <param name="beforeWrapper"></param>
 public void InsertOrderBefore(OrderInfoWrapper orderWrapper, OrderInfoWrapper beforeWrapper)
 {
     if (beforeWrapper == null)
     {     //append to the end
         if (Tail != null)
         { //insert after the tail
             Tail.Next         = orderWrapper;
             orderWrapper.Prev = Tail;
             Tail = orderWrapper;
         }
         else
         { //it's the first order entry
             Head = Tail = orderWrapper;
         }
     }
     else
     {
         //insert order into the linked list before the cursor
         orderWrapper.Prev  = beforeWrapper.Prev;
         orderWrapper.Next  = beforeWrapper;
         beforeWrapper.Prev = orderWrapper;
         //update the reference if we are inserting before the head entry
         if (beforeWrapper == Head)
         {
             Head = orderWrapper;
         }
     }
     //increment count
     Count++;
     TotalAmount += orderWrapper.Order.Amount;
     Volume      += (long)(orderWrapper.Order.Amount * orderWrapper.Order.Price);
     //add to the map
     orderMap.AddOrder(orderWrapper);
 }
示例#2
0
        /// <summary>
        /// Add new order to the orderbook.
        /// </summary>
        /// <param name="order">An order to add</param>
        public void InsertOrder(OrderInfoWrapper order)
        {
            var price = order.Order.Price;

            //just set Head reference if it's the first order
            if (Head == null)
            {
                InsertOrderBefore(order, null);
                return;
            }
            //find position to insert the order
            var cursor = Head;

            while ((Side == OrderSide.Sell && price >= cursor.Order.Price) ||
                   (Side == OrderSide.Buy && price <= cursor.Order.Price))
            {
                cursor = cursor.Next;
                if (cursor == null)
                {
                    break;                 //the last record
                }
            }

            //insert order
            InsertOrderBefore(order, cursor);
        }
示例#3
0
        /// <summary>
        /// Add new order to the orderbook.
        /// </summary>
        /// <param name="order">An order to add</param>
        public void InsertOrder(OrderInfoWrapper order)
        {
            var i      = ~sortedOrders.BinarySearch(order, comparer);
            var cursor = default(OrderInfoWrapper);

            if (i == 0)
            {
                cursor = sortedOrders.FirstOrDefault();
            }
            else if (sortedOrders.Count > i)
            {
                cursor = sortedOrders[i];
            }
            sortedOrders.Insert(i, order);

            //insert order
            InsertOrderBefore(order, cursor);
        }
示例#4
0
 public void AddOrder(OrderInfoWrapper orderWrapper)
 {
     lock (this)
         map.Add(orderWrapper.Order.OrderId, orderWrapper);
 }