예제 #1
0
 private static PriceLevel GetPriceLevel(Price price, SortedDictionary <Price, PriceLevel> side)
 {
     if (!side.TryGetValue(price, out PriceLevel priceLevel))
     {
         priceLevel = new PriceLevel(price);
         side.Add(price, priceLevel);
     }
     return(priceLevel);
 }
예제 #2
0
 public void AddStopOrder(Order order)
 {
     order.Sequnce = ++_sequence;
     if (order.IsBuy)
     {
         PriceLevel priceLevel = GetPriceLevel(order.StopPrice, _stopBid);
         priceLevel.AddOrder(order);
         if (_bestStopBidPriceLevel == null || order.StopPrice < _bestStopBidPriceLevel.Price)
         {
             _bestStopBidPriceLevel = priceLevel;
         }
     }
     else
     {
         PriceLevel priceLevel = GetPriceLevel(order.StopPrice, _stopAsk);
         priceLevel.AddOrder(order);
         if (_bestStopAskPriceLevel == null || order.StopPrice > _bestStopAskPriceLevel.Price)
         {
             _bestStopAskPriceLevel = priceLevel;
         }
     }
 }
예제 #3
0
 public void AddStopOrder(Order order, Price stopPrice)
 {
     order.Sequnce = ++_sequence;
     _stopDictionary.Add(order.OrderId, stopPrice);
     if (order.IsBuy)
     {
         PriceLevel priceLevel = GetPriceLevel(stopPrice, _stopBid);
         priceLevel.AddOrder(order);
         if (_bestStopBidPriceLevel == null || stopPrice < _bestStopBidPriceLevel.Price)
         {
             _bestStopBidPriceLevel = priceLevel;
         }
     }
     else
     {
         PriceLevel priceLevel = GetPriceLevel(stopPrice, _stopAsk);
         priceLevel.AddOrder(order);
         if (_bestStopAskPriceLevel == null || stopPrice > _bestStopAskPriceLevel.Price)
         {
             _bestStopAskPriceLevel = priceLevel;
         }
     }
 }