示例#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
            };
        }
 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;
     }
 }
        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.");
            }
        }
        private void SetForecastOneYearAlphaScore_MI(ManagedInvestmentSuitabilityParameters table,
                                                     MIForecastParameter f1Score)
        {
            var oneYearAlpha = F1Recommendation.OneYearAlpha;

            if (oneYearAlpha.HasValue)
            {
                if (oneYearAlpha.Value >= table.Mif1Parameters.Defensive.OneYearAlpha)
                {
                    f1Score.OneYearAlpha = table.Mif1Parameters.Defensive.ScoreRanking;
                }
                else if (oneYearAlpha.Value >= table.Mif1Parameters.Conservative.OneYearAlpha)
                {
                    f1Score.OneYearAlpha = table.Mif1Parameters.Conservative.ScoreRanking;
                }
                else if (oneYearAlpha.Value >= table.Mif1Parameters.Balance.OneYearAlpha)
                {
                    f1Score.OneYearAlpha = table.Mif1Parameters.Balance.ScoreRanking;
                }
                else if (oneYearAlpha.Value >= table.Mif1Parameters.Assertive.OneYearAlpha)
                {
                    f1Score.OneYearAlpha = table.Mif1Parameters.Assertive.ScoreRanking;
                }
                else
                {
                    f1Score.OneYearAlpha = table.Mif1Parameters.Aggressive.ScoreRanking;
                }
            }
            else
            {
                throw new Exception(
                          "One Year Alpha for forecast recommendation is not populated for current asset, which is of type managed fund.");
            }
        }
        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
            });
        }
        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.");
            }
        }
        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.");
            }
        }
 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 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.");
     }
 }
示例#10
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.");
     }
 }
示例#11
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.");
     }
 }
示例#12
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;
     }
 }
示例#13
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.");
     }
 }
示例#14
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);
 }