Algorithmic Equity Market Liquidity Monitor

Algorithmic Equity Market Liquidity Monitor

No Liquidity Analysis

Complete the input tabs to generate a real-time liquidity assessment.

${analysisText}

`; initialMessage.classList.add('hidden'); resultsContainer.classList.remove('hidden'); pdfButtonContainer.classList.remove('hidden'); }; downloadPdfBtn.addEventListener('click', () => { if (!lastAnalysisData) return; const { jsPDF } = window.jspdf; const { inputs, scores, labels } = lastAnalysisData; const doc = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const pageW = doc.internal.pageSize.getWidth(); const margin = 50; const contentW = pageW - margin * 2; let y = 0; // PDF Header doc.setFillColor('#1e293b'); // slate-800 doc.rect(0, 0, pageW, 70, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(20); doc.setTextColor('#ffffff'); doc.text('Equity Liquidity Report', margin, 45); doc.setFontSize(14); doc.setTextColor('#e2e8f0'); // slate-200 doc.text(`$${inputs.ticker}`, pageW - margin, 45, { align: 'right' }); y = 110; // Score Section const scoreColorHex = { "text-green-600": "#16a34a", "text-blue-600": "#2563eb", "text-yellow-600": "#ca8a04", "text-red-600": "#dc2626" }[labels.scoreColor] || '#64748b'; doc.setLineWidth(8); doc.setDrawColor(scoreColorHex); const radius = 45; const circleX = margin + radius; const circleY = y + radius; doc.circle(circleX, circleY, radius); doc.setFontSize(48); doc.setFont('helvetica', 'bold'); doc.setTextColor(scoreColorHex); doc.text(String(Math.round(scores.overallScore)), circleX, circleY + 15, { align: 'center' }); const textX = margin + (radius * 2) + 20; doc.setFontSize(14); doc.setTextColor('#475569'); // slate-600 doc.text('Overall Liquidity Assessment', textX, y + 25); doc.setFontSize(28); doc.setTextColor(scoreColorHex); doc.text(labels.scoreLabel, textX, y + 55); y += (radius * 2) + 20; // Analysis Text doc.setFont('helvetica', 'normal'); doc.setFontSize(11); doc.setTextColor('#334155'); // slate-700 const summaryLines = doc.splitTextToSize(labels.analysisText, contentW); doc.text(summaryLines, margin, y); y += summaryLines.length * 14 + 30; // Score Breakdown doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor('#1e293b'); doc.text('Component Score Breakdown', margin, y); y += 20; const breakdownData = [ {label: 'Volume Score', score: scores.volumeScore, color: '#64748b'}, {label: 'Spread Score', score: scores.spreadScore, color: '#64748b'}, {label: 'Depth Score', score: scores.depthScore, color: '#64748b'} ]; doc.setDrawColor('#cbd5e1'); // slate-300 doc.setLineWidth(0.5); const tableY = y; doc.line(margin, tableY, pageW - margin, tableY); // Top line breakdownData.forEach(item => { doc.setFontSize(12); doc.setFont('helvetica', 'bold'); doc.setTextColor('#334155'); doc.text(item.label, margin + 10, y + 25); doc.setFontSize(18); doc.setTextColor(item.color); doc.text(`${Math.round(item.score)}/100`, pageW - margin - 10, y + 25, {align: 'right'}); y += 40; doc.line(margin, y, pageW - margin, y); // Separator line }); // Footer const date = `Report Generated: ${new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}`; doc.setFontSize(9); doc.setTextColor('#64748b'); doc.text(date, pageW / 2, doc.internal.pageSize.getHeight() - 20, { align: 'center' }); doc.save(`Liquidity_Report_${inputs.ticker}.pdf`); }); showTab(0); });
Scroll to Top