public void TestSellProfit()
        {
            _trades = new List<Trade>
                        {
                            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.00003980M, 0.00552158M, 138.73325317M, TradeSide.Buy,
                                new DateTime(2017, 09, 29, 19, 22, 56)),
                            CreateTrade("BTC", "XPM", 0.0025M, 0.00004084M, 0.00568006M, 139.08095555M, TradeSide.Buy,
                                new DateTime(2017, 09, 29, 19, 22, 56)),
                        };

            var quanititySold = 300m;
            var averageBuyPrice = ProfitCalculator.GetAveragePrice(_trades, quanititySold);
            var profitPercent = ProfitCalculator.GetProfitForSell(0.02M, quanititySold, averageBuyPrice, quanititySold * averageBuyPrice);

            Assert.AreEqual(70.23, profitPercent);
        }
示例#2
0
        public async Task <TradesProfitResponse> Handle(TradeProfitQuery query)
        {
            var averagePrice = await _databaseService.GetBuyAveragePrice(query.BaseCcy, query.Terms, query.Exchange, query.Quantity);

            if (averagePrice == 0m)
            {
                return(new TradesProfitResponse(null, null, null, null));
            }

            var totalCost = averagePrice * query.Quantity;
            var profit    = ProfitCalculator.GetProfitForSell(query.SellReturns, query.Quantity, averagePrice, totalCost);

            var lastBought = await _databaseService.GetLastBoughtAsync(query.BaseCcy, query.Terms, query.Exchange);

            decimal?btcProfit    = query.SellReturns - totalCost;
            decimal?dollarProfit = await _priceService.GetDollarAmount(query.BaseCcy, btcProfit.Value, query.Exchange);

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