Basic Screener
Loop through symbols and filter by RSI levels:
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://tickatlas.com/v1"
headers = {"X-API-Key": API_KEY}
symbols = ["EURUSD", "GBPUSD", "USDJPY", "AUDUSD", "XAUUSD",
"USDCAD", "EURGBP", "EURJPY", "GBPJPY", "BTCUSD"]
def screen(symbols, timeframe="H1"):
results = []
for sym in symbols:
rsi = requests.get(f"{BASE}/indicator",
headers=headers,
params={"symbol": sym, "indicator": "RSI_14", "timeframe": timeframe}
).json()["data"]
if rsi["value"] < 30:
results.append({"symbol": sym, "rsi": rsi["value"], "signal": "OVERSOLD"})
elif rsi["value"] > 70:
results.append({"symbol": sym, "rsi": rsi["value"], "signal": "OVERBOUGHT"})
return results
hits = screen(symbols)
for h in hits:
print(f"{h['symbol']}: RSI={h['rsi']:.1f} ({h['signal']}") Batch Screener with Multi Endpoint
Use the /v1/multi endpoint for much better performance — one API call instead of 10:
# More efficient: use the /v1/multi endpoint
params = {
"symbols": ",".join(symbols),
"indicators": "RSI_14,ADX,MACD_hist",
"timeframe": "H1"
}
resp = requests.get(f"{BASE}/multi", headers=headers, params=params).json()
# data.data maps each symbol to a flat {indicator_name: float} dict.
for sym, indicators in resp["data"]["data"].items():
rsi = indicators.get("RSI_14", 50)
adx = indicators.get("ADX", 0)
macd = indicators.get("MACD_hist", 0)
if rsi < 30 and adx > 25 and macd > 0:
print(f"STRONG BUY: {sym} (RSI={rsi:.1f}, ADX={adx:.1f})")
elif rsi > 70 and adx > 25 and macd < 0:
print(f"STRONG SELL: {sym} (RSI={rsi:.1f}, ADX={adx:.1f})") Screener Ideas
Production hardening
The code above is the happy path. These are the concerns that decide whether it survives contact with a real deployment.
Next Steps
Everything this guide touches, linked directly — so it never dead-ends.