Multi-Asset Investment Analyzer

Multi-Asset Investment Analyzer

Model and analyze your investment portfolio based on forward-looking assumptions.

$

Portfolio Allocation

Total Allocation: 100%

${analysisResults.blendedReturn.toFixed(2)}%

Blended Risk

${analysisResults.blendedVolatility.toFixed(2)}%

Initial Investment

${formatter.format(analysisResults.initialInvestment)}

10-Year Projection

${formatter.format(analysisResults.finalValue)}

`; }; const downloadPDF = () => { if (!analysisResults) { alert('Please run an analysis first.'); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const theme = document.querySelector('input[name="theme"]:checked').value; const colors = theme === 'classic' ? { bg: '#047857', text: '#FFFFFF', accent: '#10b981' } : { bg: '#1d4ed8', text: '#FFFFFF', accent: '#3b82f6' }; const page = { width: doc.internal.pageSize.getWidth(), margin: 50 }; let y = 0; // Header doc.setFillColor(colors.bg); doc.rect(0, 0, page.width, 80, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(20); doc.setTextColor(colors.text); doc.text('Multi-Asset Investment Analysis', page.margin, 50); y = 120; // Summary Table doc.setFontSize(14); doc.setTextColor('#333'); doc.text('Portfolio Summary', page.margin, y); y+=20; doc.autoTable({ startY: y, theme: 'grid', headStyles: { fillColor: colors.accent }, body: [ ['Initial Investment', formatter.format(analysisResults.initialInvestment)], ['10-Year Projected Value', formatter.format(analysisResults.finalValue)], ['Blended Annual Return', `${analysisResults.blendedReturn.toFixed(2)}%`], ['Blended Volatility (Risk)', `${analysisResults.blendedVolatility.toFixed(2)}%`] ] }); y = doc.autoTable.previous.finalY + 30; // Allocation Table doc.text('Portfolio Allocation', page.margin, y); y += 20; doc.autoTable({ startY: y, theme: 'striped', headStyles: { fillColor: colors.accent }, head: [['Asset Class', 'Allocation %']], body: analysisResults.portfolio.map(a => [a.name, `${a.allocation.toFixed(1)}%`]) }); y = doc.autoTable.previous.finalY + 20; // Charts if (y > doc.internal.pageSize.getHeight() - 250) { doc.addPage(); y = page.margin; } const allocImg = charts.allocation.toBase64Image(); const projImg = charts.projection.toBase64Image(); doc.addImage(allocImg, 'PNG', page.margin, y, 200, 200); doc.addImage(projImg, 'PNG', page.margin + 220, y, 280, 140); doc.save(`investment-analysis-report.pdf`); }; // --- Event Listeners --- tabs.forEach((tab, index) => tab.addEventListener('click', () => showTab(index))); prevBtn.addEventListener('click', () => navigateTab(-1)); nextBtn.addEventListener('click', () => navigateTab(1)); addAssetBtn.addEventListener('click', () => addAssetRow(Object.keys(ASSET_CLASSES)[0], 0)); analyzeBtn.addEventListener('click', runAnalysis); downloadPdfBtn.addEventListener('click', downloadPDF); // --- Initialization --- showTab(0); createAssumptionsUI(); addAssetRow("US Large Cap Stocks", 60); addAssetRow("US Treasury Bonds", 40); updateTotalAllocation(); });
Scroll to Top