private ISecurities getFilteredSecByExchangesAndRisk(OptimazationQuery query) { ISecurities newColl = new cSecurities(cPort); for (int i = 0; i < cPort.ColHandler.Securities.Count; i++) { //if (cPort.ColHandler.Securities[i].StdYield * Math.Sqrt(52) <= query.Risk && query.Exchanges.Contains(cPort.ColHandler.Securities[i].Properties.Market.ID)) if (query.Exchanges.Contains(cPort.ColHandler.Securities[i].Properties.Market.ID)) { if (query.Risk > 0.14 || (query.Risk <= 0.14 && cPort.ColHandler.Securities[i].RatesClass.PriceReturns.Count > 105)) { newColl.Add(cPort.ColHandler.Securities[i]); } } } return(newColl); }
public OptimalPortoliosViewModel GetPortfolioOptimazation(User user, OptimazationQuery query) { OptimalPortoliosViewModel vm = new OptimalPortoliosViewModel(); cPort.openExistingPortfolio(query.PortID, false); lock (lockObject) { var stocks = query.Exchanges != null && query.Exchanges.Count > 0 && query.Exchanges.Count <= user.Licence.Stocks.Count ? query.Exchanges : user.Licence.Stocks.Select(t => t.id).ToList(); //if (!cPort.instantiatePortfolioVariables(true, cPort.Details.CalcCurrency, stocks , query.Securities)) if (!cPort.instantiateVariablesForPortfolio(true, cPort.Details.CalcCurrency, stocks, query.Securities)) { vm.Messages.Add(new Models.App.Message { LogLevel = Models.App.LogLevel.Error, Text = "Error Get Portfolio Data. Please Contanct System Administrator" }); } else { cPort.ColHandler.setDisabledSecsToActive(); if (query.Securities.Count > 0) { cPort.ColHandler.ActiveSecs = getFilteredSecByCustomList(query); //custom portfolio build } else // filter Active securities from Securities by exchangesIds and risk level: sec.stdYield { cPort.ColHandler.ActiveSecs = getFilteredSecByExchangesAndRisk(query); } cPort.Details.CalcType = query.CalcType; // cPort.Classes.Optimizer.SecuritiesCol = cPort.ColHandler.ActiveSecs; ISecurities cSecsCol = cPort.ColHandler.ActiveSecs; //vm = cPort.Classes.Optimizer.calculateNewEfficientFrontier(ref cSecsCol, cPort.ColHandler.Benchmarks, new cDateRange(DateTime.Today.AddYears(-cProperties.DatesInterval), DateTime.Today), true, false); vm = cPort.Classes.Optimizer.calculateNewEfficientFrontier(ref cSecsCol, cPort.ColHandler.Benchmarks, new cDateRange(DateTime.Today.AddYears(-3).AddDays(-1), DateTime.Today.AddDays(-1)), true, false); cPort.ColHandler.ActiveSecs = cSecsCol; } } return(vm); }//GetPortfolioOptimazation
}//GetPortfolioOptimazation private ISecurities getFilteredSecByCustomList(OptimazationQuery query) { List <string> missingSecs = new List <string>(); ISecurities newColl = new cSecurities(cPort); for (int i = 0; i < query.Securities.Count; i++) { var sec = cPort.ColHandler.Securities.getSecurityByIdNormalSearch(query.Securities[i]); if (sec != null) { newColl.Add(sec); } else { missingSecs.Add(query.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); }