Signals
Keltner Channels
Wrap an EMA with ATR-based envelopes for trend and breakout analysis.
What it is
Keltner Channels wrap an EMA with ATR-based upper and lower envelopes. They are useful for measuring whether price is stretching beyond a volatility-adjusted trend baseline.
When to use it
- Framing breakout entries with volatility-aware channel boundaries.
- Spotting trend continuation when price rides the upper channel.
- Building pullback rules that fade toward the middle band instead of a flat average.
The maths
Middle = EMA(N), Upper = EMA(N) + (multiplier × ATR(N)), Lower = EMA(N) - (multiplier × ATR(N)) The default multiplier is 2.
What it tells you
Keltner Channels behave like Bollinger Bands but use ATR instead of standard deviation, so they are less sensitive to volatility spikes. A close above the upper band in a trending market is bullish confirmation, and a breakout from a narrow channel often precedes a directional move.
REST example
import os
import requests
response = requests.get(
'https://api.financedata.com/v1/signals/KELTNER/AAPL',
params={'start_date': '2025-01-01', 'end_date': '2025-04-30', 'period': 20, 'multiplier': 2.0},
headers={'X-API-Key': os.environ['FDA_KEY']},
timeout=30,
)
response.raise_for_status()
print(response.json())MCP example
Tool call body
{
"name": "run_signals",
"arguments": {
"symbols": ["AAPL"],
"signal_names": ["KELTNER"],
"start_date": "2025-01-01",
"end_date": "2025-04-30",
"signal_parameters": {
"KELTNER": { "period": 20, "multiplier": 2.0 }
}
}
}KELTNER returns upper, mid, and lower, so the batch MCP output is ideal when the agent needs to reason about channel location.
Agent prompt that triggers it
Run Keltner Channels for AAPL and tell me whether price is breaking out above the upper band, mean-reverting, or still centered in the channel.