예제 #1
0
        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
예제 #2
0
        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);
        }