Exemple #1
0
        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));
        }