Why Every Crypto Trading Regime Needs a Technical / Structural Overlay
Most trading strategies fire on a state — an oversold RSI, a 200-day moving average reclaim, a Bollinger band squeeze about to break. None of those are regimes on their own; they are structural overlays that pair with whatever regime you're already in.
A 200MA reclaim during a confirmed bull regime is a high-conviction long. The same reclaim during a liquidation cascade is a bull trap. The price-structure signal is identical; the context is what makes it tradable.
The new /api/v1/indicators/technical endpoint exposes the four canonical price-structure indicators — moving averages, Bollinger squeezes, range positions, and RSI extremes — for every asset in the Hyperliquid perps universe plus the top Binance USDT spot pairs. One call, ~630 symbols, computed every 30 minutes. It's Regime #14 in our regime taxonomy: the universal overlay.
What the Technical Regime Endpoint Returns
Each asset in the response carries four indicator blocks — moving-average state, Bollinger compression state, 20-day range state, and RSI extremes — plus current price and source (binance_spot or hyperliquid_perp).
curl -H "X-API-Key: cdk_live_yourkey" \
"https://cryptodataapi.com/api/v1/indicators/technical?bb=in_squeeze&sort=squeeze_days&order=desc&limit=5"One symbol in the response:
{
"symbol": "KLAY",
"source": "binance_spot",
"price": 0.1255,
"ma": {
"sma_200": 0.155928,
"above_200": false,
"dist_from_200_pct": -19.51,
"last_cross_200": null
},
"bollinger": {
"bandwidth_pct": 11.09,
"squeeze_percentile": 8.3,
"in_squeeze": true,
"days_in_squeeze": 14,
"expanding": false
},
"range_state": {
"low": 0.1173, "high": 0.1391,
"position_pct": 37.6, "zone": "mid"
},
"rsi": {
"rsi_14_1d": 48.2, "state_1d": "neutral",
"rsi_14_1h": 71.8, "state_1h": "overbought",
"extreme_duration_bars": 0
}
}That single record tells you KLAY is below its 200-day MA by 19.5%, has been in the tightest 10% of its 90-day Bollinger bandwidth for 14 consecutive days, sits mid-range on the daily, and is overbought on the 1-hour. A volatility breakout is structurally overdue.
The Four Price-Structure Signals, Decoded
Each block answers a different structural question. Combine them or read them separately — the screener supports independent filters per indicator.
- Moving averages.
sma_50,sma_100,sma_200plusabove_Xbooleans anddist_from_X_pct. Thelast_cross_200field reports the most recent SMA-50 / SMA-200 crossover direction (goldenordeath) withdays_since_cross_200, so an agent can detect a fresh reclaim or breakdown in one read. - Bollinger compression. 20-period, 2-σ bands.
bandwidth_pctis the current width as a percent of mid.squeeze_percentileranks today's width in its trailing 90-day distribution — a percentile of 8.3 means today's bandwidth is tighter than 91.7% of the last 90 days.in_squeezefires when that percentile is ≤ 20.days_in_squeezecounts consecutive bars in squeeze;expandingflips true when bandwidth rises above its value 3 bars ago. - Range state. Rolling 20-day high/low.
position_pctplaces current price on a 0-100 scale within the range.zoneresolves tonear_low,mid, ornear_highusing a 15% edge buffer — useful for systematic range fades. - RSI extremes. Wilder RSI(14) on daily and 1h closes.
state_1dclassifies asoversold(≤30),neutral, oroverbought(≥70).extreme_1dfires only on RSI > 80 or < 20.extreme_duration_barscounts consecutive recent bars sitting in the extreme zone — the longer the streak, the higher the mean-reversion probability.
How Do I Screen for Specific Technical Setups via the API?
The endpoint accepts independent filters per indicator. Stack them to build high-conviction screens.
| Setup | Query string |
|---|---|
| Volatility breakouts brewing | ?bb=in_squeeze&sort=squeeze_days&order=desc |
| Fresh 200MA reclaims (last 10d) | ?ma_state=reclaim_200 |
| Sustained oversold | ?rsi=oversold&min_days_in_state=2 |
| Mean-reversion fade candidates | ?range_zone=near_high&rsi=overbought |
| Trend continuation longs | ?ma_state=above_200&range_zone=near_high |
Available sort keys: squeeze_days, rsi_1d, bb_bandwidth, dist_from_200, position_in_range, symbol, price. Default limit is 250, max 500. The full screener is computed off a 30-minute TTL cache, so repeated queries are essentially free.
Technical Regime vs SIGNUM_RGG: Which Indicator When?
Crypto Data API exposes two computed trend layers. They answer different questions and the right approach is to read both.
| SIGNUM_RGG | Technical / Structural | |
|---|---|---|
| What it tells you | Trend direction state (red/grey/green) | Where price sits structurally inside that trend |
| Underlying math | ADX(14) + DMI with hysteresis | SMA cross + BB squeeze + RSI + range |
| Best at | Regime gating, days-in-color tracking | Entry timing inside a regime |
| Update cadence | Hourly (daily + 1h) | Every 30 minutes (daily + 1h RSI) |
| Endpoint | /indicators/signum-rgg | /indicators/technical |
Practical pattern: filter your universe with SIGNUM, time entries with Technical. A green-trend asset (SIGNUM) entering a Bollinger squeeze with RSI exiting oversold (Technical) is a higher-quality long than either signal alone.
Wiring the Technical Regime Into an AI Trading Agent
Two reads is usually enough — pull the universe-wide screener for candidate scanning, then pull the per-symbol detail for any candidates you want to act on.
import httpx
HDR = {"X-API-Key": "cdk_live_yourkey"}
BASE = "https://cryptodataapi.com/api/v1/indicators/technical"
# 1. Find assets in a sustained Bollinger squeeze
squeezed = httpx.get(
BASE, headers=HDR,
params={"bb": "in_squeeze", "sort": "squeeze_days",
"order": "desc", "limit": 20},
).json()["items"]
# 2. For each, pull detail with 60d history
for r in squeezed[:5]:
detail = httpx.get(f"{BASE}/{r['symbol']}", headers=HDR).json()
print(r['symbol'], detail['bollinger']['days_in_squeeze'],
'in_squeeze', '|', detail['rsi']['state_1d'])For backtests, the same summary is included in every archived daily snapshot under technical_regime — 90 days of history is already backfilled, so you can replay regime-tagged simulations without computing indicators yourself.
curl -H "X-API-Key: cdk_live_yourkey" \
"https://cryptodataapi.com/api/v1/backtesting/daily-snapshots/2026-05-15" \
| jq '.snapshot.technical_regime'{
"total": 629,
"above_200ma": 93,
"in_squeeze": 85,
"overbought_1d": 13,
"oversold_1d": 86,
"top_in_squeeze": ["KLAY", "FET", "..."],
"backfilled": true
}
When to Reach for the Technical Regime
This endpoint earns its keep in three concrete scenarios:
- Entry timing inside a known regime. SIGNUM tells you it's a bull. Technical tells you whether to chase the breakout or wait for a range fade. Stack the two and you cut bad-entry slippage.
- Volatility-breakout pre-positioning. Filter
bb=in_squeeze&sort=squeeze_daysdaily. The longer the squeeze, the more asymmetric the upcoming expansion. Pair with funding-rate extremes for direction bias. - Mean-reversion fades during chop. When SIGNUM shows grey across the majors,
range_zone=near_high&rsi=overboughtsurfaces fade candidates with the highest hit rate. Avoid these filters during confirmed trends — fades into trending markets are how accounts die.
What this endpoint isn't: a standalone alpha signal. Technical setups fire constantly. Treating every BB squeeze as a buy is how you over-trade. Always pair with regime context — that's why we built the full regime taxonomy.



