Exemplo n.º 1
0
        public void CalculateRunnerProfitForTwoRunners()
        {
            var orc1 = new OrderRunnerChangeStub(1)
                       .WithMatchedBack(3.5, 10.99);

            var orc2 = new OrderRunnerChangeStub(2)
                       .WithMatchedBack(10, 1.5);

            var orc3 = new OrderRunnerChangeStub(3)
                       .WithMatchedLay(11, 6.2);

            var orc4 = new OrderRunnerChangeStub(4)
                       .WithMatchedBack(8, 2)
                       .WithMatchedLay(8.8, 3);

            var oc = new OrderChangeStub()
                     .WithOrderRunnerChange(orc1)
                     .WithOrderRunnerChange(orc2)
                     .WithOrderRunnerChange(orc3)
                     .WithOrderRunnerChange(orc4);

            _market.OnChange(_change.WithOrderChange(oc).Build());

            Assert.Equal(33.18, _market.Runners[1].Profit);
            Assert.Equal(9.71, _market.Runners[2].Profit);
            Assert.Equal(-73.49, _market.Runners[3].Profit);
            Assert.Equal(-15.69, _market.Runners[4].Profit);
        }
Exemplo n.º 2
0
        public void CalculateUnmatchedLiabilityForBacks(double price, double size)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedBack(price, size, "2")
                      .WithUnmatchedBack(1.01, 10.99, "3");

            _runner.OnOrderChange(orc);
            Assert.Equal(Math.Round(size + 10.99, 2), _runner.UnmatchedLiability);
        }
Exemplo n.º 3
0
        public void HandleNullUnmatchedBackSize()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedBack(null, 10.99, "2")
                      .WithUnmatchedBack(1.01, null, "3")
                      .WithUnmatchedBack(null, null, "4");

            _runner.OnOrderChange(orc);
        }
Exemplo n.º 4
0
        public void DoNotProcessOrderChangeForWrongMarket()
        {
            var orc = new OrderRunnerChangeStub(1).WithMatchedBack(2.5, 10.99);
            var oc  = new OrderChangeStub("WrongMarketId").WithOrderRunnerChange(orc);
            var c   = _change.WithOrderChange(oc).Build();

            _market.OnChange(c);

            Assert.Empty(_market.Runners);
        }
Exemplo n.º 5
0
        public void HandleNullsInMatchedLays()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedLay(null, 10.99)
                      .WithMatchedLay(1.01, null)
                      .WithMatchedLay(null, null);

            _runner.OnOrderChange(orc);
            Assert.Equal(0, _runner.IfWin);
        }
Exemplo n.º 6
0
        public void CalculateIfWinAndIfLoseForBacksAndLays()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedBack(8, 2)
                      .WithMatchedLay(8.8, 3);

            _runner.OnOrderChange(orc);

            Assert.Equal(-9.4, _runner.IfWin);
            Assert.Equal(1, _runner.IfLose);
        }
Exemplo n.º 7
0
        public void ProcessOrderChange()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedBack(3.5, 10.99);
            var oc = new OrderChangeStub()
                     .WithOrderRunnerChange(orc);

            _market.OnChange(_change.WithOrderChange(oc).Build());

            Assert.Equal(-10.99, _market.Runners[12345].IfLose);
        }
Exemplo n.º 8
0
        public void CalculateIfLoseOnMatchedLays(double price, double size)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedLay(price, size)
                      .WithMatchedLay(10.5, 99.99);

            _runner.OnOrderChange(orc);

            var ifLose = Math.Round(size + 99.99, 2);

            Assert.Equal(ifLose, _runner.IfLose);
        }
Exemplo n.º 9
0
        public void ClearUnmatchedLiabilityBeforeEachUpdate()
        {
            var orc1 = new OrderRunnerChangeStub()
                       .WithUnmatchedBack(2.5, 201.87);

            _runner.OnOrderChange(orc1);
            var orc2 = new OrderRunnerChangeStub()
                       .WithUnmatchedBack(1.01, 10.99);

            _runner.OnOrderChange(orc2);
            Assert.Equal(10.99, _runner.UnmatchedLiability);
        }
Exemplo n.º 10
0
        public void DoNotProcessOrdersForOtherRunners()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedBack(10.5, 99.99)
                      .WithMatchedLay(10.5, 99.99);

            orc.SelectionId = 999;
            _runner.OnOrderChange(orc);

            Assert.Equal(0, _runner.IfWin);
            Assert.Equal(0, _runner.IfLose);
        }
Exemplo n.º 11
0
        public void AddUnmatchedOrders(string betId, long?placedDate, double?price, double?sizeRemaining)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedBack(price, sizeRemaining, betId, placedDate);

            _runner.OnOrderChange(orc);

            var uo = _runner.UnmatchedOrders.First(o => o.BetId == betId);

            Assert.Equal(placedDate, uo.PlacedDate);
            Assert.Equal(price, uo.Price);
            Assert.Equal(sizeRemaining, uo.SizeRemaining);
        }
Exemplo n.º 12
0
        public void HandleNullSelectionIdOnOrderChange()
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedBack(3.5, 10.99);

            orc.SelectionId = null;
            var oc = new OrderChangeStub()
                     .WithOrderRunnerChange(orc);

            _market.OnChange(_change.WithOrderChange(oc).Build());

            Assert.Empty(_market.Runners);
        }
Exemplo n.º 13
0
        public void CalculateUnmatchedLiabilityForLays(double price, double size)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedLay(price, size, "2")
                      .WithUnmatchedLay(1.01, 10.99, "3");

            _runner.OnOrderChange(orc);

            var expected = Math.Round((price * size) - size, 2);

            expected += Math.Round((1.01 * 10.99) - 10.99, 2);
            Assert.Equal(Math.Round(expected, 2), _runner.UnmatchedLiability);
        }
Exemplo n.º 14
0
        public void UnmatchedOrdersAreClearedIfComplete(string betId, long?placedDate, double?price, double?sizeRemaining)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedBack(price, sizeRemaining + 10, betId, placedDate);

            _runner.OnOrderChange(orc);

            var orc2 = new OrderRunnerChangeStub()
                       .WithUnmatchedBack(price, sizeRemaining + 10, betId, placedDate, "EC");

            _runner.OnOrderChange(orc2);

            Assert.Empty(_runner.UnmatchedOrders);
        }
Exemplo n.º 15
0
        public void CalculateIfWinOnMatchedLays(double price, double size)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithMatchedLay(price, size)
                      .WithMatchedLay(10.5, 99.99);

            _runner.OnOrderChange(orc);

            var ifWin = -Math.Round((price * size) - size, 2);

            ifWin += -Math.Round((10.5 * 99.99) - 99.99, 2);

            Assert.Equal(Math.Round(ifWin, 2), _runner.IfWin);
        }
Exemplo n.º 16
0
        public void UnmatchedOrdersAreReplaced(string betId, long?placedDate, double?price, double?sizeRemaining)
        {
            var orc = new OrderRunnerChangeStub()
                      .WithUnmatchedBack(price, sizeRemaining + 10, betId, placedDate);

            _runner.OnOrderChange(orc);

            var orc2 = new OrderRunnerChangeStub()
                       .WithUnmatchedBack(price, sizeRemaining, betId, placedDate);

            _runner.OnOrderChange(orc2);

            Assert.Single(_runner.UnmatchedOrders.Select(o => o.BetId == betId));
            var uo = _runner.UnmatchedOrders.First(o => o.BetId == betId);

            Assert.Equal(sizeRemaining, uo.SizeRemaining);
        }
Exemplo n.º 17
0
        public async Task AdjustBankForMarketLiability(double bank, double liability)
        {
            var rc = new RunnerChangeStub().WithBestAvailableToBack(0, 2.5, 2.99);
            var mc = new MarketChangeStub().WithTotalMatched(10).WithRunnerChange(rc);

            _subscription.WithMarketChange(mc);

            var orc = new OrderRunnerChangeStub().WithUnmatchedBack(2.5, liability);
            var oc  = new OrderChangeStub().WithOrderRunnerChange(orc);

            _subscription.WithOrderChange(oc);
            _subscription.WithMarketChange(mc);

            _trader.AddStrategy(new StrategySpy());
            await _trader.TradeMarket("1.2345", bank, default);

            Assert.Equal(Math.Round((bank - Math.Round(liability, 2)) / 2, 2), _strategy.Stake);
        }
Exemplo n.º 18
0
        public void CalculateTotalLiability(double size)
        {
            var orc1 = new OrderRunnerChangeStub(1)
                       .WithMatchedBack(3.5, 10.99);

            var orc2 = new OrderRunnerChangeStub(2)
                       .WithMatchedBack(10, 1.5)
                       .WithMatchedLay(9.5, 20.01)
                       .WithUnmatchedBack(11, size);

            var oc = new OrderChangeStub()
                     .WithOrderRunnerChange(orc1)
                     .WithOrderRunnerChange(orc2);

            _market.OnChange(_change.WithOrderChange(oc).Build());

            Assert.Equal(45.99, _market.Runners[1].Profit);
            Assert.Equal(-167.58, _market.Runners[2].Profit);

            var expected = -167.58 - Math.Round(size, 2);

            Assert.Equal(Math.Round(expected, 2), _market.Liability);
        }