🔍

Double Bottom is a bullish reversal pattern with two troughs at approximately the same price level, forming a 'W' shape and signaling the end of a downtrend.

Common parameters

All indicator requests share these parameters. See Single Indicator for details.

NameTypeRequiredDefaultDescription
exchangestringYesExchange identifier, e.g. binance, bybit.
symbolstringYesTrading pair, e.g. BTCUSDT.
timeframestringYesCandle interval: 1m, 5m, 15m, 1h, 4h, 1d, 1w.
resultsintegerNo1Number of historical values. Use max for all available.
backtrackintegerNo0Candles to skip from most recent.

Indicator parameters

NameTypeRequiredDefaultDescription
depthintegerNo10Lookback and lookforward period for pivot detection. Controls the width of structural swings.
deviationATRnumberNo1Minimum retracement required to form a valid structural swing, expressed as a multiple of ATR.
deviationTypestringNoatrType of deviation filter to use: 'atr' (Average True Range) or 'percent'.
sourcestringNowickWhether to use 'wick' (high/low) or 'body' (open/close) prices for pivot detection.
heikinashibooleanNoTrueSet to true to calculate pivots based on smoothed Heikin-Ashi candles rather than raw market prices.
atrPeriodintegerNo14The lookback period used for the Average True Range (ATR) calculation if deviationType is 'atr'.
bottomToleranceATRnumberNo0.75Maximum allowed price difference between the two bottoms, normalized by ATR.
minHeightATRnumberNo1.5Minimum required height of the pattern (neckline peak to first bottom), normalized by ATR.
symmetryMinnumberNo0.3Minimum ratio of time spent forming the left side vs the right side of the pattern.
symmetryMaxnumberNo4Maximum ratio of time spent forming the left side vs the right side of the pattern.
breakoutLookaheadintegerNo20Number of candles to look ahead after the second bottom to confirm a breakout.
necklineBuffernumberNo0.1ATR-based buffer above the neckline to filter out false breakouts during formation.

Example

curl -G https://v2.taapi.io/indicator/doublebottom \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --data-urlencode "exchange=binance" \
  --data-urlencode "symbol=BTCUSDT" \
  --data-urlencode "timeframe=1h" \
  --data-urlencode "depth=10" \
  --data-urlencode "deviationATR=1" \
  --data-urlencode "deviationType=atr" \
  --data-urlencode "source=wick" \
  --data-urlencode "heikinashi=True" \
  --data-urlencode "atrPeriod=14" \
  --data-urlencode "bottomToleranceATR=0.75" \
  --data-urlencode "minHeightATR=1.5" \
  --data-urlencode "symmetryMin=0.3" \
  --data-urlencode "symmetryMax=4" \
  --data-urlencode "breakoutLookahead=20" \
  --data-urlencode "necklineBuffer=0.1"
const res = await fetch(
  'https://v2.taapi.io/indicator/doublebottom?exchange=binance&symbol=BTCUSDT&timeframe=1h',
  { headers: { Authorization: 'Bearer YOUR_API_KEY' } }
);
const data = await res.json();
import requests

resp = requests.get(
    'https://v2.taapi.io/indicator/doublebottom',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    params={'exchange': 'binance', 'symbol': 'BTCUSDT', 'timeframe': '1h'}
)
print(resp.json())

Response

Results are always wrapped in arrays, even when only one value is returned.

200 OK
{
  "l1_timestamp": [1708300800],
  "l1_price": [0.0],
  "h1_timestamp": [1708300800],
  "h1_price": [0.0],
  "l2_timestamp": [1708300800],
  "l2_price": [0.0],
  "neckline_level": [0.0],
  "neckline_right_timestamp": [1708300800],
  "breakout_neckline_price": [0.0],
  "breakout_occurred": [0.0],
  "is_confirmed": [0.0],
  "breakout_timestamp": [1708300800],
  "breakout_price": [0.0],
  "projection_price": [0.0],
  "direction": [0.0],
  "status": [0.0],
  "status_reason": [0.0],
  "pattern_index": [0.0],
  "timestamp": [1708300800]
}

Errors

Response
{
  "l1_timestamp": [1708300800],
  "l1_price": [0.0],
  "h1_timestamp": [1708300800],
  "h1_price": [0.0],
  "l2_timestamp": [1708300800],
  "l2_price": [0.0],
  "neckline_level": [0.0],
  "neckline_right_timestamp": [1708300800],
  "breakout_neckline_price": [0.0],
  "breakout_occurred": [0.0],
  "is_confirmed": [0.0],
  "breakout_timestamp": [1708300800],
  "breakout_price": [0.0],
  "projection_price": [0.0],
  "direction": [0.0],
  "status": [0.0],
  "status_reason": [0.0],
  "pattern_index": [0.0],
  "timestamp": [1708300800]
}

Data is being fetched. Retry after 1–2 seconds.

Response
{ "pending": true, "key": "ta:binance:BTCUSDT:1h:doublebottom:..." }
Response
{ "error": "Missing required: exchange, symbol, timeframe" }
Response
{ "error": "Invalid or missing API key." }
Response
{ "error": "Rate limit exceeded. Your plan allows 30 requests per 15 seconds." }

← Back to Indicators Directory