🔍

Descending Triangle is a bearish continuation pattern with a flat lower support line and a declining upper resistance line, typically resolving with a downside breakdown.

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
lookbackintegerNo5Bars left for pivot detection.
lookforwardintegerNo5Bars right for pivot detection.
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.
touchesintegerNo2Minimum number of high/low pairs required to form the pattern.
bottomToleranceATRnumberNo0.75Maximum allowed price difference between the bottom support touches, normalized by ATR.
minDescentATRnumberNo0Minimum required downward slope between the descending top touches, normalized by ATR.
invalidationClosesintegerNo2Number of consecutive candle closes above the descending resistance line to invalidate the pattern.

Example

curl -G https://v2.taapi.io/indicator/triangledescending \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --data-urlencode "exchange=binance" \
  --data-urlencode "symbol=BTCUSDT" \
  --data-urlencode "timeframe=1h" \
  --data-urlencode "lookback=5" \
  --data-urlencode "lookforward=5" \
  --data-urlencode "deviationATR=1" \
  --data-urlencode "deviationType=atr" \
  --data-urlencode "source=wick" \
  --data-urlencode "heikinashi=True" \
  --data-urlencode "atrPeriod=14" \
  --data-urlencode "touches=2" \
  --data-urlencode "bottomToleranceATR=0.75" \
  --data-urlencode "minDescentATR=0" \
  --data-urlencode "invalidationCloses=2"
const res = await fetch(
  'https://v2.taapi.io/indicator/triangledescending?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/triangledescending',
    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
{
  "pattern_pivot_timestamps": [1708300800],
  "pattern_pivot_prices": [0.0],
  "support_level": [0.0],
  "support_right_timestamp": [1708300800],
  "resistance_left_timestamp": [1708300800],
  "resistance_left_price": [0.0],
  "resistance_right_timestamp": [1708300800],
  "resistance_right_price": [0.0],
  "breakout_occurred": [0.0],
  "is_confirmed": [0.0],
  "breakout_timestamp": [1708300800],
  "breakout_price": [0.0],
  "breakout_support_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
{
  "pattern_pivot_timestamps": [1708300800],
  "pattern_pivot_prices": [0.0],
  "support_level": [0.0],
  "support_right_timestamp": [1708300800],
  "resistance_left_timestamp": [1708300800],
  "resistance_left_price": [0.0],
  "resistance_right_timestamp": [1708300800],
  "resistance_right_price": [0.0],
  "breakout_occurred": [0.0],
  "is_confirmed": [0.0],
  "breakout_timestamp": [1708300800],
  "breakout_price": [0.0],
  "breakout_support_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:triangledescending:..." }
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