Skip to main content

Technical Indicators API Reference

Fonrex computes 18 indicators with pandas-ta on the prices stored in the database. Ingest a listing before asking for its indicators (GET /eod/{ticker} or POST /historical/ingest). Without prices, GET /technical/{ticker} answers 404; /multi and /chart answer with no bars and the reason in errors.

CategoryIndicators (default parameters)
Trendsma (20), ema (20), wma (20), dema (20), tema (20), vwap (intraday only)
Momentumrsi (14), macd (12, 26, 9), stoch (14, 3, 3), cci (20), roc (10), mom (10)
Volatilitybbands (20, 2.0), atr (14), kc (20)
Volumeobv, ad, mfi (14)

GET /technical/list returns this catalogue with the parameters, the output columns and the minimum number of bars of each indicator.

Resolutions 1D (default), 1W and 1M read the end-of-day prices of the listing; an intraday resolution such as 1min reads the 1-minute candles saved by the realtime stream (prices_intraday). Results are cached in Redis (1 hour for daily bars, 60 seconds for 1-minute bars) when TECHNICAL_CACHE_ENABLED=true.


GET /technical/{ticker}​

One indicator.

ParameterTypeDefaultDescription
indicatorstringrsiIndicator name
periodinteger—Sets the length parameter (not used by macd and stoch, which take fast/slow/signal or their defaults)
fast, slow, signalinteger—MACD parameters
stdnumber—Bollinger standard deviations
resolutionstring1D1D, 1W, 1M, or intraday (1min)
from_date, to_datedate—Window YYYY-MM-DD
limitinteger500Bars loaded (TECHNICAL_DEFAULT_LIMIT)
curl -s -H "X-API-KEY: $FONREX_API_KEY" \
"http://localhost:5000/technical/AIR.PA?indicator=rsi&period=14&limit=60"
{
"ticker": "AIR.PA",
"indicator": "rsi",
"params": { "length": 14 },
"resolution": "1D",
"category": "momentum",
"from_date": "2026-07-16T00:00:00Z",
"to_date": "2026-10-07T00:00:00Z",
"count": 60,
"series": [
{
"name": "RSI_14",
"label": "RSI",
"values": [
{ "t": "2026-07-16T00:00:00Z", "v": null },
{ "t": "2026-10-07T00:00:00Z", "v": "74.81" }
]
}
],
"cached": false,
"calculated_at": "2026-10-08T16:34:58Z"
}

An indicator with several outputs (MACD, Bollinger Bands, Stochastic…) has one entry per output in series. Values are decimal strings, null while the indicator has too few bars.

CodeWhen
400Unknown indicator, or VWAP asked on daily bars
404No prices stored for the ticker
422Not enough bars for the parameters

GET /technical/{ticker}/multi​

Several indicators computed on one read of the prices.

ParameterTypeDefaultDescription
indicatorsstringsma_20,ema_50,rsi_14,macdComma-separated names; a suffix sets the first parameter (sma_50, bbands_20)
resolution, from_date, to_date, limitAs above
include_ohlcvbooleanfalseAlso return the bars

The answer holds one result per indicator in indicators (same format as above) and the failures in errors.


GET /technical/{ticker}/chart​

Bars and indicator columns aligned on the same timestamps, ready for a charting library.

ParameterDefault
indicatorssma_20,ema_50,volume
limit200
{
"ticker": "AIR.PA",
"resolution": "1D",
"timestamps": ["2026-08-27", "2026-08-28"],
"ohlcv": { "open": [158.14, 157.45], "high": [160.14, 159.45], "low": [156.14, 155.45], "close": [159.14, 158.45], "volume": [1359000, 1360000] },
"indicators": { "SMA_20": [null, null], "RSI_14": [null, 0.0] }
}

POST /technical/batch​

Several tickers at once. JSON body:

{
"tickers": ["AIR.PA", "BNP.PA", "MC.PA"],
"indicators": ["rsi_14", "sma_50"],
"resolution": "1D",
"from_date": null,
"to_date": null,
"limit": 500,
"include_ohlcv": false
}

At most TECHNICAL_MAX_BATCH_TICKERS tickers (20) and TECHNICAL_MAX_BATCH_INDICATORS indicators (10). The answer maps each ticker to a multi-indicator result. This route only computes: a read-only key may call it.


GET /technical/screen​

Instruments of the catalogue whose last value of an indicator meets a condition.

ParameterTypeDefaultDescription
indicatorstringrsiIndicator
operatorstringltlt, gt, lte, gte
valuenumber30Threshold
resolutionstring1DResolution
periodinteger14Indicator length
limitinteger50Maximum matches
{
"indicator": "rsi",
"params": { "length": 14 },
"operator": "gt",
"value": 50.0,
"resolution": "1D",
"matches": [ { "ticker": "AIR.PA", "name": "Airbus SE", "isin": "NL0000235190", "value": "74.81" } ],
"total": 1,
"calculated_at": "2026-10-08T16:34:59Z"
}

Screener results are cached 15 minutes.