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