Esempio n. 1
0
        public void TestSellProfit()
        {
            _trades = new List <Trade>
            {
                CreateTrade("BTC", "XPM", 0.0025M, 0.00003980M, 0.00552158M, 138.73325317M, TradeSide.Buy,
                            new DateTime(2017, 09, 29, 19, 22, 56)),
                CreateTrade("BTC", "XPM", 0.0025M, 0.00003911M, 0.01083815M, 277.11967321M, TradeSide.Buy,
                            new DateTime(2017, 09, 29, 20, 13, 5)),
                CreateTrade("BTC", "XPM", 0.0025M, 0.00004084M, 0.00568006M, 139.08095555M, TradeSide.Buy,
                            new DateTime(2017, 09, 29, 19, 22, 56)),
            };

            ProfitCalculator.GetProfitForTrade(_trades, 0.02249510M, 553.54654724M, out decimal? totalCost, out decimal? profitPercent, out DateTime boughtDate);
            decimal?btcProfit = 0.02249510M - totalCost.Value;

            var dateTime = new DateTime(2017, 09, 29, 20, 13, 56);

            Assert.AreEqual(dateTime.Year, boughtDate.Year);
            Assert.AreEqual(dateTime.Month, boughtDate.Month);
            Assert.AreEqual(dateTime.Day, boughtDate.Day);
            Assert.AreEqual(dateTime.Second, boughtDate.Second);

            Assert.AreEqual(0.0219831374759224m, totalCost);
            Assert.AreEqual(0.0005119625240776m, btcProfit);
            Assert.AreEqual(2.329, profitPercent);
        }
Esempio n. 2
0
        public void TestPerTradeSellPnL()
        {
            _trades = new List <Trade>
            {
                CreateTrade("BTC", "LTC", 0.000M, 500m, 7500m, 15, TradeSide.Buy, DateTime.Now),
                CreateTrade("BTC", "LTC", 0.000M, 1000m, 10000m, 10, TradeSide.Buy, DateTime.Now),
                CreateTrade("BTC", "LTC", 0.000M, 1000m, 15000m, 19, TradeSide.Buy, DateTime.Now),
            };

            ProfitCalculator.GetProfitForTrade(_trades, 19800m, 18m, out decimal? totalCost, out decimal? profitAndLoss, out DateTime boughtdate);

            Assert.AreEqual(88.571, profitAndLoss);
        }
Esempio n. 3
0
        public async Task <TradesProfitResponse> Handle(TradeProfitQuery query)
        {
            var tradesForPairAndQuantity = _databaseService.GetBuysForPairAndQuantity(query.SellReturns, query.Quantity, query.BaseCcy, query.Terms);

            if (tradesForPairAndQuantity.Count == 0)
            {
                return(new TradesProfitResponse(null, null, null, null));
            }

            ProfitCalculator.GetProfitForTrade(tradesForPairAndQuantity, query.SellReturns, query.Quantity, out decimal? totalCost, out decimal? profit, out DateTime lastBought);

            if (profit.HasValue && totalCost.HasValue)
            {
                decimal?btcProfit    = query.SellReturns - totalCost.Value;
                decimal?dollarProfit = await _priceService.GetDollarAmount(btcProfit.Value);

                return(new TradesProfitResponse(profit, btcProfit, dollarProfit, lastBought));
            }

            return(new TradesProfitResponse(null, null, null, null));
        }