diff --git a/dashboard/public/index.html b/dashboard/public/index.html
index a0a3ee3..1d71ca6 100644
--- a/dashboard/public/index.html
+++ b/dashboard/public/index.html
@@ -125,8 +125,8 @@
-
-
+
+
@@ -140,8 +140,16 @@
const API = '/api';
let store = { trades: [], metadata: [], summary: [], totalTrades: 0 };
let charts = {};
+ let isRefreshing = false;
+ let refreshInterval = null;
- async function fetchData() {
+ let isRefreshing = false;
+ let refreshInterval = null;
+
+ async function fetchData(skipCharts = false) {
+ if (isRefreshing) return; // Verhindere parallele Aufrufe
+ isRefreshing = true;
+
try {
const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7');
// Lade alle Trades (aggregiert) und Total Trades aus vorberechneten Daten
@@ -153,13 +161,15 @@
]);
store = { ...store, trades: t.dataset || [], metadata: m.dataset || [], summary: s.dataset || [] };
store.totalTrades = totalTrades.total_trades || 0;
- updateDashboard(days);
+ updateDashboard(days, skipCharts);
} catch (err) {
console.error('Error fetching data:', err);
+ } finally {
+ isRefreshing = false;
}
}
- function updateDashboard(days = 7) {
+ function updateDashboard(days = 7, skipCharts = false) {
// Volumen aus dem gewählten Zeitraum (aggregiert)
let vol = 0;
if (store.trades && store.trades.length > 0) {
@@ -174,8 +184,10 @@
document.getElementById('statTradesLabel').innerText = `Total Trades (${days}d)`;
document.getElementById('statIsins').innerText = store.metadata.length.toLocaleString();
- // Lade Statistiken
- loadStatistics();
+ // Lade Statistiken nur wenn nicht übersprungen (verhindert Graph-Zucken)
+ if (!skipCharts) {
+ loadStatistics();
+ }
}
function showView(viewId) {
@@ -193,14 +205,13 @@
async function loadStatistics() {
const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7');
- // Aktualisiere auch die Statistik-Karten
- await fetchData();
- // Lade dann die Graphen
+ // Lade die Graphen (ohne fetchData aufzurufen, um Zucken zu vermeiden)
await Promise.all([
loadMovingAverage(days),
loadVolumeChanges(days),
loadStockTrends(days)
]);
+ updateUrlParams();
}
async function loadMovingAverage(days) {
@@ -730,7 +741,12 @@
await fetchData();
loadFromUrlParams();
- setInterval(fetchData, 30000);
+
+ // Automatisches Refresh: Aktualisiere nur Daten, nicht die Graphen (verhindert Zucken)
+ refreshInterval = setInterval(() => {
+ fetchData(true); // skipCharts = true
+ }, 30000);
+
setTimeout(() => loadStatistics(), 1000);
};