/// <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;*/
        }