fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

ATR Support and Resistance

Install and import#

bash
npm install fintech-algorithms
ts
import { atrSupportAndResistance } from "fintech-algorithms/geometric-chart-patterns/pivots-and-levels/atr-support-and-resistance";

Signature#

atrSupportAndResistance(input)

Places support and resistance a volatility-scaled distance either side of a simple moving average of close: center ± multiplier × ATR(period), where the ATR is Wilder-smoothed true range.

Parameters#

NameTypeNotes
inputTopicInputbars is the required OHLCV history, strictly ordered by timestamp and on a single adjustment basis. parameters.period (default 20, integer of at least 2) sets both the moving average and the ATR length; parameters.multiplier (default 2, finite and at least 0) sets the band width.

Returns#

TopicResult

series and latest carry center, support and resistance. The warm-up is period - 1 bars, because the moving average and the ATR seed both complete at index period - 1, so with the default ready_at is 19.

Warm-up#

The first period - 1 bars (19 by default) positions are null. The simple moving average and the Wilder ATR seed both need period observations, and true range is defined from index 0, so all three series turn non-null together at index period - 1.

Errors#

  • When multiplier is supplied as a negative number or is not finite — throws Error
  • When period is supplied as a non-integer or as a value below 2 — throws Error

Complexity: time O(n × period), space O(n).

Worked example#

executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

Input#

input
{
  "bars": [
    {
      "timestamp": "2024-01-02",
      "basis": "synthetic-unadjusted",
      "open": 100,
      "high": 101.45,
      "low": 98.695,
      "close": 100,
      "volume": 750000,
      "benchmark": 200
    },
    {
      "timestamp": "2024-01-03",
      "basis": "synthetic-unadjusted",
      "open": 101.49111452,
      "high": 103.38381693,
      "low": 100.05480022,
      "close": 101.78791214,
      "volume": 795117,
      "benchmark": 200.56326135
    },
    {
      "timestamp": "2024-01-04",
      "basis": "synthetic-unadjusted",
      "open": 102.45519048,
      "high": 104.6701838,
      "low": 100.91147007,
      "close": 102.9549389,
      "volume": 840234,
      "benchmark": 201.11020913
    }
  ],
  "parameters": {}
}

Call#

atrSupportAndResistance(input)

Returns#

object with 9 fields: topic_id, title, state, ready, ready_at, series, latest, parameters, …

{
  "topic_id": "D08-F01-A12",
  "title": "ATR Support and Resistance",
  "state": "calculated",
  "ready": true,
  "ready_at": 19,
  "series": {
    "center": [null, null, null, null, null, null],
    "support": [null, null, null, null, null, null],
    "resistance": [null, null, null, null, null, null]
  },
  "latest": {
    "center": 104.20055051999998,
    "support": 97.75337766966595,
    "resistance": 110.647723370334
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}

Diagrams#

ATR Support and Resistance — article hero
ATR Support and Resistance — concept map
ATR Support and Resistance — decision comparison
ATR Support and Resistance — worked example

Calculation flow#

ATR Support and Resistance calculation flow
flowchart LR
    A["closed OHLC bars or causally confirmed pivots with session"] --> B["Validate order, basis, and finite values"]
    B --> C["Apply the selected ATR Support and Resistance convention"]
    C --> D["Emit value, readiness, and diagnostics"]
    D --> E["Interpret descriptively; test outcomes separately"]
    B -->|invalid or insufficient| X["Withhold output with a reason"]
ATR Support and Resistance readiness and evidence states
stateDiagram-v2
    [*] --> Waiting
    Waiting --> Ready: enough valid causal observations
    Waiting --> Rejected: malformed or unsupported input
    Ready --> Calculated: selected formula applied
    Calculated --> Interpreted: diagnostic and limitation retained
    Interpreted --> Ready: next observation arrives
    Rejected --> Waiting: corrected input and deterministic reset

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

  • CFA Institute technical-analysis overview — see linked primary or authoritative record
  • TA-Lib maintained source — see linked primary or authoritative record
  • Long-Term Storage Capacity of Reservoirs — see linked primary or authoritative record
  • Evidence decision
  • Level 1 evidence map

The rest of the Pivots and Levels family#