private void RunTest(TradeParams tradeParams, Configurator configurator, TradesPrinter printer)
        {
            tradeParams.Validate();

            var advisor = new TradeAdvisor(configurator.Repository.Days.First().FiveMins);
            var robot = new RobotContext(tradeParams, configurator.Factory, advisor);
            var results = configurator.GetTradeResults();

            //foreach (var day in repository.Days)
            foreach (var day in configurator.Repository.Days.Skip(1))    //TODO перебирать параметры по абсолютному значению, а затем искать регрессию одних на другие
            {
                foreach (var candle in day.FiveMins)
                {
                    var dealEvent = robot.Process(candle) as DealEvent;
                    if (dealEvent != null)
                    {
                        results.AddDeal(dealEvent.Deal);
                    }
                }
                var ev = robot.StopTrading() as DealEvent;
                if (ev != null)
                {
                    results.AddDeal(ev.Deal);
                }
                //printer.PrintDepoWithParamsName(tradeParams, results);

                Assert.That(results.DealsAreClosed);
                robot.Reset();
            }

            //File.WriteAllLines("out.txt", results.GetDepositSizes().Select(s => (s - 30000).ToString()));
            printer.AddRow(tradeParams, results);
        }
        public void AddRow(TradeParams parameters, TradesResult result)
        {
            var row = parameters.GetTableRow(paramsFieldNames)
                .Concat(result.GetTableRow(resultsFieldNames))
                .ToList();

            table.Add(row);
        }
        public RobotContext(TradeParams tradeParams, StatesFactory factory, TradeAdvisor advisor, List<Candle> history = null)
        {
            Logger.Debug("I'm started");
            candles = history ?? new List<Candle>();	//IMPROVE историю хранить не нужно (отправлять за историей к Advisor)
            Advisor = advisor;
            Factory = factory;

            StopLossSize = tradeParams.StopLoss;
            TrailingStopLoss = (int) (StopLossSize * tradeParams.TrailingStopPercent);
            BreakevenSize = (int) (StopLossSize * tradeParams.BreakevenPercent);
            PegtopSize = tradeParams.PegtopSize;
            EndTime = tradeParams.EndTime;

            CurrentState = DefaultState;
            ExtremumsRepository = ((SearchState) CurrentState).ExtremumsRepo;
        }
 private string GetFilenameByParams(TradeParams parameters)
 {
     string filename = parameters.GetTableRow(paramsFieldNames).Aggregate("", (b, name) => b + name + "_");
     return filename.Remove(filename.Length - 1) + ".txt";
 }
 public void PrintDepoWithParamsName(TradeParams parameters, TradesResult result)
 {
     string filename = GetFilenameByParams(parameters);
     File.WriteAllLines(Path.Combine(outputPath, depoPrintsDir, filename), result.GetDepositSizes().Select(s => s.ToString()));
 }
		private void InitDefaultParams(XElement paramsNode)
		{
			var tradeParams = new TradeParams();
			foreach (var param in paramsNode.Descendants())
			{
				var name = param.Name.LocalName;
				if (!TradeParamsMapper.HasField(name))
					throw new SettingsPropertyNotFoundException($"Can't found property {name}");

				TradeParamsMapper.SetValue(name, tradeParams, param.Attribute("Size"));
			}

			loopsExecutor = new LoopsGenerator<TradeParams>(tradeParams);
		}
        private TradeParams GetParams(XElement parameters)
        {
            var tradeParams = new TradeParams();
            foreach (var param in parameters.Descendants())
            {
                var name = param.Name.LocalName;
                if (!TradeParamsMapper.HasField(name))
                    throw new SettingsPropertyNotFoundException($"Can't found property {name}");

                TradeParamsMapper.SetValue(name, tradeParams, param.Attribute("Size"));
            }

            return tradeParams;
        }