Not all indicators are created equal for automation. Some produce clean, programmable signals. Others require subjective interpretation that only a human can provide. This list ranks the 10 indicators that work best when you hand them to a bot, with real API examples from the TickAtlas API.
1. RSI (Relative Strength Index)
Why it is #1: Clean numerical output (0-100), universally understood thresholds (30/70), and works across all timeframes and instruments. Every bot should start here.
# Fetch RSI for any symbol
import requests
resp = requests.get("https://tickatlas.com/v1/indicators", params={
"symbol": "EURUSD", "timeframe": "H1"
}, headers={"X-API-Key": API_KEY})
rsi = resp.json()["data"]["indicators"]["RSI_14"]
# Returns: 34.7 2. MACD (Moving Average Convergence Divergence)
Why it matters: MACD captures both trend direction and momentum in a single indicator. The histogram crossing zero is one of the most reliable programmable signals.
// data.indicators from GET /v1/indicators?symbol=EURUSD&timeframe=H1
{
"MACD_main": 0.00045,
"MACD_signal": 0.00032,
"MACD_hist": 0.00013
}
// Bot logic: histogram > 0 = bullish momentum 3. Bollinger Bands
Why it matters: Provides dynamic support/resistance levels that adapt to volatility. The bandwidth value is excellent for detecting volatility squeezes that precede big moves.
// data.indicators from GET /v1/indicators?symbol=EURUSD&timeframe=H1
{
"BB_upper": 1.0892,
"BB_middle": 1.0856,
"BB_lower": 1.0820,
"BB_width": 0.0066
}
// Bot logic: price < lower band + RSI < 30 = mean reversion buy 4. ATR (Average True Range)
Why it matters: Not a directional indicator — ATR measures volatility. Use it to set dynamic stop losses and calculate position sizes. Essential for risk management.
# Dynamic stop loss using ATR
atr = resp.json()["data"]["indicators"]["ATR_14"]
stop_loss = entry_price - (2.0 * atr) # 2x ATR below entry
take_profit = entry_price + (3.0 * atr) # 3x ATR above entry 5. ADX (Average Directional Index)
Why it matters: Tells you whether the market is trending or ranging. ADX above 25 means a trend is present; below 20 means it is range-bound. This one filter alone prevents your trend-following bot from getting chopped up in sideways markets.
# Only trade trend strategies when ADX confirms a trend
adx = resp.json()["data"]["indicators"]["ADX"]
if adx > 25:
# Market is trending — use MACD/EMA crossover strategy
pass
else:
# Market is ranging — use RSI mean reversion strategy
pass 6. EMA (Exponential Moving Average)
Why it matters: Faster than SMA, the EMA reacts to recent price changes more quickly. A fast/slow EMA crossover — the API publishes the 10, 20 and 50 period EMAs — is one of the simplest and most effective trend-following signals.
# EMA crossover detection
ema_10 = indicators["EMA_10"]
ema_20 = indicators["EMA_20"]
if ema_10 > ema_20:
trend = "BULLISH"
elif ema_10 < ema_20:
trend = "BEARISH" 7. Stochastic Oscillator
Why it matters: Similar to RSI but with a signal line crossover component. The %K/%D crossover in oversold/overbought zones produces clean entry signals, especially on higher timeframes.
// data.indicators from GET /v1/indicators?symbol=EURUSD&timeframe=H1
{
"Stochastic_K": 18.5,
"Stochastic_D": 22.1
}
// Bot logic: %K crosses above %D in oversold zone = buy 8. Ichimoku Cloud
Why it matters: A complete trading system in one indicator. It provides trend direction, support/resistance, and momentum all at once. Complex for humans to read, but perfect for a bot. The API publishes three of its lines — Tenkan-sen, Kijun-sen and Senkou Span A.
# Ichimoku trend filter
tenkan = indicators["Ichimoku_tenkan"]
kijun = indicators["Ichimoku_kijun"]
senkou_a = indicators["Ichimoku_senkou_a"]
# Span A, Tenkan and Kijun are published; Span B is not — derive it from
# /v1/ohlc if you need the full cloud (see the Ichimoku guide below).
if current_price > senkou_a and tenkan > kijun:
signal = "STRONG_BULLISH" 9. OBV (On-Balance Volume)
Why it matters: Volume confirms price moves. Rising OBV with rising price confirms the trend. Divergence between OBV and price often precedes reversals. Essential for filtering false breakouts.
# OBV divergence detection — the API returns the current value, so pull the
# previous one from the history endpoint.
series = requests.get("https://tickatlas.com/v1/indicator/history", params={
"symbol": "EURUSD", "indicator": "OBV", "timeframe": "H1", "limit": 2
}, headers={"X-API-Key": API_KEY}).json()["data"]["series"]
obv_rising = series[-1]["value"] > series[-2]["value"]
price_rising = current_price > previous_price
if price_rising and not obv_rising:
print("Warning: bearish OBV divergence — trend may reverse") 10. Parabolic SAR
Why it matters: Provides clear trailing stop levels. When the dots flip from below to above price, it signals a trend change. Excellent as a trailing stop mechanism for bots that need to ride trends.
# Parabolic SAR trailing stop
sar = indicators["SAR"]
if current_price > sar:
# Uptrend — SAR is the trailing stop level
stop_loss = sar
else:
# Downtrend signal — exit long positions
signal = "EXIT_LONG" How to Combine Them
Do not use all 10 at once. Pick 2-3 indicators from different families for a balanced strategy:
- Trend + Momentum: EMA crossover + RSI confirmation
- Volatility + Oscillator: Bollinger Bands + Stochastic
- Trend filter + Entry: ADX trend filter + MACD signal crossover
- All-in-one: Ichimoku for direction + ATR for position sizing
One /v1/indicators call returns all 42 indicators for a symbol and timeframe, so fetch once and read the keys you need from the flat map. Narrow it with category (trend, oscillator, volatility, volume), or use /v1/multi when you need several symbols in one request.
Further Reading
Run this against live data.
Every account starts pay-as-you-go with $2.50 of credit and no card. Paste the key into the samples above and the requests work unchanged.