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:
- Extends traces without marker data - Adds new data points cleanly
- Updates colors separately - Uses
Plotly.restyle()to update the entire color array - 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:
- Opening ANNOTATE dashboard - Should load without JavaScript errors
- Watching live updates - Charts should update smoothly with new candles
- Checking console - No more Plotly marker errors
- 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! 🎯