public List <OrderData> CalcGrid(List <StopLimitOrderTest> _orders) { var result = new List <OrderData>(); var isLong = true; List <StopLimitOrderTest> orders; if (_orders.Any(x => !x.IsBuyOperation)) { isLong = false; orders = _orders.OrderBy(x => x.StopPrice).ToList(); } else { orders = _orders.OrderByDescending(x => x.StopPrice).ToList(); } var config = tradeConfigRepository.GetLast(); const int precision = 10; if (orders != null) { double costSum = 0; double amountSum = 0; foreach (var order in orders) { var amount = order.Amount; amountSum += amount; var cost = order.Amount * order.StopPrice; costSum += cost; var avgPrice = costSum / amountSum; var orderData = new OrderData(); orderData.Amount = Math.Round(amount, precision); orderData.Equivalent = Math.Round(cost, precision); orderData.PriceInGrid = Math.Round(order.StopPrice, precision); if (order.IsBuyOperation) { orderData.ProfitPrice = Math.Round(avgPrice + avgPrice * config.Profit / 100, precision); } else { isLong = order.IsBuyOperation; orderData.ProfitPrice = Math.Round(avgPrice - avgPrice * config.Profit / 100, precision); } orderData.Rebount = Math.Round(Math.Abs(orderData.PriceInGrid - orderData.ProfitPrice) * 100 / orderData.PriceInGrid, precision); result.Add(orderData); } } if (isLong) { result = result.OrderByDescending(x => x.PriceInGrid).ToList(); } else { result = result.OrderBy(x => x.PriceInGrid).ToList(); } CalcStatisticsParametrs(result, isLong); return(result); }
private void SetConfifuration() { stopLimitOrderRepository = new StopLimitOrderRepository(); takeProfitOrderRepository = new TakeProfitOrderRepository(); positionRepository = new PositionRepository(); tradeConfiguration = ToTestConfifuration(tradeConfigRepository.GetLast()); simbol = CreateSimbolPair(tradeConfiguration.MainCoin, tradeConfiguration.AltCoin); }