EMA 9−21 Spread (%)
EMA 9 minus 21 (%).
What it measures
The gap between the 9-period and 21-period EMAs, normalized by price: (EMA9 − EMA21) / price. The classic fast-cross pair served as a continuous value instead of a binary crossover event — the sign carries the cross state, the magnitude the separation, and the normalization makes it comparable across assets. Per timeframe via the window axis.
References: Multi-timeframe indicators.
Point-in-time, leak-free
Like every QUANT_API feature, technicals.ema_9_21 is computed point-in-time: each value uses only data that had actually arrived at the timestamp you query — live or historical. No restatements, no backfills that quietly rewrite the past, no look-ahead. The value your backtest sees at a given stamp is the value the live API would have returned at that stamp. How we enforce this is documented on the methodology page.
Windows & transforms
The signal is computed over rolling windows; each window can be served raw or through a transform (z-score, percentile rank, delta…). Which windows and transforms you can query depends on your plan — the signal itself supports:
Plan & access
technicals.ema_9_21 unlocks on the Signal plan ($99/mo) and every plan above it. Every new account starts with a 14-day free trial of the Signal plan — no card required.
Example call
Resolve the latest value for BTC (1h window, level transform — both available on the Signal plan):
curl -G https://api.quant-api.dev/v1/features/live \
-H "Authorization: Bearer fk_live_<your_key>" \
--data-urlencode "asset=BTC" \
--data-urlencode "features=technicals.ema_9_21@1h:level"Same key works on /v1/features/historical for point-in-time backtesting — see the API docs.