Files
gogo2/CHART_UPDATES_FIX.md
Dobromir Popov 732c5b4941 fix live updates
2025-12-10 14:39:06 +02:00

4.0 KiB

Chart Updates Fix - JavaScript Errors Resolved

Issues Fixed

1. JavaScript Syntax Error

Error: Uncaught SyntaxError: Unexpected token '{' (at chart_manager.js:4399:39) Cause: Debug methods were added outside the ChartManager class

Fix: Moved debug methods inside the class before the closing brace

class ChartManager {
    // ... existing methods
    
    // Debug methods moved inside class
    debugRecalculatePivots(timeframe) { ... }
    debugPivotStatus() { ... }
} // ← Proper class closing

2. Plotly extendTraces Marker Error

Error: attribute marker must be an array of length equal to indices array length Cause: Incorrect marker.color format in volume trace extension

Before (Broken):

Plotly.extendTraces(plotId, {
    x: [[formattedTimestamp]],
    y: [[candle.volume]],
    marker: { color: [[volumeColor]] }  // ❌ Wrong format
}, [1]);

After (Fixed):

Plotly.extendTraces(plotId, {
    x: [[formattedTimestamp]],
    y: [[candle.volume]]
    // ✅ No marker in extendTraces
}, [1]).then(() => {
    // ✅ Update color separately with restyle
    const currentTrace = plotElement.data[1];
    if (currentTrace && currentTrace.marker && currentTrace.marker.color) {
        const newColors = [...currentTrace.marker.color, volumeColor];
        Plotly.restyle(plotId, {'marker.color': [newColors]}, [1]);
    }
});

3. Empty Annotations File

Error: Expecting value: line 1 column 1 (char 0) Cause: Empty annotations JSON file

Fix: Created proper empty JSON array structure

[]

Root Cause Analysis

Plotly extendTraces Limitation

The issue was that Plotly.extendTraces() has specific requirements for marker arrays:

  • When extending traces, marker properties must match the exact structure
  • For volume bars, the marker.color array must have the same length as the data being added
  • The [[volumeColor]] format was incorrect for this use case

Solution Approach

Instead of trying to extend traces with marker colors, the fix:

  1. Extends traces without marker data - Adds new data points cleanly
  2. Updates colors separately - Uses Plotly.restyle() to update the entire color array
  3. Maintains color consistency - Preserves existing colors and adds new ones

Expected Results

Live Chart Updates Should Now:

  • Add new candles without JavaScript errors
  • Update volume colors correctly (green for up, red for down)
  • Maintain chart performance with proper Plotly API usage
  • Show live data from the unified WebSocket → DataProvider pipeline

Console Should Show:

[1m] Successfully added new candle. Total candles: 152
[1m] Volume trace extended successfully
✅ Chart update fix working correctly!

Instead of:

❌ Error adding new candle: attribute marker must be an array...

Files Modified

JavaScript:

  • ANNOTATE/web/static/js/chart_manager.js - Fixed extendTraces marker issue and syntax error

Data:

  • ANNOTATE/data/annotations/annotations_db.json - Created proper empty JSON structure

Test:

  • test_chart_updates.html - Test file to verify the fix works

Testing

The fix can be verified by:

  1. Opening ANNOTATE dashboard - Should load without JavaScript errors
  2. Watching live updates - Charts should update smoothly with new candles
  3. Checking console - No more Plotly marker errors
  4. Volume colors - Should show green/red based on price direction

Technical Details

Plotly API Correct Usage:

  • extendTraces() - For adding new data points to existing traces
  • restyle() - For updating trace properties like colors, styles
  • relayout() - For updating layout properties like axes, titles

Volume Color Logic:

const volumeColor = candle.close >= candle.open ? '#10b981' : '#ef4444';
// Green for bullish candles (close >= open)
// Red for bearish candles (close < open)

The chart updates should now work smoothly with live data! 🎯