Exemplo n.º 1
0
        public IList <Quote> ToQuotes()
        {
            var quotes = new List <Quote>();

            if (Asks != null)
            {
                quotes.AddRange(Asks?.Take(100).Select(x => new Quote
                {
                    Broker = Broker.Coincheck,
                    Side   = QuoteSide.Ask,
                    Price  = x[0],
                    Volume = x[1]
                }));
            }
            if (Bids != null)
            {
                quotes.AddRange(Bids?.Take(100).Select(x => new Quote
                {
                    Broker = Broker.Coincheck,
                    Side   = QuoteSide.Bid,
                    Price  = x[0],
                    Volume = x[1]
                }));
            }
            return(quotes);
        }
 public SynthOrderBook(AssetPair assetPair, IReadOnlyList <OrderBook> originalOrderBooks)
 {
     AssetPair          = assetPair;
     OriginalOrderBooks = originalOrderBooks;
     BestBid            = Bids.Any() ? Bids.First() : (VolumePrice?)null;
     BestAsk            = Asks.Any() ? Asks.First() : (VolumePrice?)null;
 }
Exemplo n.º 3
0
        private void Dispatch(OrderBookModel orderBookModel)
        {
            Asks.Clear();
            Bids.Clear();
            int count     = orderBookModel.Asks.Count;
            int takeCount = 100;

            orderBookModel.Asks.Skip(count - takeCount).Take(takeCount).ToList().ForEach(x => Asks.Add(new OrderBookEntry
            {
                Amount        = x.Amount,
                DateTime      = x.DateTime,
                Price         = x.Price,
                GroupedPrice  = x.GroupedPrice,
                GroupedVolume = x.GroupedVolume
            }));

            orderBookModel.Bids.Take(100).ToList().ForEach(x => Bids.Add(new OrderBookEntry
            {
                Amount        = x.Amount,
                DateTime      = x.DateTime,
                Price         = x.Price,
                GroupedPrice  = x.GroupedPrice,
                GroupedVolume = x.GroupedVolume
            }));
        }
Exemplo n.º 4
0
 public OrderBook UpdateOrder(Order mmsOrder)
 {
     if (mmsOrder.MarketSide == MarketSide.Ask)
     {
         if (Asks.All(askOrder => askOrder.MMSId != mmsOrder.MMSId))
         {
             throw new ApplicationException("Ask Order changed received, but no existing order found: {0}".FormatAs(mmsOrder));
         }
         // remove
         var newAsks = Asks.Where(o => o.MMSId != mmsOrder.MMSId).ToList();
         // add
         newAsks.Add(mmsOrder);
         return(new OrderBook(Bids, newAsks, Exchange, Pair, Time));
     }
     else
     {
         if (Bids.All(bidOrder => bidOrder.MMSId != mmsOrder.MMSId))
         {
             throw new ApplicationException("Bid Order changed received, but no existing order found: {0}".FormatAs(mmsOrder));
         }
         // remove
         var newBids = Bids.Where(o => o.MMSId != mmsOrder.MMSId).ToList();
         // add
         newBids.Add(mmsOrder);
         return(new OrderBook(newBids, Asks, Exchange, Pair, Time));
     }
 }
Exemplo n.º 5
0
 void OnRemove(OrderBookUpdateInfo info)
 {
     if (info.Type == OrderBookEntryType.Bid)
     {
         OrderBookEntry entry = Bids.FirstOrDefault((e) => e.Value == info.Entry.Value);
         if (entry == null)
         {
             Debug.WriteLine("Error removing: '" + info.Type + "' with rate " + info.Entry.Value + " not found");
             return;
         }
         Bids.Remove(entry);
     }
     else
     {
         OrderBookEntry entry = Asks.FirstOrDefault((e) => e.Value == info.Entry.Value);
         if (entry == null)
         {
             Debug.WriteLine("Error removing: '" + info.Type + "' with rate " + info.Entry.Value + " not found");
             return;
         }
         Asks.Remove(entry);
     }
     RaiseOnChanged(info);
     OnChangedCore(info);
 }
Exemplo n.º 6
0
        public void AddOrUpdateOrders(IEnumerable <OrderBookItem> newOrders)
        {
            foreach (var order in newOrders)
            {
                if (order.IsBuy)
                {
                    if (Bids.TryGetValue(order.Id, out var storedOrder) && order.Price == 0) // Updates from some exchanges don't have price
                    {
                        order.Price = storedOrder.Price;
                    }

                    InvertSize(order);
                    Bids[order.Id] = order;
                }
                else
                {
                    if (Asks.TryGetValue(order.Id, out var storedOrder) && order.Price == 0) // Updates from some exchanges don't have price
                    {
                        order.Price = storedOrder.Price;
                    }
                    InvertSize(order);
                    Asks[order.Id] = order;
                }
            }
        }
Exemplo n.º 7
0
 public SynthOrderBook(AssetPair assetPair, IReadOnlyList <OrderBook> originalOrderBooks)
 {
     AssetPair          = assetPair;
     OriginalOrderBooks = originalOrderBooks;
     BestBid            = Bids.FirstOrDefault();
     BestAsk            = Asks.FirstOrDefault();
 }
Exemplo n.º 8
0
        public OrderBook UpdatePair(Pair pair)
        {
            var bids = Bids.Select(o => o.UpdatePair(pair));
            var asks = Asks.Select(o => o.UpdatePair(pair));

            return(new OrderBook(bids, asks, Exchange, pair, Time));
        }
Exemplo n.º 9
0
        public OrderBook AddOrder(Order mmsOrder)
        {
            if (mmsOrder.MarketSide == MarketSide.Ask)
            {
                if (Asks.Any(askOrder => askOrder.MMSId == mmsOrder.MMSId))
                {
                    throw new ApplicationException("Ask Order added received, but existing order found: {0}".FormatAs(mmsOrder));
                }

                List <Order> newAsks = Asks.ToList();
                newAsks.Add(mmsOrder);

                return(new OrderBook(Bids, newAsks, Exchange, Pair, Time));
            }
            else
            {
                if (Bids.Any(bidOrder => bidOrder.MMSId == mmsOrder.MMSId))
                {
                    throw new ApplicationException("Bid Order added received, but existing order found: {0}".FormatAs(mmsOrder));
                }

                List <Order> newBids = Bids.ToList();
                newBids.Add(mmsOrder);

                return(new OrderBook(newBids, Asks, Exchange, Pair, Time));
            }
        }
Exemplo n.º 10
0
        private bool AddOrder(OrderTracker tracker, double price)
        {
            bool  matched = false;
            Order order   = tracker.Order;

            if (order.IsBuy)
            {
                matched = MatchBidOrder(tracker, price, Asks);
            }
            else
            {
                matched = MatchAskOrder(tracker, price, Bids);
            }

            if (tracker.Open != 0 && !tracker.IsImmediate)
            {
                if (order.IsBuy)
                {
                    Bids.Add(price, tracker);
                }
                else
                {
                    Asks.Add(price, tracker);
                }
            }

            return(matched);
        }
Exemplo n.º 11
0
        public void ProcessOrder(OrderType orderType)
        {
            var orderList = Asks.Merge(Bids);

            Order order = orderList.GetNext(orderType);

            while (order != null)
            {
                var matchingOrders = GetMatchingOrderList(order);
                if (matchingOrders.Count != 0)
                {
                    if (order.Transaction == TransactionType.Buy)
                    {
                        ExecuteTrade(order, matchingOrders.OrderBy(x => x.Price).ToList());
                    }
                    else
                    {
                        ExecuteTrade(order, matchingOrders.OrderByDescending(x => x.Price).ToList());
                    }
                    OrderProcessed++;
                }
                else
                {
                    break;
                }

                order = orderList.GetNext(orderType);
            }
        }
Exemplo n.º 12
0
 /// <summary>
 /// Печатает строку в процесс движка.
 /// </summary>
 /// <param name="line">Строка запроса.</param>
 /// <param name="waitFor">Строка ответа.</param>
 /// <param name="printAll">Печатать ли весь вывод или только ответ ?</param>
 private static void Send(string line, string waitFor = null, bool printAll = true)
 {
     PrintAll = printAll;
     Asks.Enqueue(new Quest()
     {
         Ask = line, Answer = waitFor
     });
 }
Exemplo n.º 13
0
        public RPCClient(IClient client, ISerializer serializer)
        {
            _client = client;

            _stub   = new Stub(serializer);
            _ask    = new Asks(_stub, serializer);
            _hasher = new AskHasher();
        }
Exemplo n.º 14
0
        public List <Offer> GetOffers(string wallet)
        {
            var result = new List <Offer>();

            result.AddRange(Bids.FindAll(o => o.Wallet == wallet));
            result.AddRange(Asks.FindAll(o => o.Wallet == wallet));

            return(result);
        }
Exemplo n.º 15
0
 public void Clear()
 {
     Bids.Clear();
     Asks.Clear();
     if (AllowInvertedAsks)
     {
         AsksInverted.Clear();
     }
 }
Exemplo n.º 16
0
        public OrderBook Invert()
        {
            var newBids = Asks.Select(x => x.Reciprocal()).ToList();
            var newAsks = Bids.Select(x => x.Reciprocal()).ToList();

            var result = new OrderBook(Source, AssetPair.Invert(), newBids, newAsks, Timestamp);

            return(result);
        }
Exemplo n.º 17
0
 public void Clear()
 {
     ChartAsks.Clear();
     ChartBids.Clear();
     ChartAggregatedAsks.Clear();
     ChartAggregatedBids.Clear();
     Asks.Clear();
     Bids.Clear();
     TopAsks.Clear();
     TopBids.Clear();
 }
Exemplo n.º 18
0
        protected internal void OnAddAsk(OrderBookUpdateInfo info)
        {
            OrderBookEntry before = Asks.FirstOrDefault((e) => e.Value < info.Entry.Value);

            if (before == null)
            {
                Asks.Insert(0, info.Entry);
                return;
            }
            Asks.Insert(Asks.IndexOf(before), info.Entry);
        }
        public OrderBook Reverse()
        {
            var result = new OrderBook(Source, AssetPair,
                                       Asks.Select(x => x.Reciprocal()).OrderBy(x => x.Price).ToList(),
                                       Bids.Select(x => x.Reciprocal()).OrderByDescending(x => x.Price).ToList(),
                                       Timestamp);

            result.AssetPair = AssetPair.Invert();

            return(result);
        }
Exemplo n.º 20
0
 public OrderBook ApplySpread(decimal bidSpread, decimal askSpread)
 {
     return(new OrderBook(
                Bids.Select(o => o.TransformPrice(bidSpread, 0)).ToList(),
                Asks.Select(o => o.TransformPrice(askSpread, 0)).ToList(),
                Exchange,
                Pair,
                Time)
     {
         IsStored = this.IsStored
     });
 }
Exemplo n.º 21
0
 public override string ToString()
 {
     return(string.Format("ExchOB {0} {1} Asks({2}) {3:f4}@{4:f4} Bids({5}) {6:f4}@{7:f4}",
                          Exchange,
                          Pair,
                          Asks.Count,
                          Asks.Count == 0 ? 0 : Asks.First().Amount,
                          Asks.Count == 0 ? 0 : Asks.First().Price,
                          Bids.Count,
                          Bids.Count == 0 ? 0 : Bids.First().Amount,
                          Bids.Count == 0 ? 0 : Bids.First().Price));
 }
Exemplo n.º 22
0
        public bool Equals(OrderBook other)
        {
            bool equal = Asks.SequenceEqual(other.Asks) && Bids.SequenceEqual(other.Bids);

            // Trace.WriteLine("Equals {0} {1},{2}".FormatAs(equal,this,other));
            return(equal);
            //return !(
            //    Asks.Except(other.Asks).Any() ||
            //    other.Asks.Except(Asks).Any() ||
            //    Bids.Except(other.Bids).Any() ||
            //    other.Bids.Except(Bids).Any());
        }
Exemplo n.º 23
0
 public OrderBook GetFixedTop(int numberOfRecords)
 {
     return(new OrderBook(
                Bids.Take(numberOfRecords).ToList(),
                Asks.Take(numberOfRecords).ToList(),
                Exchange,
                Pair,
                Time)
     {
         IsStored = this.IsStored
     });
 }
Exemplo n.º 24
0
 public ConnectedClient(
     TcpClient client,
     ServerStub stub,
     AskHasher hasher,
     ISerializer serializer
     )
 {
     Guid        = System.Guid.NewGuid().ToString();
     _connection = new Connection(client);
     _hasher     = hasher;
     _stub       = stub;
     _ask        = new Asks(_stub, serializer);
 }
Exemplo n.º 25
0
        public static void Asks_Add(string symbol, tapeStream.Shared.Data.BookDataItem ask)
        {
            var asked = new Asks()
            {
                Symbol      = symbol,
                RunDateTime = ask.dateTime,
                Price       = (decimal)ask.Price,
                Size        = (int)ask.Size
            };

            db.Asks.Add(asked);
            db.SaveChanges();
        }
Exemplo n.º 26
0
        public Offer GetOffer(string hash)
        {
            Offer result = null;

            result = Bids.FirstOrDefault(o => o.HashStr == hash);

            if (result == null)
            {
                result = Asks.FirstOrDefault(o => o.HashStr == hash);
            }

            return(result);
        }
Exemplo n.º 27
0
 public void DeleteOrders(IEnumerable <OrderBookItem> orders)
 {
     foreach (var order in orders)
     {
         if (order.IsBuy)
         {
             Bids.Remove(order.Id);
         }
         else
         {
             Asks.Remove(order.Id);
         }
     }
 }
Exemplo n.º 28
0
        protected int FindAsk(Order order)
        {
            double searchPrice = SortPrice(order);
            int    index       = Asks.IndexOfKey(searchPrice);

            do
            {
                if (Asks.Values[index].Order == order)
                {
                    return(index);
                }
            }while (Asks.Keys[++index] == searchPrice);

            return(-1);
        }
Exemplo n.º 29
0
        public void UpdateEntries()
        {
            double MaxVolume = 0;
            double vt        = 0;

            foreach (OrderBookEntry e in Bids)
            {
                e.Volume      = e.Value * e.Amount;
                vt           += e.Volume;
                e.VolumeTotal = vt;
                MaxVolume     = Math.Max(MaxVolume, e.Volume);
            }
            vt = 0;

            foreach (OrderBookEntry e in Asks)
            {
                e.Volume      = e.Value * e.Amount;
                vt           += e.Volume;
                e.VolumeTotal = vt;
                MaxVolume     = Math.Max(MaxVolume, e.Volume);
            }
            double mv = Asks.Count == 0 ? 0: Asks.Last().VolumeTotal;

            vt = 0;
            foreach (OrderBookEntry e in AsksInverted)
            {
                e.Volume      = e.Value * e.Amount;
                vt           += e.Volume;
                e.VolumeTotal = mv - vt;
            }
            if (MaxVolume == 0)
            {
                return;
            }
            MaxVolume = 1 / MaxVolume;
            foreach (OrderBookEntry e in Bids)
            {
                e.VolumePercent = e.Volume * MaxVolume;
            }
            foreach (OrderBookEntry e in Asks)
            {
                e.VolumePercent = e.Volume * MaxVolume;
            }
            foreach (OrderBookEntry e in AsksInverted)
            {
                e.VolumePercent = e.Volume * MaxVolume;
            }
        }
Exemplo n.º 30
0
        /// <summary>
        /// Создать копию объекта.
        /// </summary>
        /// <returns>Копия.</returns>
        public override Message Clone()
        {
            var clone = new QuoteChangeMessage
            {
                LocalTime  = LocalTime,
                SecurityId = SecurityId,
                Bids       = Bids.Select(q => q.Clone()).ToArray(),
                Asks       = Asks.Select(q => q.Clone()).ToArray(),
                ServerTime = ServerTime,
                IsSorted   = IsSorted
            };

            this.CopyExtensionInfo(clone);

            return(clone);
        }