...

Ultra Indicators

Systematic trading tools for volatility and trend identification (ATR, ADX, CCI, PSAR).

The Ultra Tier indicators are staples in algorithmic trading systems. They are less about "Buy/Sell" signals and more about measuring market state—is it trending? Is it volatile?


A measure of volatility introduced by Welles Wilder. It does not indicate price direction, only the degree of price movement. It decomposes the "True Range" of an asset for that period.

  • Endpoint: /api/indicators/atr
  • Method: POST
NameTypeDefaultDescription
periodinteger14The smoothing period.

Returns an array of numbers (the ATR value).

[ 250.5, 245.2, 260.8, ... ]
  • Volatility Measurement: Higher ATR means higher volatility.
  • Stop Loss Sizing: Traders often place stop-losses at Price - (2 * ATR) to avoid market noise.
Note

[!TIP] A sudden spike in ATR often signals a breakout or a news event.

import { IndicatorsApi, CandlesApi } from "tickcatcher";
 
// 1. Get Candles
const candles = await new CandlesApi(config).basicCandles({ symbol: "SOLUSDT", timeframe: "1h", limit: 100 });
 
// 2. Calculate ATR
const values = await new IndicatorsApi(config).atr({ 
    atrRequest: {
        data: candles, 
        params: { period: 14 }
    }
});
 
console.log(`Current ATR: ${values[values.length - 1]}`);

Used to determine the strength of a trend, not the direction. It is often plotted alongside +DI and -DI lines (though this endpoint primarily returns the ADX value).

  • Endpoint: /api/indicators/adx
  • Method: POST
NameTypeDefaultDescription
periodinteger14The calculation period.
[
  {
    "adx": 25.5,
    "pdi": 28.1,
    "mdi": 15.2
  }
]
  • < 20: Weak trend / Ranging. Strategies should focus on mean reversion.
  • > 25: Strong trend. Trend-following strategies work best.
  • > 50: Extremely strong trend. Be wary of exhaustion.
import { IndicatorsApi, CandlesApi } from "tickcatcher";
 
// 1. Get Candles
const candles = await new CandlesApi(config).basicCandles({ symbol: "SOLUSDT", timeframe: "1h", limit: 100 });
 
// 2. Calculate ADX
const values = await new IndicatorsApi(config).adx({ 
    adxRequest: {
        data: candles, 
        params: { period: 14 }
    }
});
 
const last = values[values.length - 1];
console.log(`ADX Strength: ${last.adx}`);

A versatile indicator used to identify a new trend or warn of extreme conditions. Unlike RSI, it is unbounded (can go above 100 or below -100).

  • Endpoint: /api/indicators/cci
  • Method: POST
NameTypeDefaultDescription
periodinteger20The cycle period.

Returns an array of numbers.

[ 95.5, 102.1, 88.4, ... ]
  • Check Points: +100 and -100 are the key levels.
  • Signals: Moving above +100 suggests a strong uptrend. Moving below -100 suggests a strong downtrend.
import { IndicatorsApi, CandlesApi } from "tickcatcher";
 
// 1. Get Candles
const candles = await new CandlesApi(config).basicCandles({ symbol: "SOLUSDT", timeframe: "1h", limit: 100 });
 
// 2. Calculate CCI
const values = await new IndicatorsApi(config).cci({ 
    cciRequest: {
        data: candles, 
        params: { period: 20 }
    }
});
 
console.log(`Current CCI: ${values[values.length - 1]}`);

A trend-following indicator that plots points above or below prices. When the dots flip, it signals a potential reversal.

  • Endpoint: /api/indicators/psar
  • Method: POST
NameTypeDefaultDescription
stepnumber0.02The acceleration factor.
maxnumber0.2The maximum acceleration factor.

Returns an array of numbers (the SAR price dots).

[ 64000.5, 64100.2, ... ]
  • Position: If the dots are below candles, the trend is Bullish. If above, Bearish.
  • Reversal: When the price hits the PSAR dot, the dot typically flips to the other side, signaling a reversal.
Note

[!TIP] PSAR is excellent for setting trailing stops. Move your stop-loss to the value of the PSAR dot for each candle ("Trailing Stop").

import { IndicatorsApi, CandlesApi } from "tickcatcher";
 
// 1. Get Candles
const candles = await new CandlesApi(config).basicCandles({ symbol: "SOLUSDT", timeframe: "1h", limit: 100 });
 
// 2. Calculate PSAR
const values = await new IndicatorsApi(config).psar({ 
    psarRequest: {
        data: candles, 
        params: { step: 0.02, max: 0.2 }
    }
});
 
console.log(`Current Stop Level: ${values[values.length - 1]}`);