# Stochastic Momentum Index

`D07-F03-A16` · Technical Indicators → Momentum · archetype `series-transform` · difficulty 2/5 · verification **verified**

Full page: https://docs.thefintechbuilder.com/technical-indicators/momentum/stochastic-momentum-index/
Agent skill: `npx skills add IslamBaraka90/Fintech-Algorithms-Library` — https://docs.thefintechbuilder.com/guides/agent-skill/

## Install and import

```bash
npm install fintech-algorithms
```

```ts
import { stochasticMomentumIndex } from "fintech-algorithms/technical-indicators/momentum/stochastic-momentum-index";
```

## Signature

```ts
stochasticMomentumIndex(input)
```

Measures where `close` sits relative to the midpoint of the `period` high-low range, then double-smooths both the distance and the range before scaling to -100..100.

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `input` | `TopicInput` | yes | `bars` is a chronological array of OHLCV rows, each with a non-empty `timestamp` plus finite `open`, `high`, `low`, `close` and `volume`. From `parameters` this topic reads `period` (integer >= 2, default 14), the lookback for the highest high and lowest low. The two 3-period EMA smoothing passes are fixed. The preamble also validates `fast_period` (default 5) and `slow_period` (default 34) before branching, so a bad value for either throws even though this topic does not use them. |

## Returns

`TopicResult`

`series` and `latest` carry one key, `value`, equal to 200 times the double-smoothed distance from the range midpoint divided by the double-smoothed range. The series opens with a null warm-up prefix covering the range lookback and both smoothing passes.

## Warm-up

The first `period - 1 + 4 bars (17 with the default 14)` positions are `null`. The range resolves at index `period - 1` and each 3-period EMA costs two more bars, so `ready_at` is 17 on the canonical fixture. A double-smoothed range of exactly 0 also yields a null.

## Errors

- When `period` is not an integer >= 2 — throws Error
- When a bar's `high` is below its `low` — throws Error

## Complexity

Time `O(n * period)`, space `O(n)`.

## Worked example

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`:

```json
{
  "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

```ts
stochasticMomentumIndex(input)
```

### Returns

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

```json
{
  "topic_id": "D07-F03-A16",
  "title": "Stochastic Momentum Index",
  "state": "calculated",
  "ready": true,
  "ready_at": 17,
  "series": {
    "value": [null, null, null, null, null, null]
  },
  "latest": {
    "value": -57.30649740900241
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}
```

## Verification and provenance

Tier: **verified** (via E).

The worked example below is the figure published in this algorithm's article, replayed and asserted by the test suite on every build. The arithmetic cannot drift without the build failing.

Both tiers guarantee the signature. Full explanation: https://docs.thefintechbuilder.com/guides/verification/

Generated from the docs.json payload shipped inside fintech-algorithms@0.13.0.
The signature and parameter list are checked against the compiled implementation at build time,
so a description that contradicts the code fails the build rather than reaching this file.

## Links

- Article (how it works, step by step): https://thefintechbuilder.com/technical-indicators/momentum/stochastic-momentum-index/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/technical-indicators/momentum/stochastic-momentum-index/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/technical-indicators/llms.txt
