Keltner Channels Indicator
Overview
Keltner Channels are volatility-based bands that use ATR for band calculation, providing a more responsive alternative to Bollinger Bands. This implementation will leverage our existing EMA and ATR implementations for enhanced trend and volatility analysis.
Status
- Domain Model Design
- Core Implementation
- API Integration
- Testing
- Documentation
Components
1. Domain Model
interface KeltnerData {
// Core Values
middle_line: number; // EMA center line
upper_band: number; // Upper Keltner band
lower_band: number; // Lower Keltner band
// Analysis
position: KeltnerPosition; // Price position relative to bands
bandwidth: number; // Current band width
bandwidth_state: BandWidth; // Band width trend
trend_strength: TrendStrength; // Based on EMA and ATR
// Signals
signal: SignalType; // Trading signal
signal_strength: number; // Signal confidence (0-1)
}
enum KeltnerPosition {
ABOVE_UPPER = 'above_upper',
BELOW_LOWER = 'below_lower',
BETWEEN_BANDS = 'between_bands',
NEAR_UPPER = 'near_upper',
NEAR_LOWER = 'near_lower',
}
enum BandWidth {
EXPANDING = 'expanding',
CONTRACTING = 'contracting',
STABLE = 'stable',
}
2. Configuration
interface KeltnerSettings {
ema_period: number; // EMA period (default: 20)
atr_period: number; // ATR period (default: 10)
atr_multiplier: number; // Band width multiplier (default: 2.0)
near_band_threshold: number; // % distance for near band state
}
3. API Endpoints
REST API
GET /v1/keltner- Parameters:
symbol: Trading pairtimeframe: Candle timeframeema_period: Optional EMA periodatr_period: Optional ATR periodatr_multiplier: Optional multiplier
- Parameters:
WebSocket
- Channel:
keltner- Updates: Band values and position
- Frequency: On candle close
Technical Implementation
1. Core Calculation
def compute_keltner(
df: pd.DataFrame,
settings: KeltnerSettings
) -> pd.DataFrame:
"""
Calculate Keltner Channels using EMA and ATR.
Args:
df: DataFrame with OHLCV data
settings: Keltner calculation settings
Returns:
DataFrame with Keltner calculations
"""
# Calculate EMA for middle line
df['middle_line'] = df['close'].ewm(
span=settings.ema_period,
adjust=False
).mean()
# Calculate ATR
df['atr'] = compute_atr(df, settings.atr_period)
# Calculate bands
df['upper_band'] = (
df['middle_line'] +
(df['atr'] * settings.atr_multiplier)
)
df['lower_band'] = (
df['middle_line'] -
(df['atr'] * settings.atr_multiplier)
)
# Calculate bandwidth
df['bandwidth'] = (
(df['upper_band'] - df['lower_band']) /
df['middle_line']
)
return df
2. Analysis Functions
def analyze_position(
price: float,
upper: float,
lower: float,
middle: float,
threshold: float
) -> KeltnerPosition:
"""Determine price position relative to bands."""
# Implementation details
def analyze_bandwidth(
current: float,
previous: float
) -> BandWidth:
"""Analyze band width trend."""
# Implementation details
def generate_signal(
position: KeltnerPosition,
bandwidth: BandWidth,
trend_strength: TrendStrength
) -> Tuple[SignalType, float]:
"""Generate trading signal and strength."""
# Implementation details
3. Integration Points
- Integration with EMA analysis
- Integration with ATR volatility states
- Comparison with Bollinger Bands
- Signal combination logic
Configuration
TIMEFRAME_SETTINGS: Dict[str, KeltnerSettings] = {
"1m": KeltnerSettings(
ema_period=20,
atr_period=10,
atr_multiplier=2.0,
near_band_threshold=0.05
),
"5m": KeltnerSettings(...),
"15m": KeltnerSettings(...),
"1h": KeltnerSettings(...),
"4h": KeltnerSettings(...),
"1d": KeltnerSettings(...)
}
Development Guidelines
1. Performance Optimization
- Reuse EMA calculations
- Reuse ATR calculations
- Optimize band calculations
- Efficient signal generation
2. Testing Strategy
def test_keltner_calculation():
"""Test basic Keltner Channel calculation."""
def test_band_width():
"""Test band width calculation and states."""
def test_position_analysis():
"""Test price position classification."""
def test_signal_generation():
"""Test trading signal generation."""
def test_integration():
"""Test integration with EMA and ATR."""
3. Error Handling
- Handle missing data
- Validate parameters
- Handle calculation edge cases
- Manage real-time updates
Dependencies
- NumPy: Numerical operations
- Pandas: Data manipulation
- FastAPI: REST endpoints
- Existing EMA and ATR implementations
Future Enhancements
- Dynamic multiplier adjustment
- Multi-timeframe analysis
- Band compression alerts
- Machine learning optimization