# Upside Gap Two Crows

`D06-F04-A12` · Price Action and Candlesticks → Multi-Candle Patterns · archetype `record-transform` · difficulty 2/5 · verification **verified**

Full page: https://docs.thefintechbuilder.com/price-action-and-candlesticks/multi-candle-patterns/upside-gap-two-crows/
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 { upsideGapTwoCrows } from "fintech-algorithms/price-action-and-candlesticks/multi-candle-patterns/upside-gap-two-crows";
```

## Signature

```ts
upsideGapTwoCrows(input)
```

Scans three-bar windows for an up candle, a gapped-up down candle, and a second down candle that opens higher still yet closes back inside the first candle's body.

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `input` | `TopicInput` | yes | `bars` is a chronologically ordered array of OHLCV rows; each needs a non-empty `timestamp` strictly greater than the previous row's and finite `open`, `high`, `low`, `close` and `volume`. The pattern family validates `tick_tolerance` (default 0.01, at least 0) and `doji_body_ratio` (default 0.05, within 0..1) on every call, but this topic's branch reads neither: the gap and the containment are strict comparisons with no tolerance applied. |

## Returns

`TopicResult`

`series.matched` is the boolean verdict for the window ending at that index, and `series.label` is `"bearish"` when it fires and `"none"` when it does not; this pattern has a single direction. `latest` carries the last value of each. The warm-up is the two leading bars that cannot close a three-bar window.

## Warm-up

The first `2 bars` positions are `null`. The pattern needs a three-bar window, so both series hold null at indexes 0 and 1 and `ready_at` is 2. From index 2 onward `matched` is false or true, and false is a real verdict rather than a warm-up placeholder, so `ready_at` does not depend on any pattern ever firing. An input of one or two bars returns null throughout, with `ready_at` null and `state` "waiting".

## Errors

- When a bar has a non-finite price or volume, a negative volume, a `high` below its own open/low/close, a `low` above them, or a `timestamp` that does not advance — throws Error
- When `tick_tolerance` or `doji_body_ratio` is out of range, which the family validates before the branch runs even though this topic does not use either — throws Error
- When `input` is not an object, `input.parameters` is not an object, or `bars` is not an array holding at least one bar — 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
upsideGapTwoCrows(input)
```

### Returns

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

```json
{
  "topic_id": "D06-F04-A12",
  "title": "Upside Gap Two Crows",
  "state": "calculated",
  "ready": true,
  "ready_at": 2,
  "series": {
    "label": [null, null, "none", "none", "none", "none"],
    "matched": [null, null, false, false, false, false]
  },
  "latest": {
    "label": "none",
    "matched": false
  },
  "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/price-action-and-candlesticks/multi-candle-patterns/upside-gap-two-crows/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/price-action-and-candlesticks/multi-candle-patterns/upside-gap-two-crows/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/price-action-and-candlesticks/llms.txt
