public BackTestingViewModel calculateBacktesting(User user, Models.Command.CreatePortfolioCommand cmd, DateTime dtStartDate, DateTime dtEndDate, List <string> becnhMarkIDs) { // Service which creates a new backtesting portfolio + calculates proper backtesting values BackTestingViewModel vmBacktesting = new BackTestingViewModel(); // Set up portfolio int idPortfolio = _manageBacktestingPortfolios.CreateDefaultPortfolio(user, dtStartDate, dtEndDate, cmd); _manageBacktestingPortfolios.SelectedPortfolio.openExistingPortfolio(idPortfolio, true); _backtestingHandler.setBacktestingPortfolio(_manageBacktestingPortfolios.SelectedPortfolio, dtStartDate, dtEndDate, cmd.Equity); cPort = _manageBacktestingPortfolios.SelectedPortfolio; // Set portfolio data List <int> colExchanges = (cmd.Exchanges != null && cmd.Exchanges.Count > 0 && cmd.Exchanges.Count <= user.Licence.Stocks.Count) ? cmd.Exchanges : user.Licence.Stocks.Select(t => t.id).ToList(); if (!_manageBacktestingPortfolios.SelectedPortfolio.instantiateVariablesForPortfolio(true, cPort.Details.CalcCurrency, colExchanges, cmd.Securities)) { // Failed to get data vmBacktesting.Messages.Add(new Models.App.Message { LogLevel = Models.App.LogLevel.Error, Text = "Error Get Portfolio Data. Please Contanct System Administrator" }); return(vmBacktesting); } if (cmd.Securities.Count > 0) { _manageBacktestingPortfolios.SelectedPortfolio.ColHandler.ActiveSecs = getFilteredSecByCustomList(cmd); } else { _manageBacktestingPortfolios.SelectedPortfolio.ColHandler.ActiveSecs = getFilteredSecByExchangesAndRisk(colExchanges); } // Run calculation //vmBacktesting = _backtestingHandler.calculateBacktesting(_manageBacktestingPortfolios.SelectedPortfolio, dtStartDate, dtEndDate, cmd.Equity, becnhMarkIDs); vmBacktesting = _backtestingHandler.calculateNewBacktesting(_manageBacktestingPortfolios.SelectedPortfolio, dtStartDate, dtEndDate, cmd.Equity, becnhMarkIDs); // Save portfolio data // Create command to update portfolio + portfolio securities UpdatePortfolioCommand pc = new UpdatePortfolioCommand(); pc.CalcType = cmd.CalcType; pc.Equity = cmd.Equity; pc.PortID = _manageBacktestingPortfolios.SelectedPortfolio.Details.ID; pc.Risk = vmBacktesting.Portfolios[vmBacktesting.PortNumA].Risk; pc.Securities = vmBacktesting.Portfolios[vmBacktesting.PortNumA].Securities; _manageBacktestingPortfolios.UpdatePortfolio(pc, vmBacktesting); return(vmBacktesting); }//calculateBacktesting
private ISecurities getFilteredSecByCustomList(Models.Command.CreatePortfolioCommand cmd) { List <string> missingSecs = new List <string>(); ISecurities newColl = new cSecurities(cPort); for (int i = 0; i < cmd.Securities.Count; i++) { var sec = cPort.ColHandler.Securities.getSecurityByIdNormalSearch(cmd.Securities[i]); if (sec != null) { newColl.Add(sec); } else { missingSecs.Add(cmd.Securities[i]); } } if (missingSecs.Count > 0) { cPort.ColHandler.addMissingSecurities(newColl, missingSecs); } //******************************************************** //IRepository repository; //repository = Resolver.Resolve<IRepository>(); //TopSecuritiesViewModel vm = new TopSecuritiesViewModel(); //repository.Execute(session => //{ // var securities = session.Query<TopSecurities>().Where(x => query.Securities.Contains(x.idSecurity)); // //return AutoMapper.Mapper.Map<List<Models.dbo.Security>>(topSecs); // //TODO: have to do mapping probably // newColl = newColl.GetCustomSecurities(securities); //}); //******************************************************** return(newColl); }