Crypto Market Trend & Whale Activity Forecaster

Crypto Market Trend & Whale Activity Forecaster

Analyze on-chain data and market sentiment to forecast market direction.

Market & Regulatory Environment

Select the primary asset and the prevailing sentiment indicators.

AI Forecast for: ${assetName}

${info.name}

${info.description}

Calculated AI Trend Score

${score.toFixed(2)}

AI Rationale:

    ${reasons.map(reason => `
  • ${reason.text}
  • `).join('')}
`; } window.changeTab = (tabNumber) => { currentTab = tabNumber; elements.tabContents.forEach((content, index) => content.classList.toggle('hidden', (index + 1) !== currentTab)); elements.tabButtons.forEach((button, index) => button.classList.toggle('active', (index + 1) === currentTab)); if (currentTab === totalTabs) renderForecast(); updateNavButtons(); }; const navigateTabs = (direction) => changeTab(currentTab + direction); const updateNavButtons = () => { elements.prevButton.disabled = currentTab === 1; elements.nextButton.disabled = currentTab === totalTabs; elements.nextButton.textContent = currentTab === totalTabs ? "Finish" : "Next"; }; window.downloadPDF = async () => { if (typeof window.jspdf === 'undefined' || typeof window.html2canvas === 'undefined') { alert('PDF generation library not loaded.'); return; } const { jsPDF } = window.jspdf; if (!elements.pdfContent) return; try { const canvas = await html2canvas(elements.pdfContent, { scale: 2, backgroundColor: '#ffffff' }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const contentWidth = pdf.internal.pageSize.getWidth() - 20; const contentHeight = (canvas.height * contentWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 10, 10, contentWidth, contentHeight); const asset = elements.primaryAsset.value; pdf.save(`AI_Crypto_Forecast_${asset}.pdf`); } catch (error) { console.error('Error generating PDF:', error); alert('An error occurred while generating the PDF.'); } }; if (elements.prevButton && elements.nextButton) { elements.prevButton.addEventListener('click', () => navigateTabs(-1)); elements.nextButton.addEventListener('click', () => navigateTabs(1)); changeTab(1); } else { console.error("Critical navigation elements missing."); } });
Scroll to Top