Frequently asked questions
Signals, clarified.
Where they actually live, why array length is not strength, how confidence is derived,
and what the generated text field is for.
Is there a dedicated signals endpoint?
No. Signals are fields, not a route. The live per-symbol source is GET /v1/summary, which returns bullish_signals, bearish_signals and neutral_signals alongside the scores that produced them. The whole-market source is the cached market-insights card set, which carries bullish_count and bearish_count for every symbol on a timeframe at no quota cost. Anything you may have seen documented as a standalone signals path would return a 404.
Are signals weighted by how many indicators agree?
No, and this is the most common misreading. Every weight is a constant attached to the individual condition, fixed in the endpoint: price against the 200 SMA and an extreme MFI are worth ±2, most conditions are ±1 or ±0.5, and 17 of the 47 conditions add exactly zero while still writing a signal string. There is no regime detector, no reliability weighting and no promotion of one indicator over another based on market conditions. Counting the length of bullish_signals is therefore not the same as reading trend_score.
How is confidence calculated?
From the score band alone. The trend and momentum scores are added; that single total selects the bias and strength at fixed boundaries of ±2 and ±4, and confidence is a closed-form expression of the same total — capped at 0.9 and, in practice, never below 0.4. It is not a probability, it is not calibrated against outcomes, and it does not rise because more conditions fired.
Why does a symbol have bullish and bearish signals at the same time?
Because the arrays record every condition that fired, not a verdict. A market can be above its 200 SMA (bullish, +2) while its RSI sits at 38 (bearish, −0.5); both sentences appear and the score keeps the net. That is the point of returning the trace beside the number — you can see what the bias was built from rather than trusting it.
Do the volatility and volume conditions affect the bias?
Neither one. Only the trend and momentum scores are summed into the total. Volatility conditions score zero outright. Volume conditions do produce a score, and that score sets signals.volume, but the volume total is never added to the bias — so an MFI extreme worth ±2 moves a category light and leaves the verdict untouched.
Which timeframes are covered?
M1, M5, M15, M30, H1, H4, D1 on /v1/summary — the same seven every indicator endpoint accepts, defaulting to H1. The pre-computed market-insights cards cover four of them: M30, H1, H4 and D1. There is no cross-timeframe agreement field on either surface; comparing timeframes is one call per timeframe and a comparison in your own code.
How many indicator series does one call read?
26 — the distinct series named by the 47 conditions. The platform publishes 42 series in total, so a summary is a documented subset, not everything. It reads them from the cache rather than calculating anything: the values were computed when our data last updated.
What is the recommendations field?
A short list of generated strings chosen by the bias band, plus a volatility clause. TickAtlas publishes market data and computed analytics for software use; it does not provide personalised investment advice and it does not reproduce the wording of that field in its own documentation. The field is documented here by name, type and origin so your integration can handle it — and note that the first entry is also spliced into the end of the generated summary paragraph, so anything that renders summary verbatim renders that clause too.
What does a call cost?
One /v1/summary call counts once against your daily quota and costs 5 weighted units of pay-as-you-go credit — the premium tier, alongside /v1/indicator/history. The key needs the indicators permission scope. There is no plan gate for developer API keys, so a pay-as-you-go account can call it on its $2.50 of starting credit. The cached market-insights teasers cost no quota at all, because usage accounting only applies to paths beginning /v1/.
How often is it worth polling?
Values change when our data updates, which is about every 60 seconds for the fast timeframes and every 10 to 30 minutes for the slower ones. Polling faster returns the same numbers and spends 5× each time. updated_at tells you whether anything moved; the honest cadence is one call per new candle on the timeframe you asked for.