Spaces:
Running
Running
File size: 2,924 Bytes
b03b134 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | document.addEventListener('DOMContentLoaded', function() {
// Initialize real-time data updates
initializeDataStream();
// Set up event listeners
setupEventListeners();
});
function initializeDataStream() {
// Initialize charts
initSentimentCharts();
// Simulate real-time data updates
setInterval(() => {
updateMarketData();
updateSentimentCharts();
}, 3000);
}
function initSentimentCharts() {
// Initialize mini charts with Chart.js
['bullish', 'bearish', 'neutral'].forEach(type => {
const ctx = document.getElementById(`${type}-chart`).getContext('2d');
new Chart(ctx, {
type: 'line',
data: generateRandomChartData(type),
options: {
responsive: true,
maintainAspectRatio: false,
plugins: { legend: { display: false } },
scales: { display: false }
}
});
});
}
function updateSentimentCharts() {
// Update chart data
Chart.instances.forEach(chart => {
chart.data.datasets[0].data = generateRandomDataPoints(5);
chart.update();
});
}
function generateRandomChartData(type) {
const colors = {
bullish: 'rgba(16, 185, 129, 0.8)',
bearish: 'rgba(239, 68, 68, 0.8)',
neutral: 'rgba(156, 163, 175, 0.8)'
};
return {
labels: ['', '', '', '', ''],
datasets: [{
data: generateRandomDataPoints(5),
borderColor: colors[type],
borderWidth: 2,
tension: 0.4,
fill: true,
pointRadius: 0
}]
};
}
function generateRandomDataPoints(count) {
return Array.from({length: count}, () => Math.floor(Math.random() * 100));
}
function updateMarketData() {
// In a real app, this would fetch from API
const priceElements = document.querySelectorAll('.price-change');
priceElements.forEach(el => {
const change = (Math.random() * 2 - 1).toFixed(2);
const isPositive = change >= 0;
el.textContent = `${isPositive ? '+' : ''}${change}%`;
el.className = `price-change ${isPositive ? 'text-green-500' : 'text-red-500'}`;
});
}
function setupEventListeners() {
// Add any event listeners needed
document.addEventListener('click', function(e) {
if (e.target.closest('.signal-details')) {
const card = e.target.closest('.signal-card');
card.querySelector('.signal-explanation').classList.toggle('hidden');
}
});
}
// Simulated API functions
async function fetchSignals() {
return [
{
asset: "BTC/USDT",
signal: "BUY",
confidence: 0.87,
timeframe: "15m",
explanation: "Strong bullish momentum with RSI at 32 (oversold) and positive sentiment trend."
},
// More signals...
];
} |