Пример #1
0
        private AssetSuitability GetManagedFundAssetSuitability()
        {
            var table = new ManagedInvestmentSuitabilityParameters();
            var f0Score = new MICurrentParameter();
            SetF0Score_ManagedInvestment(table, f0Score);
            f0Score.Total = f0Score.FiveYearTotalReturn + f0Score.FiveYearAlphaRatio + f0Score.FiveYearBeta +
                            f0Score.FiveYearInformationRatio
                            + f0Score.FiveYearStandardDeviation + f0Score.FiveYearSkewnessRatio +
                            f0Score.FiveYearTrackingErrorRatio + f0Score.FiveYearSharpRatio
                            + f0Score.GlobalCategory + f0Score.FundSize;

            var f1Score = new MIForecastParameter();
            SetF1Score_ManagedInvestment(table, f1Score);
            f1Score.Total = f1Score.OneYearTotalReturn + f1Score.MorningStarAnalyst + f1Score.OneYearAlpha +
                            f1Score.OneYearBeta
                            + f1Score.OneYearInformationRatio + f1Score.OneYearTrackingError +
                            f1Score.OneYearSharpRatio + f1Score.MaxManagementExpenseRatio
                            + f1Score.PerformanceFee + f1Score.YearsSinceInception;

            return new AssetSuitability
            {
                F1Parameters = f1Score,
                SuitabilityRating = GetRatingScore(f1Score.Total + f0Score.Total),
                F0Parameters = f0Score,
                TotalScore = f1Score.Total + f0Score.Total
            };
        }
Пример #2
0
 private void SetCurrentBetaFiveYearScore_MI(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     if (F0Ratios.BetaFiveYears <= table.Mif0Parameters.Defensive.FiveYearBeta)
     {
         f0Score.FiveYearBeta = table.Mif0Parameters.Defensive.ScoreRanking;
     }
     else if (F0Ratios.BetaFiveYears <= table.Mif0Parameters.Conservative.FiveYearBeta)
     {
         f0Score.FiveYearBeta = table.Mif0Parameters.Conservative.ScoreRanking;
     }
     else if (F0Ratios.BetaFiveYears <= table.Mif0Parameters.Balance.FiveYearBeta)
     {
         f0Score.FiveYearBeta = table.Mif0Parameters.Balance.ScoreRanking;
     }
     else if (F0Ratios.BetaFiveYears <= table.Mif0Parameters.Assertive.FiveYearBeta)
     {
         f0Score.FiveYearBeta = table.Mif0Parameters.Assertive.ScoreRanking;
     }
     else
     {
         f0Score.FiveYearBeta = table.Mif0Parameters.Aggressive.ScoreRanking;
     }
 }
Пример #3
0
 private void SetForecastYearSinceInceptionScore_MI(ManagedInvestmentSuitabilityParameters table,
     MIForecastParameter f1Score)
 {
     var yearsSinceInception = F1Recommendation.YearsSinceInception;
     if (yearsSinceInception.HasValue)
     {
         if (yearsSinceInception.Value >= table.Mif1Parameters.Defensive.YearsSinceInception)
         {
             f1Score.YearsSinceInception = table.Mif1Parameters.Defensive.ScoreRanking;
         }
         else if (yearsSinceInception.Value >= table.Mif1Parameters.Conservative.YearsSinceInception)
         {
             f1Score.YearsSinceInception = table.Mif1Parameters.Conservative.ScoreRanking;
         }
         else if (yearsSinceInception.Value >= table.Mif1Parameters.Balance.YearsSinceInception)
         {
             f1Score.YearsSinceInception = table.Mif1Parameters.Balance.ScoreRanking;
         }
         else if (yearsSinceInception.Value >= table.Mif1Parameters.Assertive.YearsSinceInception)
         {
             f1Score.YearsSinceInception = table.Mif1Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f1Score.YearsSinceInception = table.Mif1Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "Years since inception for forecast recommendation is not populated for current asset, which is of type managed fund.");
     }
 }
Пример #4
0
 private void SetForecastPerformanceFeeScore_MI(ManagedInvestmentSuitabilityParameters table,
     MIForecastParameter f1Score)
 {
     var performanceFee = F1Recommendation.PerformanceFee;
     if (performanceFee.HasValue)
     {
         if (performanceFee.Value <= table.Mif1Parameters.Defensive.PerformanceFee)
         {
             f1Score.PerformanceFee = table.Mif1Parameters.Defensive.ScoreRanking;
         }
         else if (performanceFee.Value <= table.Mif1Parameters.Conservative.PerformanceFee)
         {
             f1Score.PerformanceFee = table.Mif1Parameters.Conservative.ScoreRanking;
         }
         else if (performanceFee.Value <= table.Mif1Parameters.Balance.PerformanceFee)
         {
             f1Score.PerformanceFee = table.Mif1Parameters.Balance.ScoreRanking;
         }
         else if (performanceFee.Value <= table.Mif1Parameters.Assertive.PerformanceFee)
         {
             f1Score.PerformanceFee = table.Mif1Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f1Score.PerformanceFee = table.Mif1Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "Performance fee for forecast recommendation is not populated for current asset, which is of type managed fund.");
     }
 }
Пример #5
0
 private void SetForecastOneYearTrackingErrorScore_MI(ManagedInvestmentSuitabilityParameters table,
     MIForecastParameter f1Score)
 {
     var oneYearTrackingError = F1Recommendation.OneYearTrackingError;
     if (oneYearTrackingError.HasValue)
     {
         if (oneYearTrackingError.Value >= table.Mif1Parameters.Defensive.OneYearTrackingError)
         {
             f1Score.OneYearTrackingError = table.Mif1Parameters.Defensive.ScoreRanking;
         }
         else if (oneYearTrackingError.Value >= table.Mif1Parameters.Conservative.OneYearTrackingError)
         {
             f1Score.OneYearTrackingError = table.Mif1Parameters.Conservative.ScoreRanking;
         }
         else if (oneYearTrackingError.Value >= table.Mif1Parameters.Balance.OneYearTrackingError)
         {
             f1Score.OneYearTrackingError = table.Mif1Parameters.Balance.ScoreRanking;
         }
         else if (oneYearTrackingError.Value >= table.Mif1Parameters.Assertive.OneYearTrackingError)
         {
             f1Score.OneYearTrackingError = table.Mif1Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f1Score.OneYearTrackingError = table.Mif1Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "One Year tracking error for forecast recommendation is not populated for current asset, which is of type managed fund.");
     }
 }
Пример #6
0
 private void SetForecastMorningstarAnalystScore_MI(MIForecastParameter f1Score,
     ManagedInvestmentSuitabilityParameters table)
 {
     if (F1Recommendation.MorningStarAnalyst == MorningStarAnalyst.Gold)
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Defensive.ScoreRanking;
     }
     else if (F1Recommendation.MorningStarAnalyst == MorningStarAnalyst.Silver)
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Conservative.ScoreRanking;
     }
     else if (F1Recommendation.MorningStarAnalyst == MorningStarAnalyst.Bronze)
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Balance.ScoreRanking;
     }
     else if (F1Recommendation.MorningStarAnalyst == MorningStarAnalyst.Neutral)
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Assertive.ScoreRanking;
     }
     else if (F1Recommendation.MorningStarAnalyst == MorningStarAnalyst.Negative)
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Aggressive.ScoreRanking;
     }
     else
     {
         f1Score.MorningStarAnalyst = table.Mif1Parameters.Aggressive.ScoreRanking*20;
     }
 }
Пример #7
0
 private void SetForecastMaxManagementExpenseRatioScore_MI(ManagedInvestmentSuitabilityParameters table,
     MIForecastParameter f1Score)
 {
     var maxManagementExpenseRatio = F1Recommendation.MaxManagementExpenseRatio;
     if (maxManagementExpenseRatio.HasValue)
     {
         if (maxManagementExpenseRatio.Value <= table.Mif1Parameters.Defensive.MaxManagementExpenseRatio)
         {
             f1Score.MaxManagementExpenseRatio = table.Mif1Parameters.Defensive.ScoreRanking;
         }
         else if (maxManagementExpenseRatio.Value <=
                  table.Mif1Parameters.Conservative.MaxManagementExpenseRatio)
         {
             f1Score.MaxManagementExpenseRatio = table.Mif1Parameters.Conservative.ScoreRanking;
         }
         else if (maxManagementExpenseRatio.Value <= table.Mif1Parameters.Balance.MaxManagementExpenseRatio)
         {
             f1Score.MaxManagementExpenseRatio = table.Mif1Parameters.Balance.ScoreRanking;
         }
         else if (maxManagementExpenseRatio.Value <= table.Mif1Parameters.Assertive.MaxManagementExpenseRatio)
         {
             f1Score.MaxManagementExpenseRatio = table.Mif1Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f1Score.MaxManagementExpenseRatio = table.Mif1Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "Max management expense ratio for forecast recommendation is not populated for current asset, which is of type managed fund.");
     }
 }
Пример #8
0
 private void SetF1Score_ManagedInvestment(ManagedInvestmentSuitabilityParameters table,
     MIForecastParameter f1Score)
 {
     SetForecastOneYearReturnScore_MI(table, f1Score);
     SetForecastMorningstarAnalystScore_MI(f1Score, table);
     SetForecastOneYearAlphaScore_MI(table, f1Score);
     SetForecastOneYearBetaScore_MI(table, f1Score);
     SetForecastOneYearInformationScore_MI(table, f1Score);
     SetForecastOneYearTrackingErrorScore_MI(table, f1Score);
     SetForecastOneYearSharpRatioScore_MI(table, f1Score);
     SetForecastMaxManagementExpenseRatioScore_MI(table, f1Score);
     SetForecastPerformanceFeeScore_MI(table, f1Score);
     SetForecastYearSinceInceptionScore_MI(table, f1Score);
 }
Пример #9
0
 private void SetF0Score_ManagedInvestment(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     SetCurrentFiveYearReturnScore_MI(table, f0Score);
     SetCurrentFiveYearAlphaRatioScore_MI(table, f0Score);
     SetCurrentBetaFiveYearScore_MI(table, f0Score);
     SetCurrentFiveYearAlphaRatio_MI(table, f0Score);
     SetCurrentFiveYearInfomrationScore_MI(table, f0Score);
     SetCurrentFiveYearStandardDeviationScore_MI(table, f0Score);
     SetCurrentFiveYearSkewnessRatioScore_MI(table, f0Score);
     SetCurrentFiveYearTrackingErrorRatioScore_MI(table, f0Score);
     SetCurrentFiveYearSharpRatioScore_MI(table, f0Score);
     SetCurrentGlobalCategoryScore_MI(table, f0Score);
     SetCurrentFundsizeScore_MI(table, f0Score);
 }
Пример #10
0
 private void SetCurrentGlobalCategoryScore_MI(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     var globalCategory = F0Ratios.GlobalCategory;
     if (globalCategory.HasValue)
     {
         if (globalCategory.Value >= table.Mif0Parameters.Defensive.GlobalCategory)
         {
             f0Score.GlobalCategory = table.Mif0Parameters.Defensive.ScoreRanking;
         }
         else if (globalCategory.Value >= table.Mif0Parameters.Conservative.GlobalCategory)
         {
             f0Score.GlobalCategory = table.Mif0Parameters.Conservative.ScoreRanking;
         }
         else if (globalCategory.Value >= table.Mif0Parameters.Balance.GlobalCategory)
         {
             f0Score.GlobalCategory = table.Mif0Parameters.Balance.ScoreRanking;
         }
         else if (globalCategory.Value >= table.Mif0Parameters.Assertive.GlobalCategory)
         {
             f0Score.GlobalCategory = table.Mif0Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f0Score.GlobalCategory = table.Mif0Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception("Global Category is not populated for current asset, which is of type managed fund");
     }
 }
Пример #11
0
 private void SetCurrentFundsizeScore_MI(ManagedInvestmentSuitabilityParameters table, MICurrentParameter f0Score)
 {
     var fundSize = F0Ratios.FundSize;
     if (fundSize.HasValue)
     {
         if (fundSize.Value >= table.Mif0Parameters.Defensive.FundSize)
         {
             f0Score.FundSize = table.Mif0Parameters.Defensive.ScoreRanking;
         }
         else if (fundSize.Value >= table.Mif0Parameters.Conservative.FundSize)
         {
             f0Score.FundSize = table.Mif0Parameters.Conservative.ScoreRanking;
         }
         else if (fundSize.Value >= table.Mif0Parameters.Balance.FundSize)
         {
             f0Score.FundSize = table.Mif0Parameters.Balance.ScoreRanking;
         }
         else if (fundSize.Value >= table.Mif0Parameters.Assertive.FundSize)
         {
             f0Score.FundSize = table.Mif0Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f0Score.FundSize = table.Mif0Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception("Fund Size is not populated for current asset, which is of type managed fund");
     }
 }
Пример #12
0
 private void SetCurrentFiveYearTrackingErrorRatioScore_MI(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     var fiveYearTrackingErrorRatio = F0Ratios.FiveYearTrackingErrorRatio;
     if (fiveYearTrackingErrorRatio.HasValue)
     {
         if (fiveYearTrackingErrorRatio.Value >= table.Mif0Parameters.Defensive.FiveYearTrackingErrorRatio)
         {
             f0Score.FiveYearTrackingErrorRatio = table.Mif0Parameters.Defensive.ScoreRanking;
         }
         else if (fiveYearTrackingErrorRatio.Value >=
                  table.Mif0Parameters.Conservative.FiveYearTrackingErrorRatio)
         {
             f0Score.FiveYearTrackingErrorRatio = table.Mif0Parameters.Conservative.ScoreRanking;
         }
         else if (fiveYearTrackingErrorRatio.Value >= table.Mif0Parameters.Balance.FiveYearTrackingErrorRatio)
         {
             f0Score.FiveYearTrackingErrorRatio = table.Mif0Parameters.Balance.ScoreRanking;
         }
         else if (fiveYearTrackingErrorRatio.Value >=
                  table.Mif0Parameters.Assertive.FiveYearTrackingErrorRatio)
         {
             f0Score.FiveYearTrackingErrorRatio = table.Mif1Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f0Score.FiveYearTrackingErrorRatio = table.Mif0Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "Five year tracking error ratio is not populated for current asset, which is of type managed fund");
     }
 }
Пример #13
0
 private void SetCurrentFiveYearStandardDeviationScore_MI(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     var fiveYearStandardDeviation = F0Ratios.FiveYearStandardDeviation;
     if (fiveYearStandardDeviation.HasValue)
     {
         if (fiveYearStandardDeviation.Value >= table.Mif0Parameters.Defensive.FiveYearStandardDeviation)
         {
             f0Score.FiveYearStandardDeviation = table.Mif0Parameters.Defensive.ScoreRanking;
         }
         else if (fiveYearStandardDeviation.Value >=
                  table.Mif0Parameters.Conservative.FiveYearStandardDeviation)
         {
             f0Score.FiveYearStandardDeviation = table.Mif0Parameters.Conservative.ScoreRanking;
         }
         else if (fiveYearStandardDeviation.Value >= table.Mif0Parameters.Balance.FiveYearStandardDeviation)
         {
             f0Score.FiveYearStandardDeviation = table.Mif0Parameters.Balance.ScoreRanking;
         }
         else if (fiveYearStandardDeviation.Value >= table.Mif0Parameters.Assertive.FiveYearStandardDeviation)
         {
             f0Score.FiveYearStandardDeviation = table.Mif0Parameters.Assertive.ScoreRanking;
         }
         else
         {
             f0Score.FiveYearStandardDeviation = table.Mif0Parameters.Aggressive.ScoreRanking;
         }
     }
     else
     {
         throw new Exception(
             "Five year standard deviation is not populated for current asset, which is of type managed fund");
     }
 }
Пример #14
0
 private void SetCurrentFiveYearReturnScore_MI(ManagedInvestmentSuitabilityParameters table,
     MICurrentParameter f0Score)
 {
     if (F0Ratios.FiveYearReturn >= table.Mif0Parameters.Defensive.FiveYearTotalReturn)
     {
         f0Score.FiveYearTotalReturn = table.Mif0Parameters.Defensive.ScoreRanking;
     }
     else if (F0Ratios.FiveYearReturn >= table.Mif0Parameters.Conservative.FiveYearTotalReturn)
     {
         f0Score.FiveYearTotalReturn = table.Mif0Parameters.Conservative.ScoreRanking;
     }
     else if (F0Ratios.FiveYearReturn >= table.Mif0Parameters.Balance.FiveYearTotalReturn)
     {
         f0Score.FiveYearTotalReturn = table.Mif0Parameters.Balance.ScoreRanking;
     }
     else if (F0Ratios.FiveYearReturn >= table.Mif0Parameters.Assertive.FiveYearTotalReturn)
     {
         f0Score.FiveYearTotalReturn = table.Mif0Parameters.Assertive.ScoreRanking;
     }
     else
     {
         f0Score.FiveYearTotalReturn = table.Mif0Parameters.Aggressive.ScoreRanking;
     }
 }