# Chaikin A/D Oscillator

`D07-F05-A07` · Technical Indicators → Volume Indicators · archetype `series-transform` · difficulty 2/5 · verification **verified**

Full page: https://docs.thefintechbuilder.com/technical-indicators/volume-indicators/chaikin-a-d-oscillator/
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 { chaikinADOscillator } from "fintech-algorithms/technical-indicators/volume-indicators/chaikin-a-d-oscillator";
```

## Signature

```ts
chaikinADOscillator(input)
```

Builds the cumulative accumulation/distribution line from the money flow multiplier and volume, then returns the difference between a fast and a slow EMA of that line.

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `input` | `TopicInput` | yes | `bars` needs `timestamp`, `open`, `high`, `low`, `close` and `volume`. From `parameters` this topic uses `fast_period` (default 3) and `slow_period` (default 10, minimum `fast_period` + 1); `period` (default 14) is validated by the family but unused here. |

## Returns

`TopicResult`

`series` holds `ad`, the running cumulative money flow volume, and `value`, the fast EMA of `ad` minus the slow EMA of `ad`. `latest` carries the last element of each. `ad` is populated from the first bar, so `ready_at` is 0 even though `value` has its own warm-up.

## Warm-up

The first ``slow_period` - 1 bars for `value` (9 with the default 10); none for `ad`` positions are `null`. `ad` is non-null on the first bar, so `ready_at` reports 0 while `value` is still null. Read `value` for readiness, not `ready_at`.

## Errors

- When a bar carries a negative `volume` — throws Error
- When `slow_period` is not an integer greater than `fast_period` — throws Error
- When `bars` is empty, or its timestamps are not strictly increasing — 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
chaikinADOscillator(input)
```

### Returns

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

```json
{
  "topic_id": "D07-F05-A07",
  "title": "Chaikin A/D Oscillator",
  "state": "calculated",
  "ready": true,
  "ready_at": 0,
  "series": {
    "ad": [
      -39473.6842105251,
      -6702.529515955808,
      66669.61995061857,
      148952.74316349486,
      206717.91744960428,
      202168.88289909757
    ],
    "value": [null, null, null, null, null, null]
  },
  "latest": {
    "ad": -4337333.133776561,
    "value": -148029.1919731265
  },
  "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/volume-indicators/chaikin-a-d-oscillator/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/technical-indicators/volume-indicators/chaikin-a-d-oscillator/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/technical-indicators/llms.txt
