Trend/Range Regime Classifier
Install and import#
npm install fintech-algorithmsimport { trendRangeRegimeClassifier } from "fintech-algorithms/geometric-chart-patterns/market-structure-breakouts-and-regimes/trend-range-regime-classifier";Signature#
trendRangeRegimeClassifier(input)Labels each bar trend, range or uncertain by requiring two independent readings to agree: efficiency ratio at or above 0.55 with Choppiness at or below 45 gives trend, efficiency at or below 0.25 with Choppiness at or above 55 gives range, and anything else is uncertain.
Parameters#
| Name | Type | Notes |
|---|---|---|
input | TopicInput | bars 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 inputs - it is forwarded verbatim to the Choppiness Index implementation, which reads no other key. The four thresholds are fixed in the implementation. |
Returns#
TopicResult
series and latest carry efficiency, choppiness and the string series regime. The warm-up is uneven: choppiness starts at period - 1 and efficiency at period, so ready_at is 19 with the default while the regime label itself stays null until index 20.
Warm-up#
The first period - 1 bars for choppiness, period bars for efficiency and regime positions are null. ready_at reports the earliest non-null across all series, which is choppiness at index period - 1. A caller reading regime should wait one bar longer, since the label is null whenever either input is.
Errors#
- When
periodis supplied as a non-integer or as a value below 2 — throws Error - When a bar's
high,low, orcloseis 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#
{
"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#
trendRangeRegimeClassifier(input)Returns#
object with 9 fields: topic_id, title, state, ready, ready_at, series, latest, parameters, …
{
"topic_id": "D08-F07-A12",
"title": "Trend/Range Regime Classifier",
"state": "calculated",
"ready": true,
"ready_at": 19,
"series": {
"efficiency": [null, null, null, null, null, null],
"choppiness": [null, null, null, null, null, null],
"regime": [null, null, null, null, null, null]
},
"latest": {
"efficiency": 0.08092573520497529,
"choppiness": 58.89834097590164,
"regime": "range"
},
"parameters": {},
"diagnostics": {
"causal": true,
"input_count": 96
}
}Diagrams#
Calculation flow#
Trend/Range Regime Classifier calculation flow
flowchart LR
A["ordered OHLC observations, explicit lookbacks and threshol"] --> B["Validate order, basis, and finite values"]
B --> C["Apply the selected Trend/Range Regime Classifier 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"]
Trend/Range Regime Classifier 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.
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