Example #1
0
        public OptimalPortoliosViewModel CreatePortfolio(User user, CreatePortfolioCommand cmd)
        {
            if (cmd.CalcType == enumEfCalculationType.Custom && cmd.Exchanges.Count < 1)
            {
                for (int i = 0; i < user.Licence.Stocks.Count; i++)
                {
                    cmd.Exchanges.Add(Convert.ToInt32(user.Licence.Stocks[i].id));
                }
            }

            OptimalPortoliosViewModel vm = new OptimalPortoliosViewModel();
            var portID = 0;
            var count  = cPortHandler.GetPortfolioCount(user.UserID);

            if (count < user.Licence.Service.Iportfolios)
            {
                portID = cPortHandler.CreateDefaultPortfolio(user, cmd);
            }
            else
            {
                vm.Messages.Add(new Message {
                    LogLevel = LogLevel.Error, Text = "You've exceeded the number of portfolios you can create. Please delete any unwanted portfolios"
                });
            }
            if (portID > 0)
            {
                vm = opService.GetPortfolioOptimazation(user, new Models.Queries.OptimazationQuery
                {
                    CalcType   = cmd.CalcType,
                    PortID     = portID,
                    Securities = cmd.Securities,
                    Exchanges  = cmd.Exchanges,
                    Risk       = cmd.Risk //LR on 18/07/18
                });
                if (vm.Messages.Count == 0)
                {
                    cPortHandler.SelectedPortfolio.Details.LastOptimization = DateTime.Today;
                    cPortHandler.SelectedPortfolio.Details.SecsNum          = vm.Portfolios[vm.PortNumA].Securities.Count;
                    cPortHandler.SelectedPortfolio.Details.CurrentStDev     = vm.Portfolios[vm.PortNumA].Risk;
                    UpdatePortfolioCommand updCmd = new UpdatePortfolioCommand
                    {
                        CalcType   = cPortHandler.SelectedPortfolio.Details.CalcType,
                        Equity     = cmd.Equity,
                        Risk       = vm.Portfolios[vm.PortNumA].Risk,
                        PortID     = portID,
                        Securities = vm.Portfolios[vm.PortNumA].Securities
                    };
                    cPortHandler.UpdatePortfolio(updCmd);
                }
                else
                {
                    cPortHandler.DeletePortfolio(portID);
                }
            }

            return(vm);
        }
Example #2
0
        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
Example #3
0
        }//initMainVars

        #endregion Constructors, Initialization & Destructor

        #region Methods

        #region Calculation methods

        public OptimalPortoliosViewModel calculateNewEfficientFrontier(ref ISecurities cSecsCol, ISecurities cBenchmarksCol, cDateRange drCalcRange, Boolean isClearDisabled, Boolean isBacktest)
        { // Calculates the Efficient Frontier including the rates vector and covariance matrix
            /// Parameters: cSecsCol - collection of securities for optimization
            /// drCalcRange - date range for calculation
            OptimalPortoliosViewModel vmOptimal = new OptimalPortoliosViewModel();

            try
            {
                //m_colSecurities = cSecsCol;

                if (cSecsCol.Count > 0)
                { // Data exists for calculations
                    if (isClearDisabled)
                    {
                        m_objColHandler.DisabledSecs.Clear();
                    }

                    // Calculate covariance
                    m_objPortfolio.Classes.CovarCorrel.calcRiskAndCovariance(drCalcRange, ref cBenchmarksCol, false, isBacktest);
                    m_arrCovarData = m_objPortfolio.Classes.CovarCorrel.calcRiskAndCovariance(drCalcRange, ref cSecsCol, true, isBacktest);
                    //m_colSecurities = cSecsCol;

                    // Calculate optimal portfolios
                    runEfficientFrontierModule(cSecsCol);
                    setStartingRiskLevel();
                    setSecuritiesQuantities(cSecsCol);
                    setSecuritiesDatatable(cSecsCol);   // In case of Backtesting there is no need to call this function


                    //m_objCovarCalcs.reportCovarianceMatrix(cSecsCol, m_dtSecsData, Portfolios[PortNumA], m_objPortfolio.Details.Equity, isBacktest);
                    //m_objCovarCalcs.reportCovarianceMatrix(cSecsCol, m_dtSecsData, Portfolios[0], m_objPortfolio.Details.Equity, isBacktest);
                }
            } catch (Exception ex) {
                m_objErrorHandler.LogInfo(ex);
            }

            setCalcSuccess();

            if (!m_isSuccessfulCalc)
            {
                vmOptimal.Messages.Add(new Models.App.Message {
                    Text = "Failed to calculate due to: " + m_strEngineErrors, LogLevel = Models.App.LogLevel.Fatal
                });
            }
            else
            {
                vmOptimal             = AutoMapper.Mapper.Map <OptimalPortoliosViewModel>(m_objPortfolio.Classes.Optimizer);
                vmOptimal.PortID      = m_objPortfolio.Details.ID;
                vmOptimal.PortDetails = m_objPortfolio.Details;

                for (int iPorts = 0; iPorts < vmOptimal.Portfolios.Count; iPorts++)
                {
                    for (int iSecs = 0; iSecs < vmOptimal.Portfolios[iPorts].Securities.Count; iSecs++)
                    {                                                                           // Securities displayed on page
                        vmOptimal.Portfolios[iPorts].Securities[iSecs].StdYield          *= Math.Sqrt(52);
                        vmOptimal.Portfolios[iPorts].Securities[iSecs].FinalRate         *= 52; //vmOptimal.PortNumA
                        vmOptimal.Portfolios[iPorts].Securities[iSecs].StandardDeviation *= 1;
                    }
                }
            }
            return(vmOptimal);
        }//calculateNewEfficientFrontier