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

Fractal Support and Resistance

Install and import#

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

Signature#

fractalSupportAndResistance(input)

Holds the most recent confirmed five-bar fractal high and low forward as resistance and support. This deliberately delegates to the same causal five-bar confirmation used by Fractal Chaos Bands, so a fractal at bar p is only reported from bar p+2 onward.

Parameters#

NameTypeNotes
inputTopicInputbars is the required OHLCV history, strictly ordered by timestamp and on a single adjustment basis. The fractal window is fixed at five bars and no parameters key changes it, though period (default 20, integer of at least 2) and multiplier (default 2, at least 0) are still validated when supplied.

Returns#

TopicResult

series and latest carry upper and lower. The warm-up is at least four bars and then runs until the first fractal actually confirms, so ready_at is data-dependent (5 on the canonical fixture); once set, each level is held forward until the next fractal replaces it.

Warm-up#

The first 4 bars minimum, then until the first fractal confirms positions are null. Indices 0 to 3 can never confirm a centred five-bar window. From index 4 the pivot under test is i-2, so ready_at is the first index at or after 4 whose centre bar is the extreme of its five-bar neighbourhood.

Errors#

  • When bars is empty or is not an array — throws Error
  • When multiplier is supplied as a negative number or is not finite — throws Error

Complexity: time O(n), 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#

fractalSupportAndResistance(input)

Returns#

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

{
  "topic_id": "D08-F01-A11",
  "title": "Fractal Support and Resistance",
  "state": "calculated",
  "ready": true,
  "ready_at": 5,
  "series": {
    "upper": [null, null, null, null, null, 105.01857496],
    "lower": [null, null, null, null, null, null]
  },
  "latest": {
    "upper": 109.83623682,
    "lower": 101.07584902
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}

Diagrams#

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

Calculation flow#

Fractal 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 Fractal 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"]
Fractal 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#