/// <summary> /// Returns "Bid OrderBook : Ask OrderBook" where each element contains a tuple of Value: /// Item1 = Volume, Item2 = Price /// </summary> /// <param name="currencyPair"></param> /// <param name="count"></param> /// <returns></returns> public object GetOrderBook(string currencyPair, int count) { OrderRepresentationList originalBidBook = this.GetBidBook(currencyPair); OrderRepresentationList originalAskBook = this.GetAskBook(currencyPair); if (count > 0) { OrderRepresentationList bidBook = new OrderRepresentationList(currencyPair, OrderSide.Buy); OrderRepresentationList askBook = new OrderRepresentationList(currencyPair, OrderSide.Sell); for (int i = 0; i < count; i++) { if (i < originalBidBook.Count()) { bidBook.AddRecord(originalBidBook.ToList()[i].Volume, originalBidBook.ToList()[i].Price, originalBidBook.ToList()[i].DateTime); } if (i < originalAskBook.Count()) { askBook.AddRecord(originalAskBook.ToList()[i].Volume, originalAskBook.ToList()[i].Price, originalAskBook.ToList()[i].DateTime); } } return(new OrderBookRepresentation(bidBook, askBook)); } else { return(new OrderBookRepresentation(originalBidBook, originalAskBook)); } }
/// <summary> /// Get spread of bid and ask /// </summary> /// <param name="currencyPair"></param> /// <returns></returns> public object GetSpread(string currencyPair) { List <OrderRecord> bidsRecord; List <OrderRecord> asksRecord; OrderRepresentationList originalBidBook = this.GetBidBook(currencyPair); OrderRepresentationList originalAskBook = this.GetAskBook(currencyPair); asksRecord = originalAskBook.OrderBy(x => x.DateTime).ToList(); bidsRecord = originalBidBook.OrderBy(x => x.DateTime).ToList(); List <Spread> spread; OrderRecord lastBid = new OrderRecord(0, 0, DateTime.Now); OrderRecord lastAsk = new OrderRecord(0, 0, DateTime.Now); if (asksRecord.Count > 0 && bidsRecord.Count > 0) { spread = new List <Spread>(); //if (asksRecord[0].DateTime >= bidsRecord[0].DateTime) //{ // spread.Add(new Spread(asksRecord[0].Price,bidsRecord[0].Price,asksRecord[0].DateTime)); //} //if (asksRecord[0].DateTime < bidsRecord[0].DateTime) //{ // spread.Add(new Spread(asksRecord[0].Price, bidsRecord[0].Price, bidsRecord[0].DateTime)); //} ////save first record //lastAsk = asksRecord[0]; //lastBid = bidsRecord[0]; ////delete first record from the list //bidsRecord.RemoveAt(0); //asksRecord.RemoveAt(0); //merge both list var merge = bidsRecord.Concat(asksRecord); //sort the list on date time var sorted = merge.OrderBy(x => x.DateTime).ToList(); if (sorted.Count > 0) { foreach (var orderRecord in sorted) { OrderRecord bid = GetLastRecord(orderRecord.DateTime, bidsRecord); OrderRecord ask = GetLastRecord(orderRecord.DateTime, asksRecord); if (bid != null) { lastBid = bid; } if (ask != null) { lastAsk = ask; } if (lastAsk.Price != 0 && lastBid.Price != 0) { spread.Add(new Spread(lastAsk.Price, lastBid.Price, orderRecord.DateTime)); } } } return(spread); } return(null); }
/// <summary> /// Returns the Order Book /// </summary> /// <returns></returns> public object GetOrderBook(string symbol, int count) { OrderRepresentationList bidList = new OrderRepresentationList(symbol, OrderSide.Buy); bidList.UpdateAtIndex(0, 1000, 491.34M, DateTime.Now); bidList.UpdateAtIndex(1, 900, 491.11M, DateTime.Now); bidList.UpdateAtIndex(1, 2300, 489.11M, DateTime.Now); OrderRepresentationList askList = new OrderRepresentationList(symbol, OrderSide.Sell); askList.UpdateAtIndex(1, 900, 499.11M, DateTime.Now); askList.UpdateAtIndex(1, 300, 493.11M, DateTime.Now); askList.UpdateAtIndex(1, 2200, 492.11M, DateTime.Now); return(new Tuple <OrderRepresentationList, OrderRepresentationList>(bidList, askList)); // ToDo: Remove the below commented out code when this request works perfectly on UI /*List<object> list = new List<object>(); * list.Add(symbol); * list.Add("asks"); * list.Add(new object[] { "23", "1000", "204832014" }); * list.Add(new object[] { "32", "1000", "204832014" }); * list.Add(new object[] { "34", "1000", "204832014" }); * * list.Add("bids"); * list.Add(new object[] { "34", "1000", "204832014" }); * list.Add(new object[] { "23", "1000", "204832014" }); * list.Add(new object[] { "33", "1000", "204832014" }); * * return list;*/ }