예제 #1
0
        public async Task <decimal> GetBuyAveragePrice(string ccy1, string ccy2, string exchange, decimal quantity)
        {
            var contextTrades = _context.Trades;
            var onlyBuys      = await contextTrades
                                .Where(x => x.Base == ccy1 && x.Terms == ccy2 && x.Exchange == exchange && x.Side == TradeSide.Buy)
                                .OrderByDescending(x => x.TimeStamp)
                                .ToListAsync();

            var price = ProfitCalculator.GetAveragePrice(onlyBuys, quantity);

            return(price);
        }
        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 - TimeSpan.FromDays(-1)),
                CreateTrade("BTC", "LTC", 0.000M, 1000m, 15000m, 19, TradeSide.Buy, DateTime.Now - TimeSpan.FromDays(-2)),
            };

            var averagePrice = ProfitCalculator.GetAveragePrice(_trades, 19);

            Assert.AreEqual(605.26, Math.Round(averagePrice, 2));
        }
        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);
        }