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); }
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); }
public void HandleNullUnmatchedBackSize() { var orc = new OrderRunnerChangeStub() .WithUnmatchedBack(null, 10.99, "2") .WithUnmatchedBack(1.01, null, "3") .WithUnmatchedBack(null, null, "4"); _runner.OnOrderChange(orc); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }