Exemplo n.º 1
0
 public void OrderModified(LogicalOrder order)
 {
     if (order.IsActive)
     {
         // Any change to an active order even if only
         // a price change means the list change.
         IsActiveOrdersChanged = true;
         if (!activeOrders.Contains(order))
         {
             var  newNode = nodePool.Create(order);
             bool found   = false;
             var  next    = activeOrders.First;
             for (var node = next; node != null; node = next)
             {
                 next = node.Next;
                 LogicalOrder other = node.Value;
                 if (order.CompareTo(other) < 0)
                 {
                     activeOrders.AddBefore(node, newNode);
                     found = true;
                     break;
                 }
             }
             if (!found)
             {
                 activeOrders.AddLast(newNode);
             }
         }
     }
     else
     {
         var node = activeOrders.Find(order);
         if (node != null)
         {
             activeOrders.Remove(node);
             nodePool.Free(node);
             // Since this order became inactive, it
             // means the active list changed.
             IsActiveOrdersChanged = true;
         }
     }
     if (order.IsNextBar)
     {
         if (!nextBarOrders.Contains(order))
         {
             nextBarOrders.Add(order);
         }
     }
     else
     {
         if (nextBarOrders.Contains(order))
         {
             nextBarOrders.Remove(order);
         }
     }
     ActiveOrdersChanged(order);
 }
        private void SortAdjust(ActiveList <CreateOrChangeOrder> list, CreateOrChangeOrder order, Func <CreateOrChangeOrder, CreateOrChangeOrder, double> compare)
        {
            AssureNode(order);
            var orderNode = (ActiveListNode <CreateOrChangeOrder>)order.Reference;

            if (orderNode.List == null || !orderNode.List.Equals(list))
            {
                if (orderNode.List != null)
                {
                    orderNode.List.Remove(orderNode);
                }
                bool found = false;
                var  next  = list.First;
                for (var node = next; node != null; node = next)
                {
                    next = node.Next;
                    var other = node.Value;
                    if (object.ReferenceEquals(order, other))
                    {
                        found = true;
                        break;
                    }
                    else
                    {
                        var result = compare(order, other);
                        if (result < 0)
                        {
                            list.AddBefore(node, orderNode);
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    list.AddLast(orderNode);
                }
            }
        }