AI-Based Multi-Manager Fund Selection Tool

AI-Based Multi-Manager Fund Selection Tool

Desired Asset Allocation (%)

AI-Based Multi-Manager Fund Selection Report

Portfolio Setup
ParameterValue
Initial Investment Capital
Risk Tolerance
Investment Horizon
Number of Funds to Select

Desired Asset Allocation

Asset ClassAllocation (%)
Equity
Bonds
Alternatives
Fund Criteria Weighting
CriterionWeight (1-100)
Historical Performance (5-Year Annualized Return)
Expense Ratio
Manager Tenure (Years)
ESG Score
Volatility (Standard Deviation)
Liquidity (Daily/Weekly/Monthly)
Top Recommended Funds
Multi-Manager Portfolio Summary
Metric Value

Note: This report provides hypothetical fund selections and simulated portfolio summaries based on user-defined criteria. It does not constitute financial advice or real-time market data. Past performance is not indicative of future results.

No funds recommended. Adjust criteria or run selection.

'; } else { let fundsHtml = ''; selectedFunds.forEach((fund, index) => { fundsHtml += ` `; }); fundsHtml += '
RankFund NameAsset Class5-Yr ReturnExp. RatioMgr. TenureESG ScoreVolatilityLiquidity
${index + 1} ${fund.name} ${fund.assetClass} ${fund.fiveYearReturn.toFixed(2)}% ${fund.expenseRatio.toFixed(2)}% ${fund.managerTenure} yrs ${fund.esgScore} ${fund.volatility.toFixed(2)}% ${fund.liquidity}
'; recommendedFundsContainer.innerHTML = fundsHtml; } // Display Portfolio Summary document.getElementById('summaryInitialCapital').innerText = `$${portfolioParams.initialCapital ? portfolioParams.initialCapital.toLocaleString('en-US', {minimumFractionDigits: 2}) : '0.00'}`; document.getElementById('summaryEquityAllocation').innerText = `${portfolioParams.equityAllocation ? portfolioParams.equityAllocation : 0}%`; document.getElementById('summaryBondAllocation').innerText = `${portfolioParams.bondAllocation ? portfolioParams.bondAllocation : 0}%`; document.getElementById('summaryAlternativeAllocation').innerText = `${portfolioParams.alternativeAllocation ? portfolioParams.alternativeAllocation : 0}%`; document.getElementById('summaryAvgReturn').innerText = `${portfolioSummary.avgReturn.toFixed(2)}%`; document.getElementById('summaryAvgExpenseRatio').innerText = `${portfolioSummary.avgExpenseRatio.toFixed(2)}%`; document.getElementById('summaryAvgManagerTenure').innerText = `${portfolioSummary.avgManagerTenure.toFixed(1)} yrs`; } // --- PDF Download Function --- window.downloadPdf = async function() { // Populate PDF content div document.getElementById('pdfInitialCapital').innerText = `$${portfolioParams.initialCapital ? portfolioParams.initialCapital.toLocaleString('en-US', {minimumFractionDigits: 2}) : '0.00'}`; document.getElementById('pdfRiskTolerance').innerText = portfolioParams.riskTolerance; document.getElementById('pdfInvestmentHorizon').innerText = portfolioParams.investmentHorizon; document.getElementById('pdfNumFunds').innerText = portfolioParams.numFunds; document.getElementById('pdfEquityAllocation').innerText = `${portfolioParams.equityAllocation}%`; document.getElementById('pdfBondAllocation').innerText = `${portfolioParams.bondAllocation}%`; document.getElementById('pdfAlternativeAllocation').innerText = `${portfolioParams.alternativeAllocation}%`; document.getElementById('pdfWeightPerformance').innerText = criteriaWeights.performance; document.getElementById('pdfWeightExpenseRatio').innerText = criteriaWeights.expenseRatio; document.getElementById('pdfWeightManagerTenure').innerText = criteriaWeights.managerTenure; document.getElementById('pdfWeightESGScore').innerText = criteriaWeights.esgScore; document.getElementById('pdfWeightVolatility').innerText = criteriaWeights.volatility; document.getElementById('pdfWeightLiquidity').innerText = criteriaWeights.liquidity; // Clone and populate recommended funds table for PDF const pdfRecommendedFundsDiv = document.getElementById('pdfRecommendedFundsContainer'); if (selectedFunds.length === 0) { pdfRecommendedFundsDiv.innerHTML = '

No funds were recommended based on the current criteria.

'; } else { const recommendedFundsTable = recommendedFundsContainer.querySelector('table'); if (recommendedFundsTable) { pdfRecommendedFundsDiv.innerHTML = recommendedFundsTable.outerHTML; // Adjust table styles for PDF const pdfTable = pdfRecommendedFundsDiv.querySelector('table'); if (pdfTable) { pdfTable.classList.add('pdf-table'); // Apply PDF specific table styles } } else { pdfRecommendedFundsDiv.innerHTML = '

Error capturing recommended funds table.

'; } } // Clone and populate portfolio summary table for PDF const pdfPortfolioSummaryBody = document.getElementById('pdfPortfolioSummaryResults').getElementsByTagName('tbody')[0]; pdfPortfolioSummaryBody.innerHTML = portfolioSummaryResultsTbody.innerHTML; const pdfSummaryTable = document.getElementById('pdfPortfolioSummaryResults'); if (pdfSummaryTable) { pdfSummaryTable.classList.add('pdf-table'); // Apply PDF specific table styles } // Show the hidden pdfContent div temporarily for html2canvas const pdfContentDiv = document.getElementById('pdfContent'); pdfContentDiv.style.display = 'block'; const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'pt', 'a4'); // 'p' for portrait, 'pt' for points, 'a4' size // Capture the content as an image using html2canvas await html2canvas(pdfContentDiv, { scale: 2, // Increase scale for better resolution useCORS: true, // Enable cross-origin image loading (if any) logging: false // Disable logging for cleaner console }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const imgWidth = doc.internal.pageSize.getWidth(); // A4 width in points const pageHeight = doc.internal.pageSize.getHeight(); // A4 height in points const imgHeight = canvas.height * imgWidth / canvas.width; let heightLeft = imgHeight; let position = 0; // Add image to PDF, potentially across multiple pages doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); heightLeft -= pageHeight; while (heightLeft >= 0) { position = heightLeft - imgHeight; doc.addPage(); doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); heightLeft -= pageHeight; } doc.save('Multi_Manager_Fund_Selection_Report.pdf'); }); // Hide the pdfContent div again pdfContentDiv.style.display = 'none'; } // --- Initialization --- showTab('portfolio-setup'); // Show the first tab on load validateAllocation(); // Initial validation check for allocation sum generateHypotheticalFunds(); // Generate initial set of hypothetical funds on load });
Scroll to Top