752 lines
20 KiB
Markdown
752 lines
20 KiB
Markdown
|
|
# Chart Configuration System
|
||
|
|
|
||
|
|
The Chart Configuration System provides comprehensive management of chart settings, indicator definitions, and trading strategy configurations. It includes schema validation, default presets, and extensible configuration patterns.
|
||
|
|
|
||
|
|
## Table of Contents
|
||
|
|
|
||
|
|
- [Overview](#overview)
|
||
|
|
- [Indicator Definitions](#indicator-definitions)
|
||
|
|
- [Default Configurations](#default-configurations)
|
||
|
|
- [Strategy Configurations](#strategy-configurations)
|
||
|
|
- [Validation System](#validation-system)
|
||
|
|
- [Configuration Files](#configuration-files)
|
||
|
|
- [Usage Examples](#usage-examples)
|
||
|
|
- [Extension Guide](#extension-guide)
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The configuration system is built around three core concepts:
|
||
|
|
|
||
|
|
1. **Indicator Definitions** - Schema and validation for technical indicators
|
||
|
|
2. **Default Configurations** - Pre-built indicator presets organized by category
|
||
|
|
3. **Strategy Configurations** - Complete chart setups for trading strategies
|
||
|
|
|
||
|
|
### Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
components/charts/config/
|
||
|
|
├── indicator_defs.py # Core schemas and validation
|
||
|
|
├── defaults.py # Default indicator presets
|
||
|
|
├── strategy_charts.py # Strategy configurations
|
||
|
|
├── validation.py # Validation system
|
||
|
|
├── example_strategies.py # Real-world examples
|
||
|
|
└── __init__.py # Package exports
|
||
|
|
```
|
||
|
|
|
||
|
|
## Indicator Definitions
|
||
|
|
|
||
|
|
### Core Classes
|
||
|
|
|
||
|
|
#### `ChartIndicatorConfig`
|
||
|
|
|
||
|
|
The main configuration class for individual indicators:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class ChartIndicatorConfig:
|
||
|
|
indicator_type: IndicatorType
|
||
|
|
parameters: Dict[str, Any]
|
||
|
|
display_name: str
|
||
|
|
color: str
|
||
|
|
line_style: LineStyle = LineStyle.SOLID
|
||
|
|
line_width: int = 2
|
||
|
|
display_type: DisplayType = DisplayType.OVERLAY
|
||
|
|
opacity: float = 1.0
|
||
|
|
show_legend: bool = True
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Enums
|
||
|
|
|
||
|
|
**IndicatorType**
|
||
|
|
```python
|
||
|
|
class IndicatorType(str, Enum):
|
||
|
|
SMA = "sma"
|
||
|
|
EMA = "ema"
|
||
|
|
RSI = "rsi"
|
||
|
|
MACD = "macd"
|
||
|
|
BOLLINGER_BANDS = "bollinger_bands"
|
||
|
|
VOLUME = "volume"
|
||
|
|
```
|
||
|
|
|
||
|
|
**DisplayType**
|
||
|
|
```python
|
||
|
|
class DisplayType(str, Enum):
|
||
|
|
OVERLAY = "overlay" # Overlaid on price chart
|
||
|
|
SUBPLOT = "subplot" # Separate subplot
|
||
|
|
HISTOGRAM = "histogram" # Histogram display
|
||
|
|
```
|
||
|
|
|
||
|
|
**LineStyle**
|
||
|
|
```python
|
||
|
|
class LineStyle(str, Enum):
|
||
|
|
SOLID = "solid"
|
||
|
|
DASHED = "dash"
|
||
|
|
DOTTED = "dot"
|
||
|
|
DASH_DOT = "dashdot"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Schema Validation
|
||
|
|
|
||
|
|
#### `IndicatorParameterSchema`
|
||
|
|
|
||
|
|
Defines validation rules for indicator parameters:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class IndicatorParameterSchema:
|
||
|
|
name: str
|
||
|
|
type: type
|
||
|
|
required: bool = True
|
||
|
|
min_value: Optional[Union[int, float]] = None
|
||
|
|
max_value: Optional[Union[int, float]] = None
|
||
|
|
default_value: Any = None
|
||
|
|
description: str = ""
|
||
|
|
valid_values: Optional[List[Any]] = None
|
||
|
|
```
|
||
|
|
|
||
|
|
#### `IndicatorSchema`
|
||
|
|
|
||
|
|
Complete schema for an indicator type:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class IndicatorSchema:
|
||
|
|
indicator_type: IndicatorType
|
||
|
|
display_type: DisplayType
|
||
|
|
parameters: List[IndicatorParameterSchema]
|
||
|
|
description: str
|
||
|
|
calculation_description: str
|
||
|
|
usage_notes: List[str] = field(default_factory=list)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Schema Definitions
|
||
|
|
|
||
|
|
The system includes complete schemas for all supported indicators:
|
||
|
|
|
||
|
|
```python
|
||
|
|
INDICATOR_SCHEMAS = {
|
||
|
|
IndicatorType.SMA: IndicatorSchema(
|
||
|
|
indicator_type=IndicatorType.SMA,
|
||
|
|
display_type=DisplayType.OVERLAY,
|
||
|
|
parameters=[
|
||
|
|
IndicatorParameterSchema(
|
||
|
|
name="period",
|
||
|
|
type=int,
|
||
|
|
min_value=1,
|
||
|
|
max_value=200,
|
||
|
|
default_value=20,
|
||
|
|
description="Number of periods for the moving average"
|
||
|
|
),
|
||
|
|
IndicatorParameterSchema(
|
||
|
|
name="price_column",
|
||
|
|
type=str,
|
||
|
|
required=False,
|
||
|
|
default_value="close",
|
||
|
|
valid_values=["open", "high", "low", "close"],
|
||
|
|
description="Price column to use for calculation"
|
||
|
|
)
|
||
|
|
],
|
||
|
|
description="Simple Moving Average - arithmetic mean of prices",
|
||
|
|
calculation_description="Sum of closing prices divided by period"
|
||
|
|
),
|
||
|
|
# ... more schemas
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Utility Functions
|
||
|
|
|
||
|
|
#### Validation Functions
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Validate individual indicator configuration
|
||
|
|
def validate_indicator_configuration(config: ChartIndicatorConfig) -> tuple[bool, List[str]]
|
||
|
|
|
||
|
|
# Create indicator configuration with validation
|
||
|
|
def create_indicator_config(
|
||
|
|
indicator_type: IndicatorType,
|
||
|
|
parameters: Dict[str, Any],
|
||
|
|
**kwargs
|
||
|
|
) -> tuple[Optional[ChartIndicatorConfig], List[str]]
|
||
|
|
|
||
|
|
# Get schema for indicator type
|
||
|
|
def get_indicator_schema(indicator_type: IndicatorType) -> Optional[IndicatorSchema]
|
||
|
|
|
||
|
|
# Get available indicator types
|
||
|
|
def get_available_indicator_types() -> List[IndicatorType]
|
||
|
|
|
||
|
|
# Validate parameters for specific type
|
||
|
|
def validate_parameters_for_type(
|
||
|
|
indicator_type: IndicatorType,
|
||
|
|
parameters: Dict[str, Any]
|
||
|
|
) -> tuple[bool, List[str]]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Default Configurations
|
||
|
|
|
||
|
|
### Organization
|
||
|
|
|
||
|
|
Default configurations are organized by category and trading strategy:
|
||
|
|
|
||
|
|
#### Categories
|
||
|
|
|
||
|
|
```python
|
||
|
|
class IndicatorCategory(str, Enum):
|
||
|
|
TREND = "trend"
|
||
|
|
MOMENTUM = "momentum"
|
||
|
|
VOLATILITY = "volatility"
|
||
|
|
VOLUME = "volume"
|
||
|
|
SUPPORT_RESISTANCE = "support_resistance"
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Trading Strategies
|
||
|
|
|
||
|
|
```python
|
||
|
|
class TradingStrategy(str, Enum):
|
||
|
|
SCALPING = "scalping"
|
||
|
|
DAY_TRADING = "day_trading"
|
||
|
|
SWING_TRADING = "swing_trading"
|
||
|
|
POSITION_TRADING = "position_trading"
|
||
|
|
MOMENTUM = "momentum"
|
||
|
|
MEAN_REVERSION = "mean_reversion"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Indicator Presets
|
||
|
|
|
||
|
|
#### `IndicatorPreset`
|
||
|
|
|
||
|
|
Container for pre-configured indicators:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class IndicatorPreset:
|
||
|
|
name: str
|
||
|
|
config: ChartIndicatorConfig
|
||
|
|
category: IndicatorCategory
|
||
|
|
description: str
|
||
|
|
recommended_timeframes: List[str]
|
||
|
|
suitable_strategies: List[TradingStrategy]
|
||
|
|
notes: List[str] = field(default_factory=list)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Available Presets
|
||
|
|
|
||
|
|
**Trend Indicators (13 presets)**
|
||
|
|
- `sma_5`, `sma_10`, `sma_20`, `sma_50`, `sma_100`, `sma_200`
|
||
|
|
- `ema_5`, `ema_12`, `ema_21`, `ema_26`, `ema_50`, `ema_100`, `ema_200`
|
||
|
|
|
||
|
|
**Momentum Indicators (9 presets)**
|
||
|
|
- `rsi_7`, `rsi_14`, `rsi_21`
|
||
|
|
- `macd_5_13_4`, `macd_8_17_6`, `macd_12_26_9`, `macd_19_39_13`
|
||
|
|
|
||
|
|
**Volatility Indicators (4 presets)**
|
||
|
|
- `bb_10_15`, `bb_20_15`, `bb_20_20`, `bb_50_20`
|
||
|
|
|
||
|
|
### Color Schemes
|
||
|
|
|
||
|
|
Organized color palettes by category:
|
||
|
|
|
||
|
|
```python
|
||
|
|
CATEGORY_COLORS = {
|
||
|
|
IndicatorCategory.TREND: {
|
||
|
|
"primary": "#2E86C1", # Blue
|
||
|
|
"secondary": "#5DADE2", # Light Blue
|
||
|
|
"accent": "#1F618D" # Dark Blue
|
||
|
|
},
|
||
|
|
IndicatorCategory.MOMENTUM: {
|
||
|
|
"primary": "#E74C3C", # Red
|
||
|
|
"secondary": "#F1948A", # Light Red
|
||
|
|
"accent": "#C0392B" # Dark Red
|
||
|
|
},
|
||
|
|
# ... more colors
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Access Functions
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Get all default indicators
|
||
|
|
def get_all_default_indicators() -> Dict[str, IndicatorPreset]
|
||
|
|
|
||
|
|
# Filter by category
|
||
|
|
def get_indicators_by_category(category: IndicatorCategory) -> Dict[str, IndicatorPreset]
|
||
|
|
|
||
|
|
# Filter by timeframe
|
||
|
|
def get_indicators_for_timeframe(timeframe: str) -> Dict[str, IndicatorPreset]
|
||
|
|
|
||
|
|
# Get strategy-specific indicators
|
||
|
|
def get_strategy_indicators(strategy: TradingStrategy) -> Dict[str, IndicatorPreset]
|
||
|
|
|
||
|
|
# Create custom preset
|
||
|
|
def create_custom_preset(
|
||
|
|
name: str,
|
||
|
|
indicator_type: IndicatorType,
|
||
|
|
parameters: Dict[str, Any],
|
||
|
|
category: IndicatorCategory,
|
||
|
|
**kwargs
|
||
|
|
) -> tuple[Optional[IndicatorPreset], List[str]]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Strategy Configurations
|
||
|
|
|
||
|
|
### Core Classes
|
||
|
|
|
||
|
|
#### `StrategyChartConfig`
|
||
|
|
|
||
|
|
Complete chart configuration for a trading strategy:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class StrategyChartConfig:
|
||
|
|
strategy_name: str
|
||
|
|
strategy_type: TradingStrategy
|
||
|
|
description: str
|
||
|
|
timeframes: List[str]
|
||
|
|
|
||
|
|
# Chart layout
|
||
|
|
layout: ChartLayout = ChartLayout.MAIN_WITH_SUBPLOTS
|
||
|
|
main_chart_height: float = 0.7
|
||
|
|
|
||
|
|
# Indicators
|
||
|
|
overlay_indicators: List[str] = field(default_factory=list)
|
||
|
|
subplot_configs: List[SubplotConfig] = field(default_factory=list)
|
||
|
|
|
||
|
|
# Style
|
||
|
|
chart_style: ChartStyle = field(default_factory=ChartStyle)
|
||
|
|
|
||
|
|
# Metadata
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
updated_at: Optional[datetime] = None
|
||
|
|
version: str = "1.0"
|
||
|
|
tags: List[str] = field(default_factory=list)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### `SubplotConfig`
|
||
|
|
|
||
|
|
Configuration for chart subplots:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class SubplotConfig:
|
||
|
|
subplot_type: SubplotType
|
||
|
|
height_ratio: float = 0.3
|
||
|
|
indicators: List[str] = field(default_factory=list)
|
||
|
|
title: Optional[str] = None
|
||
|
|
y_axis_label: Optional[str] = None
|
||
|
|
show_grid: bool = True
|
||
|
|
show_legend: bool = True
|
||
|
|
background_color: Optional[str] = None
|
||
|
|
```
|
||
|
|
|
||
|
|
#### `ChartStyle`
|
||
|
|
|
||
|
|
Comprehensive chart styling:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class ChartStyle:
|
||
|
|
theme: str = "plotly_white"
|
||
|
|
background_color: str = "#ffffff"
|
||
|
|
grid_color: str = "#e6e6e6"
|
||
|
|
text_color: str = "#2c3e50"
|
||
|
|
font_family: str = "Arial, sans-serif"
|
||
|
|
font_size: int = 12
|
||
|
|
candlestick_up_color: str = "#26a69a"
|
||
|
|
candlestick_down_color: str = "#ef5350"
|
||
|
|
volume_color: str = "#78909c"
|
||
|
|
show_volume: bool = True
|
||
|
|
show_grid: bool = True
|
||
|
|
show_legend: bool = True
|
||
|
|
show_toolbar: bool = True
|
||
|
|
```
|
||
|
|
|
||
|
|
### Default Strategy Configurations
|
||
|
|
|
||
|
|
Pre-built strategy configurations for common trading approaches:
|
||
|
|
|
||
|
|
1. **Scalping Strategy**
|
||
|
|
- Ultra-fast indicators (EMA 5, 12, 21)
|
||
|
|
- Fast RSI (7) and MACD (5,13,4)
|
||
|
|
- 1m-5m timeframes
|
||
|
|
|
||
|
|
2. **Day Trading Strategy**
|
||
|
|
- Balanced indicators (SMA 20, EMA 12/26, BB 20,2.0)
|
||
|
|
- Standard RSI (14) and MACD (12,26,9)
|
||
|
|
- 5m-1h timeframes
|
||
|
|
|
||
|
|
3. **Swing Trading Strategy**
|
||
|
|
- Longer-term indicators (SMA 50, EMA 21/50, BB 20,2.0)
|
||
|
|
- Standard momentum indicators
|
||
|
|
- 1h-1d timeframes
|
||
|
|
|
||
|
|
### Configuration Functions
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Create default strategy configurations
|
||
|
|
def create_default_strategy_configurations() -> Dict[str, StrategyChartConfig]
|
||
|
|
|
||
|
|
# Create custom strategy
|
||
|
|
def create_custom_strategy_config(
|
||
|
|
strategy_name: str,
|
||
|
|
strategy_type: TradingStrategy,
|
||
|
|
description: str,
|
||
|
|
timeframes: List[str],
|
||
|
|
overlay_indicators: List[str],
|
||
|
|
subplot_configs: List[Dict[str, Any]],
|
||
|
|
**kwargs
|
||
|
|
) -> tuple[Optional[StrategyChartConfig], List[str]]
|
||
|
|
|
||
|
|
# JSON import/export
|
||
|
|
def load_strategy_config_from_json(json_data: Union[str, Dict[str, Any]]) -> tuple[Optional[StrategyChartConfig], List[str]]
|
||
|
|
def export_strategy_config_to_json(config: StrategyChartConfig) -> str
|
||
|
|
|
||
|
|
# Access functions
|
||
|
|
def get_strategy_config(strategy_name: str) -> Optional[StrategyChartConfig]
|
||
|
|
def get_all_strategy_configs() -> Dict[str, StrategyChartConfig]
|
||
|
|
def get_available_strategy_names() -> List[str]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Validation System
|
||
|
|
|
||
|
|
### Validation Rules
|
||
|
|
|
||
|
|
The system includes 10 comprehensive validation rules:
|
||
|
|
|
||
|
|
1. **REQUIRED_FIELDS** - Validates essential configuration fields
|
||
|
|
2. **HEIGHT_RATIOS** - Ensures chart height ratios sum correctly
|
||
|
|
3. **INDICATOR_EXISTENCE** - Checks indicator availability
|
||
|
|
4. **TIMEFRAME_FORMAT** - Validates timeframe patterns
|
||
|
|
5. **CHART_STYLE** - Validates styling options
|
||
|
|
6. **SUBPLOT_CONFIG** - Validates subplot configurations
|
||
|
|
7. **STRATEGY_CONSISTENCY** - Checks strategy-timeframe alignment
|
||
|
|
8. **PERFORMANCE_IMPACT** - Warns about performance issues
|
||
|
|
9. **INDICATOR_CONFLICTS** - Detects redundant indicators
|
||
|
|
10. **RESOURCE_USAGE** - Estimates resource consumption
|
||
|
|
|
||
|
|
### Validation Classes
|
||
|
|
|
||
|
|
#### `ValidationReport`
|
||
|
|
|
||
|
|
Comprehensive validation results:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class ValidationReport:
|
||
|
|
is_valid: bool
|
||
|
|
errors: List[ValidationIssue] = field(default_factory=list)
|
||
|
|
warnings: List[ValidationIssue] = field(default_factory=list)
|
||
|
|
info: List[ValidationIssue] = field(default_factory=list)
|
||
|
|
debug: List[ValidationIssue] = field(default_factory=list)
|
||
|
|
validation_time: Optional[datetime] = None
|
||
|
|
rules_applied: Set[ValidationRule] = field(default_factory=set)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### `ValidationIssue`
|
||
|
|
|
||
|
|
Individual validation issue:
|
||
|
|
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class ValidationIssue:
|
||
|
|
level: ValidationLevel
|
||
|
|
rule: ValidationRule
|
||
|
|
message: str
|
||
|
|
field_path: str = ""
|
||
|
|
suggestion: Optional[str] = None
|
||
|
|
auto_fix: Optional[str] = None
|
||
|
|
context: Dict[str, Any] = field(default_factory=dict)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Validation Usage
|
||
|
|
|
||
|
|
```python
|
||
|
|
from components.charts.config import validate_configuration
|
||
|
|
|
||
|
|
# Comprehensive validation
|
||
|
|
report = validate_configuration(config)
|
||
|
|
|
||
|
|
# Check results
|
||
|
|
if report.is_valid:
|
||
|
|
print("✅ Configuration is valid")
|
||
|
|
else:
|
||
|
|
print("❌ Configuration has errors:")
|
||
|
|
for error in report.errors:
|
||
|
|
print(f" • {error}")
|
||
|
|
|
||
|
|
# Handle warnings
|
||
|
|
if report.warnings:
|
||
|
|
print("⚠️ Warnings:")
|
||
|
|
for warning in report.warnings:
|
||
|
|
print(f" • {warning}")
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration Files
|
||
|
|
|
||
|
|
### File Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
components/charts/config/
|
||
|
|
├── __init__.py # Package exports and public API
|
||
|
|
├── indicator_defs.py # Core indicator schemas and validation
|
||
|
|
├── defaults.py # Default indicator presets and categories
|
||
|
|
├── strategy_charts.py # Strategy configuration classes and defaults
|
||
|
|
├── validation.py # Validation system and rules
|
||
|
|
└── example_strategies.py # Real-world trading strategy examples
|
||
|
|
```
|
||
|
|
|
||
|
|
### Key Exports
|
||
|
|
|
||
|
|
From `__init__.py`:
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Core classes
|
||
|
|
from .indicator_defs import (
|
||
|
|
IndicatorType, DisplayType, LineStyle, PriceColumn,
|
||
|
|
IndicatorParameterSchema, IndicatorSchema, ChartIndicatorConfig
|
||
|
|
)
|
||
|
|
|
||
|
|
# Default configurations
|
||
|
|
from .defaults import (
|
||
|
|
IndicatorCategory, TradingStrategy, IndicatorPreset,
|
||
|
|
get_all_default_indicators, get_indicators_by_category
|
||
|
|
)
|
||
|
|
|
||
|
|
# Strategy configurations
|
||
|
|
from .strategy_charts import (
|
||
|
|
ChartLayout, SubplotType, SubplotConfig, ChartStyle, StrategyChartConfig,
|
||
|
|
create_default_strategy_configurations
|
||
|
|
)
|
||
|
|
|
||
|
|
# Validation system
|
||
|
|
from .validation import (
|
||
|
|
ValidationLevel, ValidationRule, ValidationIssue, ValidationReport,
|
||
|
|
validate_configuration
|
||
|
|
)
|
||
|
|
|
||
|
|
# Example strategies
|
||
|
|
from .example_strategies import (
|
||
|
|
StrategyExample, create_ema_crossover_strategy,
|
||
|
|
get_all_example_strategies
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Usage Examples
|
||
|
|
|
||
|
|
### Example 1: Creating Custom Indicator
|
||
|
|
|
||
|
|
```python
|
||
|
|
from components.charts.config import (
|
||
|
|
create_indicator_config, IndicatorType
|
||
|
|
)
|
||
|
|
|
||
|
|
# Create custom EMA configuration
|
||
|
|
config, errors = create_indicator_config(
|
||
|
|
indicator_type=IndicatorType.EMA,
|
||
|
|
parameters={"period": 21, "price_column": "close"},
|
||
|
|
display_name="EMA 21",
|
||
|
|
color="#2E86C1",
|
||
|
|
line_width=2
|
||
|
|
)
|
||
|
|
|
||
|
|
if config:
|
||
|
|
print(f"Created: {config.display_name}")
|
||
|
|
else:
|
||
|
|
print(f"Errors: {errors}")
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example 2: Using Default Presets
|
||
|
|
|
||
|
|
```python
|
||
|
|
from components.charts.config import (
|
||
|
|
get_all_default_indicators,
|
||
|
|
get_indicators_by_category,
|
||
|
|
IndicatorCategory
|
||
|
|
)
|
||
|
|
|
||
|
|
# Get all available indicators
|
||
|
|
all_indicators = get_all_default_indicators()
|
||
|
|
print(f"Available indicators: {len(all_indicators)}")
|
||
|
|
|
||
|
|
# Get trend indicators only
|
||
|
|
trend_indicators = get_indicators_by_category(IndicatorCategory.TREND)
|
||
|
|
for name, preset in trend_indicators.items():
|
||
|
|
print(f"{name}: {preset.description}")
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example 3: Strategy Configuration
|
||
|
|
|
||
|
|
```python
|
||
|
|
from components.charts.config import (
|
||
|
|
create_custom_strategy_config,
|
||
|
|
TradingStrategy
|
||
|
|
)
|
||
|
|
|
||
|
|
# Create custom momentum strategy
|
||
|
|
config, errors = create_custom_strategy_config(
|
||
|
|
strategy_name="Custom Momentum",
|
||
|
|
strategy_type=TradingStrategy.MOMENTUM,
|
||
|
|
description="Fast momentum trading strategy",
|
||
|
|
timeframes=["5m", "15m"],
|
||
|
|
overlay_indicators=["ema_8", "ema_21"],
|
||
|
|
subplot_configs=[{
|
||
|
|
"subplot_type": "rsi",
|
||
|
|
"height_ratio": 0.2,
|
||
|
|
"indicators": ["rsi_7"]
|
||
|
|
}]
|
||
|
|
)
|
||
|
|
|
||
|
|
if config:
|
||
|
|
print(f"Created strategy: {config.strategy_name}")
|
||
|
|
is_valid, validation_errors = config.validate()
|
||
|
|
if is_valid:
|
||
|
|
print("Strategy is valid!")
|
||
|
|
else:
|
||
|
|
print(f"Validation errors: {validation_errors}")
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example 4: Comprehensive Validation
|
||
|
|
|
||
|
|
```python
|
||
|
|
from components.charts.config import (
|
||
|
|
validate_configuration,
|
||
|
|
ValidationRule
|
||
|
|
)
|
||
|
|
|
||
|
|
# Validate with specific rules
|
||
|
|
rules = {ValidationRule.REQUIRED_FIELDS, ValidationRule.HEIGHT_RATIOS}
|
||
|
|
report = validate_configuration(config, rules=rules)
|
||
|
|
|
||
|
|
# Detailed error handling
|
||
|
|
for error in report.errors:
|
||
|
|
print(f"ERROR: {error.message}")
|
||
|
|
if error.suggestion:
|
||
|
|
print(f" Suggestion: {error.suggestion}")
|
||
|
|
if error.auto_fix:
|
||
|
|
print(f" Auto-fix: {error.auto_fix}")
|
||
|
|
|
||
|
|
# Performance warnings
|
||
|
|
performance_issues = report.get_issues_by_rule(ValidationRule.PERFORMANCE_IMPACT)
|
||
|
|
if performance_issues:
|
||
|
|
print(f"Performance concerns: {len(performance_issues)}")
|
||
|
|
```
|
||
|
|
|
||
|
|
## Extension Guide
|
||
|
|
|
||
|
|
### Adding New Indicators
|
||
|
|
|
||
|
|
1. **Define Indicator Type**
|
||
|
|
```python
|
||
|
|
# Add to IndicatorType enum
|
||
|
|
class IndicatorType(str, Enum):
|
||
|
|
# ... existing types
|
||
|
|
STOCHASTIC = "stochastic"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Create Schema**
|
||
|
|
```python
|
||
|
|
# Add to INDICATOR_SCHEMAS
|
||
|
|
INDICATOR_SCHEMAS[IndicatorType.STOCHASTIC] = IndicatorSchema(
|
||
|
|
indicator_type=IndicatorType.STOCHASTIC,
|
||
|
|
display_type=DisplayType.SUBPLOT,
|
||
|
|
parameters=[
|
||
|
|
IndicatorParameterSchema(
|
||
|
|
name="k_period",
|
||
|
|
type=int,
|
||
|
|
min_value=1,
|
||
|
|
max_value=100,
|
||
|
|
default_value=14
|
||
|
|
),
|
||
|
|
# ... more parameters
|
||
|
|
],
|
||
|
|
description="Stochastic Oscillator",
|
||
|
|
calculation_description="Momentum indicator comparing closing price to price range"
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Create Default Presets**
|
||
|
|
```python
|
||
|
|
# Add to defaults.py
|
||
|
|
def create_momentum_indicators():
|
||
|
|
# ... existing indicators
|
||
|
|
indicators["stoch_14"] = IndicatorPreset(
|
||
|
|
name="stoch_14",
|
||
|
|
config=create_indicator_config(
|
||
|
|
IndicatorType.STOCHASTIC,
|
||
|
|
{"k_period": 14, "d_period": 3},
|
||
|
|
display_name="Stochastic %K(14,%D(3))",
|
||
|
|
color=CATEGORY_COLORS[IndicatorCategory.MOMENTUM]["primary"]
|
||
|
|
)[0],
|
||
|
|
category=IndicatorCategory.MOMENTUM,
|
||
|
|
description="Standard Stochastic oscillator",
|
||
|
|
recommended_timeframes=["15m", "1h", "4h"],
|
||
|
|
suitable_strategies=[TradingStrategy.SWING_TRADING]
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding New Validation Rules
|
||
|
|
|
||
|
|
1. **Define Rule**
|
||
|
|
```python
|
||
|
|
# Add to ValidationRule enum
|
||
|
|
class ValidationRule(str, Enum):
|
||
|
|
# ... existing rules
|
||
|
|
CUSTOM_RULE = "custom_rule"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Implement Validation**
|
||
|
|
```python
|
||
|
|
# Add to ConfigurationValidator
|
||
|
|
def _validate_custom_rule(self, config: StrategyChartConfig, report: ValidationReport) -> None:
|
||
|
|
# Custom validation logic
|
||
|
|
if some_condition:
|
||
|
|
report.add_issue(ValidationIssue(
|
||
|
|
level=ValidationLevel.WARNING,
|
||
|
|
rule=ValidationRule.CUSTOM_RULE,
|
||
|
|
message="Custom validation message",
|
||
|
|
suggestion="Suggested fix"
|
||
|
|
))
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Add to Validator**
|
||
|
|
```python
|
||
|
|
# Add to validate_strategy_config method
|
||
|
|
if ValidationRule.CUSTOM_RULE in self.enabled_rules:
|
||
|
|
self._validate_custom_rule(config, report)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding New Strategy Types
|
||
|
|
|
||
|
|
1. **Define Strategy Type**
|
||
|
|
```python
|
||
|
|
# Add to TradingStrategy enum
|
||
|
|
class TradingStrategy(str, Enum):
|
||
|
|
# ... existing strategies
|
||
|
|
GRID_TRADING = "grid_trading"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Create Strategy Configuration**
|
||
|
|
```python
|
||
|
|
# Add to create_default_strategy_configurations()
|
||
|
|
strategy_configs["grid_trading"] = StrategyChartConfig(
|
||
|
|
strategy_name="Grid Trading Strategy",
|
||
|
|
strategy_type=TradingStrategy.GRID_TRADING,
|
||
|
|
description="Grid trading with support/resistance levels",
|
||
|
|
timeframes=["1h", "4h"],
|
||
|
|
overlay_indicators=["sma_20", "sma_50"],
|
||
|
|
# ... complete configuration
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Add Example Strategy**
|
||
|
|
```python
|
||
|
|
# Create in example_strategies.py
|
||
|
|
def create_grid_trading_strategy() -> StrategyExample:
|
||
|
|
config = StrategyChartConfig(...)
|
||
|
|
return StrategyExample(
|
||
|
|
config=config,
|
||
|
|
description="Grid trading strategy description...",
|
||
|
|
difficulty="Intermediate",
|
||
|
|
risk_level="Medium"
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
The configuration system is designed to be highly extensible while maintaining type safety and comprehensive validation. All additions should follow the established patterns and include appropriate tests.
|