public void Check_Calculations_As_In_Excel_Document() { Accounts[0].Balance = 50000; _accountsCacheService.UpdateBalance(Accounts[0]); _bestPriceConsumer.SendEvent(this, new BestPriceChangeEventArgs(new InstrumentBidAskPair { Instrument = "EURUSD", Ask = 1.061M, Bid = 1.06M })); _bestPriceConsumer.SendEvent(this, new BestPriceChangeEventArgs(new InstrumentBidAskPair { Instrument = "BTCEUR", Ask = 1092M, Bid = 1091M })); var orders = new List <Order> { new Order { CreateDate = DateTime.UtcNow, Id = Guid.NewGuid().ToString("N"), AccountId = Accounts[0].Id, ClientId = Accounts[0].ClientId, TradingConditionId = MarginTradingTestsUtils.TradingConditionId, AccountAssetId = Accounts[0].BaseAssetId, AssetAccuracy = 5, Instrument = "EURUSD", Volume = 100000, MatchedOrders = new MatchedOrderCollection(new List <MatchedOrder> { new MatchedOrder { MatchedDate = DateTime.UtcNow, Volume = 100000 } }), //need for GetMatchedVolume() OpenPrice = 1.05M, FillType = OrderFillType.FillOrKill }, new Order { CreateDate = DateTime.UtcNow, Id = Guid.NewGuid().ToString("N"), AccountId = Accounts[0].Id, ClientId = Accounts[0].ClientId, TradingConditionId = MarginTradingTestsUtils.TradingConditionId, AccountAssetId = Accounts[0].BaseAssetId, AssetAccuracy = 5, Instrument = "EURUSD", Volume = -200000, MatchedOrders = new MatchedOrderCollection(new List <MatchedOrder> { new MatchedOrder { MatchedDate = DateTime.UtcNow, Volume = 200000 } }), //need for GetMatchedVolume() OpenPrice = 1.04M, FillType = OrderFillType.FillOrKill }, new Order { CreateDate = DateTime.UtcNow, Id = Guid.NewGuid().ToString("N"), AccountId = Accounts[0].Id, ClientId = Accounts[0].ClientId, TradingConditionId = MarginTradingTestsUtils.TradingConditionId, AccountAssetId = Accounts[0].BaseAssetId, AssetAccuracy = 5, Instrument = "EURUSD", Volume = 50000, MatchedOrders = new MatchedOrderCollection(new List <MatchedOrder> { new MatchedOrder { MatchedDate = DateTime.UtcNow, Volume = 50000 } }), //need for GetMatchedVolume() OpenPrice = 1.061M, FillType = OrderFillType.FillOrKill }, new Order { CreateDate = DateTime.UtcNow, Id = Guid.NewGuid().ToString("N"), AccountId = Accounts[0].Id, ClientId = Accounts[0].ClientId, TradingConditionId = MarginTradingTestsUtils.TradingConditionId, AccountAssetId = Accounts[0].BaseAssetId, AssetAccuracy = 3, Instrument = "BTCEUR", Volume = 100, MatchedOrders = new MatchedOrderCollection(new List <MatchedOrder> { new MatchedOrder { MatchedDate = DateTime.UtcNow, Volume = 100 } }), //need for GetMatchedVolume() OpenPrice = 1120, FillType = OrderFillType.FillOrKill } }; foreach (var order in orders) { _ordersCache.ActiveOrders.Add(order); } orders[0].UpdateClosePrice(1.06M); orders[1].UpdateClosePrice(1.061M); orders[2].UpdateClosePrice(1.06M); orders[3].UpdateClosePrice(1091M); var account = Accounts[0]; Assert.AreEqual(50000, account.Balance); Assert.AreEqual(43676, Math.Round(account.GetTotalCapital(), 5)); Assert.AreEqual(33491.6, Math.Round(account.GetFreeMargin(), 1)); Assert.AreEqual(28399.4, Math.Round(account.GetMarginAvailable(), 1)); Assert.AreEqual(-6324, Math.Round(account.GetPnl(), 5)); Assert.AreEqual(10184.4, Math.Round(account.GetUsedMargin(), 1)); Assert.AreEqual(15276.6, Math.Round(account.GetMarginInit(), 1)); }