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

Directional Persistence

Install and import#

bash
npm install fintech-algorithms
ts
import { directionalPersistence } from "fintech-algorithms/geometric-chart-patterns/market-structure-breakouts-and-regimes/directional-persistence";

Signature#

directionalPersistence(input)

Maps each bar to +1, -1 or 0 by the sign of its close-to-close change, sums those signs over period bars, and reports the absolute total divided by period. It measures one-sidedness without caring which side.

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 the summation window.

Returns#

TopicResult

series and latest carry a single value key, between 0 and 1. The warm-up is period bars, because the sign at index 0 is undefined and the rolling sum rejects windows containing it, so with the default ready_at is 20.

Warm-up#

The first period bars (20 by default) positions are null. The sign series is null at index 0, so the first complete window of period signs ends at index period.

Errors#

  • When period is supplied as a non-integer or as a value below 2 — throws Error
  • When a bar's close is not a finite number — 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#

directionalPersistence(input)

Returns#

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

{
  "topic_id": "D08-F07-A14",
  "title": "Directional Persistence",
  "state": "calculated",
  "ready": true,
  "ready_at": 20,
  "series": {
    "value": [null, null, null, null, null, null]
  },
  "latest": {
    "value": 0.1
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}

Diagrams#

Directional Persistence — article hero
Directional Persistence — concept map
Directional Persistence — decision comparison
Directional Persistence — worked example

Calculation flow#

Directional Persistence calculation flow
flowchart LR
    A["ordered OHLC observations, explicit lookbacks and threshol"] --> B["Validate order, basis, and finite values"]
    B --> C["Apply the selected Directional Persistence 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"]
Directional Persistence 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 Market Structure, Breakouts, and Regimes family#