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

DeMark Pivot Points

Install and import#

bash
npm install fintech-algorithms
ts
import { demarkPivotPoints } from "fintech-algorithms/geometric-chart-patterns/pivots-and-levels/demark-pivot-points";

Signature#

demarkPivotPoints(input)

Chooses one of three formulas for the intermediate X depending on whether the previous bar closed below, above, or level with its open, then reports pivot = X / 4 with a single band pair r1 = X / 2 - L_prev and s1 = X / 2 - H_prev.

Parameters#

NameTypeNotes
inputTopicInputbars is the required OHLCV history, strictly ordered by timestamp and on a single adjustment basis. This variant reads no keys from parameters; the branch is selected purely from the previous bar's close-versus-open relationship. period (default 20) is still validated as an integer of at least 2 if supplied.

Returns#

TopicResult

series and latest carry pivot, r1, s1, r2 and s2, but DeMark defines only one band pair, so r2 and s2 are null at every index including the last. The warm-up is one bar.

Warm-up#

The first 1 bar positions are null. Index 0 is null in every series and ready_at is 1; r2 and s2 never leave null, which is the formula and not an unfinished warm-up.

Errors#

  • When a bar's high is below its own open, close, or low (or low is above them) — throws Error
  • When bars is empty or is not an array — 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#

demarkPivotPoints(input)

Returns#

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

{
  "topic_id": "D08-F01-A09",
  "title": "DeMark Pivot Points",
  "state": "calculated",
  "ready": true,
  "ready_at": 1,
  "series": {
    "pivot": [
      null,
      100.03625,
      102.152586555,
      103.3016941425,
      103.58734312749999,
      103.220884675
    ],
    "r1": [
      null,
      101.3775,
      104.25037289,
      105.691918215,
      106.09474635499998,
      105.64435387999998
    ],
    "s1": [
      null,
      98.62249999999999,
      100.92135618,
      101.93320448499999,
      102.15611129499999,
      101.81435779999998
    ],
    "r2": [null, null, null, null, null, null],
    "s2": [null, null, null, null, null, null]
  },
  "latest": {
    "pivot": 101.174576485,
    "r1": 102.31329422,
    "s1": 99.19207042000001,
    "r2": null,
    "s2": null
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}

Diagrams#

DeMark Pivot Points — article hero
DeMark Pivot Points — concept map
DeMark Pivot Points — decision comparison
DeMark Pivot Points — worked example

Calculation flow#

DeMark Pivot Points 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 DeMark Pivot Points 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"]
DeMark Pivot Points 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#