# Technicals (`ta_technicals`)

> Multi-timeframe trend, RSI, MACD, ADX, ATR, volatility and structure, calculated from candles. Choose spot, perp or automatic routing, with source coverage and partial-candle handling disclosed.

- Category: Technicals
- MCP tool: `ta_technicals`
- REST: `GET /technicals/{symbol}`
- MCP App: hosts that support MCP Apps render the result as an interactive view
- x402 price: $0.02 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/ta_technicals

## What it does

Multi-timeframe technical-analysis snapshot for one coin, computed locally from real candles (not a vendor black box): per interval — last close, RSI(14), EMA20/50/200 + SMA200, MACD(12,26,9) with signal/histogram/cross freshness, ATR(14) with 2xATR stop suggestions (feed research_trade_plan), Bollinger(20,2) with %B and bandwidth, ADX(14) with +DI/-DI, volume vs 20-candle average, and a transparent trend rule (EMA alignment qualified by ADX). 'intervals' picks the timeframes (default 1h,4h,1d; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w); 'market' routes candles (spot|perp|auto, default auto: spot preferred; perp when spot fails or a recent spot listing has too little history for the indicators). Support/resistance comes from the same candles: daily swing highs/lows over the last year, clustered within half a daily ATR, nearest 3 on each side with distance, swing count and last touch, plus the year's range. For levels from executed perp flow (volume at price, liquidations, OI), use flow_levels.

## Parameters

| Name | Type | In | Required | Description |
| --- | --- | --- | --- | --- |
| `symbol` | string | path | yes | Coin symbol, e.g. 'ETH' or 'BTC' |
| `intervals` | string[] | query | no | Candle intervals to analyze, e.g. ["4h","1d"]. Default ["1h","4h","1d"]; max 4 of 1m\|5m\|15m\|30m\|1h\|4h\|12h\|1d\|1w |
| `market` | string | query | no | Which candle series: 'spot', 'perp', or 'auto' (default: spot preferred; perp when spot fails or its history is too short) |

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/technicals/ETH?intervals=4h,1d" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ta_technicals",
    "arguments": {
      "symbol": "ETH",
      "intervals": [
        "4h",
        "1d"
      ]
    }
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/technicals/ETH?intervals=4h,1d", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/technicals/ETH?intervals=4h,1d",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ta_technicals",
    "arguments": {
      "symbol": "ETH",
      "intervals": [
        "4h",
        "1d"
      ]
    }
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "ta_technicals",
    "arguments": {
      "symbol": "ETH",
      "intervals": [
        "4h",
        "1d"
      ]
    },
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/technicals/ETH?intervals=4h,1d"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "discardedIntervals": [],
  "failedIntervals": [],
  "lastPriceUsd": 1934.52,
  "levels": {
    "interval": "1d",
    "measuredFromUsd": 1934.52,
    "rangeHighAt": "2025-11-13T00:00:00.0000000+00:00",
    "rangeHighUsd": 3565.84,
    "rangeLowAt": "2026-06-06T00:00:00.0000000+00:00",
    "rangeLowUsd": 1505.68,
    "resistances": [
      {
        "distancePct": 0.245538945061307,
        "lastTouchAt": "2026-08-07T00:00:00.0000000+00:00",
        "priceUsd": 1939.27,
        "swings": 9
      },
      {
        "distancePct": 4.22068523458016,
        "lastTouchAt": "2026-05-23T00:00:00.0000000+00:00",
        "priceUsd": 2016.17,
        "swings": 2
      },
      {
        "distancePct": 8.16378223021731,
        "lastTouchAt": "2026-05-18T00:00:00.0000000+00:00",
        "priceUsd": 2092.45,
        "swings": 2
      }
    ],
    "supports": [
      {
        "distancePct": -5.9785717731875,
        "lastTouchAt": "2026-08-11T00:00:00.0000000+00:00",
        "priceUsd": 1818.86333333333,
        "swings": 9
      },
      {
        "distancePct": -12.5046523168538,
        "lastTouchAt": "2026-07-08T00:00:00.0000000+00:00",
        "priceUsd": 1692.615,
        "swings": 2
      },
      {
        "distancePct": -22.004424870252,
        "lastTouchAt": "2026-06-26T00:00:00.0000000+00:00",
        "priceUsd": 1508.84,
        "swings": 2
      }
    ],
    "toleranceUsd": 48.3663407077018,
    "windowCandles": 365
  },
  "referencePriceUsd": 1933.15,
  "symbol": "ETH",
  "timeframes": [
    {
      "adx14": 56.4188597718765,
      "asOfAt": "2026-11-13T04:00:00.0000000+00:00",
      "asOfMs": 1794542400000,
      "atr14Pct": 2.05008801613496,
      "atr14Usd": 39.6593626897341,
      "bollinger": {
        "bandwidthPct": 9.15542956253747,
        "lowerUsd": 1951.00165802505,
        "middleUsd": 2044.5975,
        "percentB": -0.0880469563458775,
        "upperUsd": 2138.19334197495
      },
      "closedCandles": 399,
      "droppedPartialCandle": true,
      "ema200Usd": 2302.0072046583,
      "ema20Usd": 2045.05493345723,
      "ema50Usd": 2127.46528586039,
      "interval": "4h",
      "lastCloseUsd": 1934.52,
      "macd": {
        "aboveSignal": false,
        "candlesSinceCross": 2,
        "histogram": -6.21884173933634,
        "macd": -51.5070671924973,
        "signal": -45.2882254531609
      },
      "market": "spot",
      "minusDi14": 45.0363412977679,
      "plusDi14": 6.42689149995672,
      "rsi14": 22.1937075251791,
      "sma200Usd": 2324.15735,
      "source": "Binance",
      "trend": "downtrend (close < EMA50 < EMA200), ADX 56.4 (trending)",
      "volumeAvg20Usd": 90439090.5660812,
      "volumeLastClosedUsd": 187245235.721526
    },
    {
      "adx14": 26.5033205700375,
      "asOfAt": "2026-11-12T00:00:00.0000000+00:00",
      "asOfMs": 1794441600000,
      "atr14Pct": 4.78936305739767,
      "atr14Usd": 96.7326814154838,
      "bollinger": {
        "bandwidthPct": 19.299763744674,
        "lowerUsd": 2024.49858791726,
        "middleUsd": 2240.726,
        "percentB": -0.011003664779183,
        "upperUsd": 2456.95341208274
      },
      "closedCandles": 399,
      "droppedPartialCandle": true,
      "ema200Usd": 2323.09777459267,
      "ema20Usd": 2226.946599274,
      "ema50Usd": 2334.23192033727,
      "interval": "1d",
      "lastCloseUsd": 2019.74,
      "macd": {
        "aboveSignal": false,
        "candlesSinceCross": 5,
        "histogram": -19.7315278665382,
        "macd": -97.053708531485,
        "signal": -77.3221806649468
      },
      "market": "spot",
      "minusDi14": 29.8773199729975,
      "plusDi14": 12.209942488498,
      "rsi14": 28.1181392951025,
      "sma200Usd": 2150.6548,
      "source": "Binance",
      "trend": "mixed (close below EMA50, below EMA200), ADX 26.5 (trending)",
      "volumeAvg20Usd": 512966545.430985,
      "volumeLastClosedUsd": 479884504.609204
    }
  ],
  "generatedAt": "2026-11-13T04:00:00.0000000+00:00"
}
```

Over MCP the text report a model reads comes with it:

```text
=== ETH technicals — computed from candles across 2 timeframes ===
Last price $1934.52 (4h spot close, Binance)

--- 4h (spot, Binance, 399 closed candles) (partial newest candle dropped) ---
Close $1934.52 | trend: downtrend (close < EMA50 < EMA200), ADX 56.4 (trending)
RSI(14) 22.2 | ATR(14) $39.6594 (2.05% of price)
EMA20 $2045.05 | EMA50 $2127.47 | EMA200 $2302.01 | SMA200 $2324.16
MACD(12,26,9) -51.51 | signal -45.29 | histogram -6.219 (below signal, crossed 2 candles ago)
Bollinger(20,2) $1951.00 - $2138.19 | %B -0.09 | bandwidth 9.2%
ADX(14) 56.4 | +DI 6.4 | -DI 45.0
Volume (last closed) $187.25M vs 20-candle avg $90.44M (2.1x)
2xATR stops from close: long $1855.20 / short $2013.84 (feed research_trade_plan)

--- 1d (spot, Binance, 399 closed candles) (partial newest candle dropped) ---
Close $2019.74 | trend: mixed (close below EMA50, below EMA200), ADX 26.5 (trending)
RSI(14) 28.1 | ATR(14) $96.7327 (4.79% of price)
EMA20 $2226.95 | EMA50 $2334.23 | EMA200 $2323.10 | SMA200 $2150.65
MACD(12,26,9) -97.05 | signal -77.32 | histogram -19.73 (below signal, crossed 5 candles ago)
Bollinger(20,2) $2024.50 - $2456.95 | %B -0.01 | bandwidth 19.3%
ADX(14) 26.5 | +DI 12.2 | -DI 29.9
Volume (last closed) $479.88M vs 20-candle avg $512.97M (0.9x)
2xATR stops from close: long $1826.27 / short $2213.21 (feed research_trade_plan)

--- Support / resistance (1d swings, last 365 closed candles, clustered within $48.3663; distances from $1934.52) ---
Resistance: $1939.27 (+0.2%, 9 swings, last 2026-08-07) | $2016.17 (+4.2%, 2 swings, last 2026-05-23) | $2092.45 (+8.2%, 2 swings, last 2026-05-18)
Support: $1818.86 (-6.0%, 9 swings, last 2026-08-11) | $1692.62 (-12.5%, 2 swings, last 2026-07-08) | $1508.84 (-22.0%, 2 swings, last 2026-06-26)
Window range: low $1505.68 (2026-06-06) – high $3565.84 (2025-11-13)
```

## Related tools

- [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call.
- [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching.
- [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge.
- [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored.
