# Quantitative Qualitative Estimation (QQE)

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

Full page: https://docs.thefintechbuilder.com/technical-indicators/momentum/quantitative-qualitative-estimation-qqe/
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 { quantitativeQualitativeEstimationQqe } from "fintech-algorithms/technical-indicators/momentum/quantitative-qualitative-estimation-qqe";
```

## Signature

```ts
quantitativeQualitativeEstimationQqe(input)
```

Smooths a Wilder RSI with a 5-period EMA and wraps it in a volatility band derived from a double Wilder-smoothed average of the smoothed RSI's own absolute change.

## 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) for the RSI and both band smoothing passes, and `factor` (finite number >= 0, default 4.236), the band multiplier. The 5-period EMA on the RSI is 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 three keys: `rsi` (the smoothed RSI), and `upper` and `lower` (the smoothed RSI plus and minus `factor` times the smoothed band width). The three keys do not share one warm-up: `rsi` resolves well before the bands.

## Warm-up

The first `18 bars for `rsi`, 45 bars for `upper` and `lower` (with the default period of 14)` positions are `null`. `ready_at` reports the first bar at which any series is non-null, so it is 18 on the canonical fixture, driven by `rsi` alone. `upper` and `lower` stay null until index 45, because the band adds a one-bar difference and two more Wilder passes on top; callers that read the bands must wait past `ready_at`.

## Errors

- When `factor` is negative or not a finite number — throws Error
- When `period` is not an integer >= 2 — throws Error

## Complexity

Time `O(n)`, 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
quantitativeQualitativeEstimationQqe(input)
```

### Returns

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

```json
{
  "topic_id": "D07-F03-A22",
  "title": "Quantitative Qualitative Estimation (QQE)",
  "state": "calculated",
  "ready": true,
  "ready_at": 18,
  "series": {
    "rsi": [null, null, null, null, null, null],
    "upper": [null, null, null, null, null, null],
    "lower": [null, null, null, null, null, null]
  },
  "latest": {
    "rsi": 38.502818289066866,
    "upper": 48.90739630995648,
    "lower": 28.098240268177246
  },
  "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/quantitative-qualitative-estimation-qqe/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/technical-indicators/momentum/quantitative-qualitative-estimation-qqe/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/technical-indicators/llms.txt
