3.4 Implement user-defined indicator management system and enhance chart capabilities

- Introduced a comprehensive user indicator management system in `components/charts/indicator_manager.py`, allowing users to create, edit, and manage custom indicators with JSON persistence.
- Added new default indicators in `components/charts/indicator_defaults.py` to provide users with immediate options for technical analysis.
- Enhanced the chart rendering capabilities by implementing the `create_chart_with_indicators` function in `components/charts/builder.py`, supporting both overlay and subplot indicators.
- Updated the main application layout in `app.py` to include a modal for adding and editing indicators, improving user interaction.
- Enhanced documentation to cover the new indicator system, including a quick guide for adding new indicators and detailed usage examples.
- Added unit tests to ensure the reliability and functionality of the new indicator management features.
This commit is contained in:
Vasily.onl
2025-06-04 13:01:57 +08:00
parent d71cb763bc
commit 476bd67f14
25 changed files with 3160 additions and 55 deletions

View File

@@ -32,6 +32,7 @@ class IndicatorLayerConfig(LayerConfig):
parameters: Dict[str, Any] = None # Indicator-specific parameters
line_width: int = 2
opacity: float = 1.0
show_middle_line: bool = True # For indicators like Bollinger Bands
def __post_init__(self):
super().__post_init__()
@@ -341,9 +342,7 @@ class SMALayer(BaseIndicatorLayer):
line=dict(
color=self.config.color or '#2196F3',
width=self.config.line_width
),
row=subplot_row,
col=1
)
)
self.traces = [sma_trace]
@@ -442,9 +441,7 @@ class EMALayer(BaseIndicatorLayer):
line=dict(
color=self.config.color or '#FF9800',
width=self.config.line_width
),
row=subplot_row,
col=1
)
)
self.traces = [ema_trace]
@@ -550,8 +547,6 @@ class BollingerBandsLayer(BaseIndicatorLayer):
mode='lines',
name=f'BB Upper({period})',
line=dict(color=self.config.color or '#9C27B0', width=1),
row=subplot_row,
col=1,
showlegend=True
)
traces.append(upper_trace)
@@ -565,8 +560,6 @@ class BollingerBandsLayer(BaseIndicatorLayer):
line=dict(color=self.config.color or '#9C27B0', width=1),
fill='tonexty',
fillcolor='rgba(156, 39, 176, 0.1)',
row=subplot_row,
col=1,
showlegend=True
)
traces.append(lower_trace)
@@ -579,8 +572,6 @@ class BollingerBandsLayer(BaseIndicatorLayer):
mode='lines',
name=f'BB Middle({period})',
line=dict(color=self.config.color or '#9C27B0', width=1, dash='dash'),
row=subplot_row,
col=1,
showlegend=True
)
traces.append(middle_trace)