public void Minus_1_value_equals_to_Unlimited()
 {
     var value = new DepthLevel(-1);
     var expected = DepthLevel.Unlimited;
     Assert.True(value == expected);
     Assert.Equal(value, expected);
 }
 public void Zero_value_equals_to_default()
 {
     var value = new DepthLevel(0);
     var expected = default(DepthLevel);
     Assert.True(value == expected);
     Assert.Equal(value, expected);
 }
 public void Minus_2_value_equals_to_Excluded()
 {
     var value = new DepthLevel(-2);
     var expected = DepthLevel.Excluded;
     Assert.True(value == expected);
     Assert.Equal(value, expected);
 }
Exemple #4
0
        public RenderPanel(int x, int y, int width, int height, DepthLevel depth = DepthLevel.Medium)
        {
            _panelSpriteBatch = new SpriteBatch(Singleton.Device);
            _sprites = new List<IDrawableSprite>();
            _buffers = new List<IDrawableBuffer>();

            _depth = (float) depth/10;

            _renderPanels.Add(this);

            _renderTarget = new RenderTarget2D(Singleton.Device, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);

            _position = new Vector2(x, y);
            BoundingBox = new Rectangle(x, y, width, height);
        }
        public void GetRateTest_ChecksTheRateForTheGivenCurrencyPairAfterSubmittingDepthLevels_ChecksTheRateReturnedToVerify()
        {
            MarketController marketController = (MarketController)_applicationContext["MarketController"];
            BBOMemoryImage   bboMemoryImage   = (BBOMemoryImage)_applicationContext["BBOMemoryImage"];

            DepthLevel bidLevel1 = new DepthLevel(new Price(491));
            DepthLevel bidLevel2 = new DepthLevel(new Price(492));
            DepthLevel bidLevel3 = new DepthLevel(new Price(493));

            DepthLevel askLevel1 = new DepthLevel(new Price(494));
            DepthLevel askLevel2 = new DepthLevel(new Price(495));
            DepthLevel askLevel3 = new DepthLevel(new Price(496));

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel1, askLevel1);
            IHttpActionResult httpActionResult = marketController.GetRate("XBT/USD");

            OkNegotiatedContentResult <Rate> returnedOkRate = (OkNegotiatedContentResult <Rate>)httpActionResult;
            Rate rate = returnedOkRate.Content;

            Assert.AreEqual("XBT/USD", rate.CurrencyPair);
            Assert.AreEqual(492.5, rate.RateValue); // MidPoint of bidLevel1 = 491 & askLevel1 = 494

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel2, askLevel2);
            httpActionResult = marketController.GetRate("XBT/USD");
            returnedOkRate   = (OkNegotiatedContentResult <Rate>)httpActionResult;
            rate             = returnedOkRate.Content;

            Assert.AreEqual("XBT/USD", rate.CurrencyPair);
            Assert.AreEqual(493.5, rate.RateValue); // MidPoint of bidLevel2 = 492 & askLevel2 = 495

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel3, askLevel3);
            httpActionResult = marketController.GetRate("XBT/USD");
            returnedOkRate   = (OkNegotiatedContentResult <Rate>)httpActionResult;
            rate             = returnedOkRate.Content;

            Assert.AreEqual("XBT/USD", rate.CurrencyPair);
            Assert.AreEqual(494.5, rate.RateValue); // MidPoint of bidLevel3 = 493 & askLevel3 = 496
        }
        public static bool VerifyDepth(DepthLevel level, Price price, int count, Quantity quantity)
        {
            var matched = true;

            if (level.Price != price)
            {
                matched = false;
            }
            if (level.OrderCount != count)
            {
                matched = false;
            }
            if (level.AggregateQty != quantity)
            {
                matched = false;
            }
            if (level.IsExcess)
            {
                matched = false;
            }

            return(matched);
        }
        public void AddRatesForMultiplkeCurrenciesTest_AddRatesForMultipleCurrenciesAndExpectsAListOfRates_VerifiesThroughTheReturnedRateList()
        {
            BBOMemoryImage bboMemoryImage = new BBOMemoryImage();

            DepthLevel xbtUsdBidLevel = new DepthLevel(new Price(491));
            DepthLevel ltcUsdBidLevel = new DepthLevel(new Price(492));
            DepthLevel btcUsdBidLevel = new DepthLevel(new Price(493));

            DepthLevel xbtUsdAskLevel = new DepthLevel(new Price(494));
            DepthLevel ltcUsdAskLevel = new DepthLevel(new Price(495));
            DepthLevel btcUsdAskLevel = new DepthLevel(new Price(496));

            bboMemoryImage.OnBBOArrived("XBT/USD", xbtUsdBidLevel, xbtUsdAskLevel);
            bboMemoryImage.OnBBOArrived("LTC/USD", ltcUsdBidLevel, ltcUsdAskLevel);
            bboMemoryImage.OnBBOArrived("BTC/USD", btcUsdBidLevel, btcUsdAskLevel);

            Assert.AreEqual("XBT/USD", bboMemoryImage.RatesList.ToList()[0].CurrencyPair);
            Assert.AreEqual(492.5, bboMemoryImage.RatesList.ToList()[0].RateValue); // MidPoint of xbtUsdBidLevel = 491 & xbtUsdAskLevel = 494
            Assert.AreEqual("LTC/USD", bboMemoryImage.RatesList.ToList()[1].CurrencyPair);
            Assert.AreEqual(493.5, bboMemoryImage.RatesList.ToList()[1].RateValue); // MidPoint of ltcUsdBidLevel = 492 & ltcUsdAskLevel = 495
            Assert.AreEqual("BTC/USD", bboMemoryImage.RatesList.ToList()[2].CurrencyPair);
            Assert.AreEqual(494.5, bboMemoryImage.RatesList.ToList()[2].RateValue); // MidPoint of btcUsdBidLevel = 493 & btcUsdAskLevel = 496
        }
        public void GetBboTest_ChecksIfTheBboIsRetreivedSuccessfully_ReturnsBboForCurrencypairIfPresent()
        {
            BBOMemoryImage         bboMemoryImage = new BBOMemoryImage();
            MarketDataQueryService queryService   = new MarketDataQueryService(null, null, bboMemoryImage, null, null);

            DepthLevel bestBid = new DepthLevel(new Price(491));

            bestBid.IncreaseVolume(new Volume(100));
            DepthLevel bestAsk = new DepthLevel(new Price(492));

            bestAsk.IncreaseVolume(new Volume(200));
            bboMemoryImage.OnBBOArrived("BTCUSD", bestBid, bestAsk);

            BBORepresentation bboRepresentation = queryService.GetBBO("BTCUSD");

            Assert.IsNotNull(bboRepresentation);
            Assert.AreEqual(bestBid.Price.Value, bboRepresentation.BestBidPrice);
            Assert.AreEqual(bestBid.AggregatedVolume.Value, bboRepresentation.BestBidVolume);
            Assert.AreEqual(bestBid.OrderCount, bboRepresentation.BestBidOrderCount);
            Assert.AreEqual(bestAsk.Price.Value, bboRepresentation.BestAskPrice);
            Assert.AreEqual(bestAsk.AggregatedVolume.Value, bboRepresentation.BestAskVolume);
            Assert.AreEqual(bestAsk.OrderCount, bboRepresentation.BestAskOrderCount);
        }
        public bool VerifyDepth(DepthLevel depthLevel, Price price, int count, Volume volume)
        {
            bool matched = true;

            if (depthLevel.Price != null)
            {
                if (!depthLevel.Price.Equals(price))
                {
                    Console.WriteLine("Price = " + depthLevel.Price.Value);
                    matched = false;
                }
                if (depthLevel.OrderCount != count)
                {
                    Console.WriteLine("OrderCount = " + depthLevel.OrderCount);
                    matched = false;
                }
                if (depthLevel.AggregatedVolume != null && !depthLevel.AggregatedVolume.Equals(volume))
                {
                    Console.WriteLine("Volume = " + depthLevel.AggregatedVolume.Value);
                    matched = false;
                }
            }
            return(matched);
        }
        public void AddRateTest_TestIfTheRateForACurrencyPairIsAsExpected_VerifiesThroughTheReturnedRate()
        {
            BBOMemoryImage bboMemoryImage = new BBOMemoryImage();

            DepthLevel bidLevel1 = new DepthLevel(new Price(491));
            DepthLevel bidLevel2 = new DepthLevel(new Price(492));
            DepthLevel bidLevel3 = new DepthLevel(new Price(493));

            DepthLevel askLevel1 = new DepthLevel(new Price(494));
            DepthLevel askLevel2 = new DepthLevel(new Price(495));
            DepthLevel askLevel3 = new DepthLevel(new Price(496));

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel1, askLevel1);
            Assert.AreEqual("XBT/USD", bboMemoryImage.RatesList.ToList()[0].CurrencyPair);
            Assert.AreEqual(492.5, bboMemoryImage.RatesList.ToList()[0].RateValue); // MidPoint of bidLevel1 = 491 & askLevel1 = 494

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel2, askLevel2);
            Assert.AreEqual("XBT/USD", bboMemoryImage.RatesList.ToList()[0].CurrencyPair);
            Assert.AreEqual(493.5, bboMemoryImage.RatesList.ToList()[0].RateValue); // MidPoint of bidLevel2 = 492 & askLevel2 = 495

            bboMemoryImage.OnBBOArrived("XBT/USD", bidLevel3, askLevel3);
            Assert.AreEqual("XBT/USD", bboMemoryImage.RatesList.ToList()[0].CurrencyPair);
            Assert.AreEqual(494.5, bboMemoryImage.RatesList.ToList()[0].RateValue); // MidPoint of bidLevel3 = 493 & askLevel3 = 496
        }
        public void BboAddTest_ChecksWhetherTheBestBidAndOfferAreAddedSuccessfully_VerifiesBBoListFromMEmoryImage()
        {
            BBOMemoryImage bboMemoryImage = new BBOMemoryImage();

            DepthLevel bestBid = new DepthLevel(new Price(491));

            bestBid.IncreaseVolume(new Volume(600));
            bestBid.UpdateOrderCount(1);

            DepthLevel bestAsk = new DepthLevel(new Price(496));

            bestAsk.IncreaseVolume(new Volume(500));
            bestAsk.UpdateOrderCount(1);

            bboMemoryImage.OnBBOArrived("XTCUSD", bestBid, bestAsk);

            Assert.AreEqual(1, bboMemoryImage.BBORepresentationList.Count());
            Assert.AreEqual(491, bboMemoryImage.BBORepresentationList.First().BestBidPrice);
            Assert.AreEqual(496, bboMemoryImage.BBORepresentationList.First().BestAskPrice);
            Assert.AreEqual(600, bboMemoryImage.BBORepresentationList.First().BestBidVolume);
            Assert.AreEqual(500, bboMemoryImage.BBORepresentationList.First().BestAskVolume);
            Assert.AreEqual(1, bboMemoryImage.BBORepresentationList.First().BestBidOrderCount);
            Assert.AreEqual(1, bboMemoryImage.BBORepresentationList.First().BestAskOrderCount);
        }
 public void Default_level_is_Level()
 {
     var value = new DepthLevel();
     Assert.True(value.Level == DepthLevel.LevelType.Level);
 }
 public void Value_matches_ToString(short value, string expected)
 {
     var actual = new DepthLevel(value).ToString();
     Assert.Equal(expected, actual);
 }
 public void Default_value_is_zero()
 {
     var value = new DepthLevel();
     Assert.True(value.Value == 0);
 }
        public void LastAskRemovedTest_TestsIfTheLastAskIsRemovedFromTheMemorymagesListOfDepths_VerifiesusingMemoryImagesAskBook()
        {
            DepthMemoryImage depthMemoryImage = new DepthMemoryImage();
            Depth            depth            = new Depth(CurrencyConstants.BtcUsd, 5);

            depth.AddOrder(new Price(491), new Volume(100), OrderSide.Buy);
            depth.AddOrder(new Price(498), new Volume(800), OrderSide.Buy);
            depth.AddOrder(new Price(493), new Volume(300), OrderSide.Buy);
            depth.AddOrder(new Price(496), new Volume(600), OrderSide.Buy);

            depth.AddOrder(new Price(491), new Volume(100), OrderSide.Sell);
            depth.AddOrder(new Price(498), new Volume(800), OrderSide.Sell);
            depth.AddOrder(new Price(493), new Volume(300), OrderSide.Sell);
            depth.AddOrder(new Price(496), new Volume(600), OrderSide.Sell);

            // Checks first and last bid prices
            Assert.AreEqual(498, depth.BidLevels[0].Price.Value);
            Assert.AreEqual(491, depth.BidLevels[3].Price.Value);
            // Checks first and last ask prices
            Assert.AreEqual(491, depth.AskLevels[0].Price.Value);
            Assert.AreEqual(498, depth.AskLevels[3].Price.Value);

            depthMemoryImage.OnDepthArrived(depth);

            Assert.AreEqual(1, depthMemoryImage.BidDepths.Count());
            Assert.AreEqual(1, depthMemoryImage.AskDepths.Count());

            // Bids in DepthMemoryImage
            Assert.AreEqual(800, depthMemoryImage.BidDepths.First().Value.DepthLevels[0].Volume);
            Assert.AreEqual(498, depthMemoryImage.BidDepths.First().Value.DepthLevels[0].Price);
            Assert.AreEqual(1, depthMemoryImage.BidDepths.First().Value.DepthLevels[0].OrderCount);
            Assert.AreEqual(600, depthMemoryImage.BidDepths.First().Value.DepthLevels[1].Volume);
            Assert.AreEqual(496, depthMemoryImage.BidDepths.First().Value.DepthLevels[1].Price);
            Assert.AreEqual(1, depthMemoryImage.BidDepths.First().Value.DepthLevels[1].OrderCount);
            Assert.AreEqual(300, depthMemoryImage.BidDepths.First().Value.DepthLevels[2].Volume);
            Assert.AreEqual(493, depthMemoryImage.BidDepths.First().Value.DepthLevels[2].Price);
            Assert.AreEqual(1, depthMemoryImage.BidDepths.First().Value.DepthLevels[2].OrderCount);
            Assert.AreEqual(100, depthMemoryImage.BidDepths.First().Value.DepthLevels[3].Volume);
            Assert.AreEqual(491, depthMemoryImage.BidDepths.First().Value.DepthLevels[3].Price);
            Assert.AreEqual(1, depthMemoryImage.BidDepths.First().Value.DepthLevels[3].OrderCount);
            // Asks in DepthMemoryImage
            Assert.AreEqual(100, depthMemoryImage.AskDepths.First().Value.DepthLevels[0].Volume);
            Assert.AreEqual(491, depthMemoryImage.AskDepths.First().Value.DepthLevels[0].Price);
            Assert.AreEqual(1, depthMemoryImage.AskDepths.First().Value.DepthLevels[0].OrderCount);
            Assert.AreEqual(300, depthMemoryImage.AskDepths.First().Value.DepthLevels[1].Volume);
            Assert.AreEqual(493, depthMemoryImage.AskDepths.First().Value.DepthLevels[1].Price);
            Assert.AreEqual(1, depthMemoryImage.AskDepths.First().Value.DepthLevels[1].OrderCount);
            Assert.AreEqual(600, depthMemoryImage.AskDepths.First().Value.DepthLevels[2].Volume);
            Assert.AreEqual(496, depthMemoryImage.AskDepths.First().Value.DepthLevels[2].Price);
            Assert.AreEqual(1, depthMemoryImage.AskDepths.First().Value.DepthLevels[2].OrderCount);
            Assert.AreEqual(800, depthMemoryImage.AskDepths.First().Value.DepthLevels[3].Volume);
            Assert.AreEqual(498, depthMemoryImage.AskDepths.First().Value.DepthLevels[3].Price);
            Assert.AreEqual(1, depthMemoryImage.AskDepths.First().Value.DepthLevels[3].OrderCount);

            DepthLevel depthLevel498 = depth.FindLevel(new Price(498), OrderSide.Sell, depth.AskLevels);

            depth.EraseLevel(depthLevel498, OrderSide.Sell);
            DepthLevel depthLevel496 = depth.FindLevel(new Price(496), OrderSide.Sell, depth.AskLevels);

            depth.EraseLevel(depthLevel496, OrderSide.Sell);
            DepthLevel depthLevel493 = depth.FindLevel(new Price(493), OrderSide.Sell, depth.AskLevels);

            depth.EraseLevel(depthLevel493, OrderSide.Sell);
            DepthLevel depthLevel491 = depth.FindLevel(new Price(491), OrderSide.Sell, depth.AskLevels);

            depth.EraseLevel(depthLevel491, OrderSide.Sell);

            // Checks first and last bid prices
            Assert.AreEqual(498, depth.BidLevels[0].Price.Value);
            Assert.AreEqual(491, depth.BidLevels[3].Price.Value);
            // Checks first and last ask prices
            Assert.AreEqual(null, depth.AskLevels[0].Price);
            Assert.AreEqual(null, depth.AskLevels[3].Price);

            depthMemoryImage.OnDepthArrived(depth);
            Assert.AreEqual(1, depthMemoryImage.BidDepths.Count());
            Assert.AreEqual(1, depthMemoryImage.AskDepths.Count());

            // Bids in DepthMemoryImage
            Assert.AreEqual(498, depthMemoryImage.BidDepths.First().Value.DepthLevels[0].Price);
            Assert.AreEqual(496, depthMemoryImage.BidDepths.First().Value.DepthLevels[1].Price);
            Assert.AreEqual(493, depthMemoryImage.BidDepths.First().Value.DepthLevels[2].Price);
            Assert.AreEqual(491, depthMemoryImage.BidDepths.First().Value.DepthLevels[3].Price);
            // Asks in DepthMemoryImage
            Assert.IsNull(depthMemoryImage.AskDepths.First().Value.DepthLevels[0]);
            Assert.IsNull(depthMemoryImage.AskDepths.First().Value.DepthLevels[1]);
            Assert.IsNull(depthMemoryImage.AskDepths.First().Value.DepthLevels[2]);
            Assert.IsNull(depthMemoryImage.AskDepths.First().Value.DepthLevels[3]);
        }
        public void PublishAllTypesToOutputDisruptor_IfAllTypesAreConvertedToByteArray_ItShouldReceivedAndProperlyCasted()
        {
            Order order = OrderFactory.CreateOrder("1234", "XBTUSD", "market", "buy", 5, 0,
                                                   new StubbedOrderIdGenerator());

            //byte[] array = ObjectToByteArray(order);
            OutputDisruptor.Publish(order);

            Order buyOrder = OrderFactory.CreateOrder("1234", "XBTUSD", "limit", "buy", 5, 10,
                                                      new StubbedOrderIdGenerator());
            Order sellOrder = OrderFactory.CreateOrder("1234", "XBTUSD", "limit", "sell", 5, 11,
                                                       new StubbedOrderIdGenerator());
            Trade trade = new Trade(new TradeId("123"), "XBTUSD", new Price(100), new Volume(10), DateTime.Now, buyOrder, sellOrder);

            //byte[] array1 = ObjectToByteArray(trade);
            OutputDisruptor.Publish(trade);

            LimitOrderBook limitOrderBook = new LimitOrderBook("XBTUSD");

            limitOrderBook.PlaceOrder(buyOrder);
            limitOrderBook.PlaceOrder(sellOrder);
            //byte[] array2 = ObjectToByteArray(limitOrderBook);
            OutputDisruptor.Publish(limitOrderBook);

            Depth depth = new Depth("XBTUSD", 3);

            depth.AddOrder(new Price(490), new Volume(100), OrderSide.Buy);
            depth.AddOrder(new Price(491), new Volume(100), OrderSide.Buy);
            depth.AddOrder(new Price(492), new Volume(200), OrderSide.Buy);
            //byte[] array3 = ObjectToByteArray(depth);
            OutputDisruptor.Publish(depth);

            DepthLevel askDepthLevel = new DepthLevel(new Price(491.32M));
            bool       addOrder1     = askDepthLevel.AddOrder(new Volume(2000));
            bool       addOrder2     = askDepthLevel.AddOrder(new Volume(1000));
            DepthLevel bidDepthLevel = new DepthLevel(new Price(491.32M));

            addOrder1 = bidDepthLevel.AddOrder(new Volume(2000));
            addOrder2 = bidDepthLevel.AddOrder(new Volume(1000));
            bool addOrder3 = bidDepthLevel.AddOrder(new Volume(3000));
            BBO  bbo       = new BBO("XBTUSD", bidDepthLevel, askDepthLevel);

            //byte[] array4 = ObjectToByteArray(bbo);
            OutputDisruptor.Publish(bbo);
            _manualResetEvent.WaitOne(3000);

            Assert.NotNull(_receviedOrder);
            Assert.AreEqual(_receviedOrder, order);

            Assert.NotNull(_receivedTrade);
            Assert.AreEqual(_receivedTrade.BuyOrder, buyOrder);
            Assert.AreEqual(_receivedTrade.SellOrder, sellOrder);

            Assert.NotNull(_receivedLimitOrderBook);
            Assert.AreEqual(_receivedLimitOrderBook.AskCount, 1);
            Assert.AreEqual(_receivedLimitOrderBook.BidCount, 1);

            Assert.NotNull(_receivedDepth);
            Assert.AreEqual(_receivedDepth.BidLevels[0].Price.Value, 492);
            Assert.AreEqual(_receivedDepth.BidLevels[1].Price.Value, 491);
            Assert.AreEqual(_receivedDepth.BidLevels[2].Price.Value, 490);

            Assert.NotNull(_receivedBbo);
            Assert.AreEqual(_receivedBbo.BestAsk.OrderCount, 2);
            Assert.AreEqual(_receivedBbo.BestBid.OrderCount, 3);
        }