RSI (Relative Strength Index) Calculator
Each line represents a consecutive period (e.g., daily, weekly, monthly).
Commonly 14. Must be less than the number of data points.
RSI Calculation Results
| Index | Price ($) | Change ($) | Gain ($) | Loss ($) | Avg Gain ($) | Avg Loss ($) | RS | RSI |
|---|
No results to display yet. Please enter data and click 'Calculate RSI'.
RSI Analysis & Interpretation
Analysis will appear here after calculation.
Analysis will appear here after calculation.
'; calculatedRSIResults = []; resultsTabButton.disabled = true; analysisTabButton.disabled = true; resultsTabButton.classList.add('rsi-btn-disabled'); analysisTabButton.classList.add('rsi-btn-disabled'); activateTab('input'); // Return to input tab } window.downloadPdf = function() { const element = document.getElementById('rsiTool'); if (!element) { alert('Tool container not found for PDF generation.'); return; } // Temporarily activate all tabs to ensure all content is rendered for PDF const previouslyActiveTabContent = document.querySelector('.rsi-tab-content.active'); const previouslyActiveTabButton = document.querySelector('.rsi-tab-button.active'); tabContents.forEach(content => content.classList.add('active')); tabButtons.forEach(button => button.classList.remove('active')); // Deactivate all buttons document.getElementById('rsiInputTab').classList.add('active'); // Ensure input is active if not already document.getElementById('rsiResultsTab').classList.add('active'); // Ensure results is active document.getElementById('rsiAnalysisTab').classList.add('active'); // Ensure analysis is active // Hide buttons and tabs for PDF export const elementsToHide = document.querySelectorAll('.rsi-tabs, .rsi-btn-group, .rsi-pdf-download-btn'); const originalDisplays = []; elementsToHide.forEach(el => { originalDisplays.push(el.style.display); el.style.display = 'none'; }); html2pdf(element, { margin: 10, filename: 'RSI_Calculator_Results.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, logging: true, dpi: 192, letterRendering: true }, jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } }).then(() => { // Restore original state after PDF generation let i = 0; elementsToHide.forEach(el => { el.style.display = originalDisplays[i++]; }); tabContents.forEach(content => content.classList.remove('active')); if (previouslyActiveTabContent) { previouslyActiveTabContent.classList.add('active'); } if (previouslyActiveTabButton) { previouslyActiveTabButton.classList.add('active'); } else { // Fallback to default if no active button was found document.querySelector('.rsi-tab-button[data-tab="input"]').classList.add('active'); document.getElementById('rsiInputTab').classList.add('active'); } }).catch(error => { console.error('Error generating PDF:', error); alert('Failed to generate PDF. Please try again.'); // Ensure elements are restored even on error let i = 0; elementsToHide.forEach(el => { el.style.display = originalDisplays[i++]; }); tabContents.forEach(content => content.classList.remove('active')); if (previouslyActiveTabContent) { previouslyActiveTabContent.classList.add('active'); } if (previouslyActiveTabButton) { previouslyActiveTabButton.classList.add('active'); } else { document.querySelector('.rsi-tab-button[data-tab="input"]').classList.add('active'); document.getElementById('rsiInputTab').classList.add('active'); } }); } // Initialize UI state resetForm(); });