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 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; } }
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 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 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."); } }
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 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 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); }
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); }
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"); } }
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"); } }
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"); } }
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"); } }
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; } }