Portfolio Diversification Analyzer
Enter the percentage of your portfolio allocated to each asset class. The total must sum to 100%.
Your Portfolio Allocation
Diversification Analysis
Enter your portfolio allocations above and click "Analyze Diversification" to get insights.
Concentrated: Your portfolio has a significant allocation to ${leadingAsset} (${maxPercentage.toFixed(1)}%). While not extremely concentrated, you might consider further diversification to reduce asset-specific risk.
`; analysisResult.classList.add('concentrated'); } else if (diversifiedCount >= 3 && maxPercentage < 40) { analysisText.innerHTML = `Well Diversified: Your portfolio shows a good level of diversification across multiple asset classes, with no single asset class dominating. This generally indicates a more balanced risk profile.
`; analysisResult.classList.add('well-diversified'); } else { analysisText.innerHTML = `Needs Attention: Your portfolio is not adequately diversified across a sufficient number of asset classes. Consider allocating to more distinct types of investments.
`; analysisResult.classList.add('concentrated'); // Use concentrated as a default for "needs attention" } } // --- Event Listeners --- // Listen to all input changes to update total percentage instantly assetClasses.forEach(asset => { if (asset.input) { // Robust null check asset.input.addEventListener('input', updateTotals); } }); if (calculateButton) { // Robust null check calculateButton.type = "button"; // Ensure button type is "button" calculateButton.addEventListener('click', function() { const data = assetClasses.map(asset => ({ name: asset.name, value: parseFloat(asset.input.value) || 0, color: asset.color })); drawPieChart(data); analyzeDiversification(data); }); } if (resetButton) { // Robust null check resetButton.type = "button"; // Ensure button type is "button" resetButton.addEventListener('click', function() { // Reset all inputs to 0 assetClasses.forEach(asset => { if (asset.input) { // Robust null check asset.input.value = "0"; } }); // Set initial values for demo (optional, or truly reset to 0) if (stocksInput) stocksInput.value = "50"; if (bondsInput) bondsInput.value = "30"; if (realEstateInput) realEstateInput.value = "10"; if (commoditiesInput) commoditiesInput.value = "5"; if (cashInput) cashInput.value = "5"; updateTotals(); // Recalculate total percentage // Clear chart and analysis if (pieChartSvg) pieChartSvg.innerHTML = ''; if (chartLegend) chartLegend.innerHTML = ''; if (analysisText) { analysisText.textContent = 'Enter your portfolio allocations above and click "Analyze Diversification" to get insights.'; analysisResult.classList.remove('well-diversified', 'concentrated', 'highly-concentrated'); analysisResult.classList.add('analysis-result'); // Ensure base class is present } }); } // PDF Download Functionality if (downloadPdfButton) { // Robust null check downloadPdfButton.type = "button"; // Ensure button type is "button" downloadPdfButton.addEventListener('click', function() { if (!diversificationAnalyzerTool) return; // Robust null check // Create a container for the PDF content const pdfContentWrapper = document.createElement('div'); pdfContentWrapper.className = 'pdf-output-content'; // Add title const pdfTitle = document.createElement('h2'); pdfTitle.textContent = "Portfolio Diversification Analysis"; pdfContentWrapper.appendChild(pdfTitle); // Add a table of inputs const inputTableTitle = document.createElement('h3'); inputTableTitle.textContent = "Your Asset Allocation"; pdfContentWrapper.appendChild(inputTableTitle); const inputTable = document.createElement('table'); inputTable.className = 'input-table-for-pdf'; inputTable.innerHTML = `