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; }
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 })); }
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)); } }
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); }
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; } } }
public SynthOrderBook(AssetPair assetPair, IReadOnlyList <OrderBook> originalOrderBooks) { AssetPair = assetPair; OriginalOrderBooks = originalOrderBooks; BestBid = Bids.FirstOrDefault(); BestAsk = Asks.FirstOrDefault(); }
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)); }
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)); } }
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); }
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); } }
/// <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 }); }
public RPCClient(IClient client, ISerializer serializer) { _client = client; _stub = new Stub(serializer); _ask = new Asks(_stub, serializer); _hasher = new AskHasher(); }
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); }
public void Clear() { Bids.Clear(); Asks.Clear(); if (AllowInvertedAsks) { AsksInverted.Clear(); } }
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); }
public void Clear() { ChartAsks.Clear(); ChartBids.Clear(); ChartAggregatedAsks.Clear(); ChartAggregatedBids.Clear(); Asks.Clear(); Bids.Clear(); TopAsks.Clear(); TopBids.Clear(); }
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); }
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 }); }
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)); }
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()); }
public OrderBook GetFixedTop(int numberOfRecords) { return(new OrderBook( Bids.Take(numberOfRecords).ToList(), Asks.Take(numberOfRecords).ToList(), Exchange, Pair, Time) { IsStored = this.IsStored }); }
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); }
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(); }
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); }
public void DeleteOrders(IEnumerable <OrderBookItem> orders) { foreach (var order in orders) { if (order.IsBuy) { Bids.Remove(order.Id); } else { Asks.Remove(order.Id); } } }
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); }
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; } }
/// <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); }