Пример #1
0
 public async Task EnqueueUpdateAndProcessSafeAsync(OrderBookUpdate update)
 {
     await Task.Run(() => {
         lock (queueLock)
         {
             UpdateList.Enqueue(update);
         }
         ProcessUpdatesSafe();
     });
 }
Пример #2
0
        public OrderBookUpdate dequeueUpdateSafe()
        {
            OrderBookUpdate upd = null;

            lock (queueLock)
            {
                if (UpdateList.Count > 0)
                {
                    upd = UpdateList.Dequeue();
                }
            }
            return(upd);
        }
        public void ReqMarketDepth(int reqId, Contract contract, double ratio)
        {
            var orderBookUpdate = new OrderBookUpdate
            {
                Ratio          = ratio,
                OrderBookLines = new OrderBookLine[20]
            };

            for (int iterator = 0; iterator < orderBookUpdate.OrderBookLines.Length; iterator++)
            {
                orderBookUpdate.OrderBookLines[iterator] = new OrderBookLine();
            }
            _orderBookUpdates.Add(reqId, orderBookUpdate);

            ClientSocket.reqMarketDepth(reqId, contract, 10, false, null);
            Notify($"Subscribed to {contract.Symbol} marketDepth");
        }
Пример #4
0
 private void ProcessUpdate(OrderBookUpdate upd)
 {
     if (_previousUpdateEventTime < upd.EventTime)
     {
         foreach (var updAsk in upd.Asks)
         {
             if (updAsk.Value == 0)
             {
                 AskBook.Remove(updAsk.Key);
             }
             else
             {
                 AskBook[updAsk.Key] = updAsk.Value;
             }
         }
         foreach (var updBid in upd.Bids)
         {
             if (updBid.Value == 0)
             {
                 BidBook.Remove(updBid.Key);
             }
             else
             {
                 BidBook[updBid.Key] = updBid.Value;
             }
         }
         _previousUpdateEventTime = upd.EventTime;
         var handler = OnOrderbookUpdated;;
         if (handler != null)
         {
             var arg = new OrderBookUpdatedArgs {
                 UpdateTime = upd.EventTime
             };
             handler(this, arg);
         }
     }
     else
     {
         SetState(RealtimeOrderBookState.OutOfSync);
         throw new WebsocketStreamOutOfSyncException(string.Format("Websocket stream out of sync for {0}", Symbol));
     }
 }
        private void ApplyEventToOrderBook(OrderBookUpdate update)
        {
            if (update == null)
            {
                throw new ArgumentNullException(nameof(update));
            }

            var newOrderbook = OrderBook.Clone(DateTime.UtcNow);

            foreach (var ask in update.Asks)
            {
                newOrderbook.UpdateAsk(ask[0], ask[1]);
            }

            foreach (var bid in update.Bids)
            {
                newOrderbook.UpdateBid(bid[0], bid[1]);
            }

            OrderBook = newOrderbook;
        }
Пример #6
0
 internal OrderBookChangedEventArgs(CurrencyPair pair, OrderBookUpdate update)
 {
     Pair   = pair;
     Update = update;
 }