> For the complete documentation index, see [llms.txt](https://docs.itradingbot.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.itradingbot.net/uk/ai-strategy-builder/machine-rsi.md).

# RSI fields

Shared reading rules — index notation, the `L`/`S`/`N` codes, crossings and Reverse — are on [Signal passports](https://docs.itradingbot.net/ai-strategy-builder/signal-passports). Main backtest settings and the card schema are on [Settings and card schema](https://docs.itradingbot.net/ai-strategy-builder/machine-settings). The behaviour contract is [Rules for AI assistants](https://docs.itradingbot.net/ai-strategy-builder/assistant-rules).

Knowledge package 0.6.1, checked 22 September 2026, build 03613bfa. Use the shared role, Reverse and timing rules. RSI is based on changes in close and Wilder smoothing: for nonzero average loss, `RSI=100−100/(1+average_gain/average_loss)`. This does not define all seed or flat-series cases; do not manufacture a signal from an undefined value.

`p` is the period, `up`/`low` are upper/lower RSI thresholds. Defaults are 14/70/30. For CEC/CRTC, integer p is 2…30 and thresholds 10…90. For TC, p is 2…20 and thresholds 30…70. Where both thresholds exist, up must exceed low.

## Entry — rsi.entry

Let R be RSI. The exact option code determines the event:

* `CEC`: `R1>low` and `R0<=low` gives L; otherwise `R1<up` and `R0>=up` gives S; otherwise N. This is departure from the inner channel into an extreme region.
* `CRTC`: `R1<low` and `R0>=low` gives L; otherwise `R1>up` and `R0<=up` gives S; otherwise N. This is return from an extreme region.
* `TC`: find the most recent RSI value **before R0** that was `<=low` or `>=up`. If it was in the lower region and `R0>up`, give L; if it was in the upper region and `R0<low`, give S; otherwise N. With no earlier qualifying region, give N. The final TC comparisons are strict: current equality does not qualify.

Do not swap CEC and CRTC because of an informal translated explanation. They have the predicates above.

## Channel/history filter — rsi.filter

The same period/threshold controls apply; `ft` selects the state:

* `BD`: `R0>=up` gives IL; otherwise `R0<=low` gives IS; otherwise AA.
* `BHL`: the same first two branches; inside the channel gives N.
* `BIC`: `low<=R0<=up` gives AA; otherwise N. Both thresholds are included.
* `BP`: search backward **including R0**. The first `R<=low` gives IS; the first `R>=up` gives IL; if neither region occurs, give N. This is the most recent qualifying region, not a new crossing. BP uses p 2…20 and thresholds 30…70; the other modes use p 2…30 and thresholds 10…90.

## Growth/decline filter — rsi-growth-decline.filter

`RSI_PRICE_LIMIT_BY_GROWTH_DECLINE` is a separate filter with p only; do not add channel thresholds or an ec selection. `R0>R1` gives IS, `R0<R1` gives IL, equality gives AA; otherwise N. Its period domain is integer 2…30.

## Exit — rsi.exit

Use the selected CEC/CRTC/TC event and the shared cba rules. After Reverse, ED/EDOP needs the opposite directional signal; AVG needs the position's own signal. A channel-state filter and an RSI exit event are different variants.

## Definition coverage and observed controls

The controls below identify this dated schema. Their exact labels, value types and context overrides are in the catalogue. Any omitted standard selector must not be added manually.

* `rsi.entry` — `MAIN` / `RSI`. Semantics: **Entry — rsi.entry**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `p`, `up`, `low`, `ec`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN\_ASHI; default DEFAULT; calculation: CL/CR; default CL; Reverse: available; default false.
* `rsi.exit` — `CLOSE_BY` / `RSI`. Semantics: **Exit — rsi.exit**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `cba`, `p`, `up`, `low`, `ec`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN\_ASHI; default DEFAULT; calculation: CL/CR; default CL; Reverse: available; default false.
* `rsi.filter` — `PRICE_LIMIT` / `RSI_PRICE_LIMIT`. Semantics: **Channel/history filter — rsi.filter**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `pla`, `p`, `up`, `low`, `ft`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN\_ASHI; default DEFAULT; calculation: CL/CR; default CR; Reverse: available; default false.
* `rsi-growth-decline.filter` — `PRICE_LIMIT` / `RSI_PRICE_LIMIT_BY_GROWTH_DECLINE`. Semantics: **Growth/decline filter — rsi-growth-decline.filter**. Fields: `ss`, `Is`, `ct`, `at`, `rs`, `pla`, `p`. timeframe: ID-specific list; default 1m; candles: DEFAULT/HEIKEN\_ASHI; default DEFAULT; calculation: CL/CR; default CR; Reverse: available; default false.

## Exact machine reference

Read common settings and card schema first. The following blocks are complete family excerpts, not standalone replacement files. Apply only the selected context overrides and check availability. Use the complete downloaded files for the validator.

### Catalogue definitions and overrides

```json
{
  "format": "itb.field-catalog/0.4.0",
  "definitions": [
    {
      "id": "rsi.entry",
      "original_indicator_id": "RSI",
      "role": "entry",
      "fields": [
        {
          "id": "rsi.entry.asset",
          "source_key": "ss",
          "type": "string",
          "enum_values": null,
          "schema_default": "BTCUSDT",
          "labels": {
            "en": "Asset"
          },
          "unit": "symbol",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.entry.timeframe",
          "source_key": "Is",
          "type": "string",
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "12h",
            "1d"
          ],
          "schema_default": "1m",
          "labels": {
            "en": "TF"
          },
          "unit": "timeframe",
          "label_verified": true,
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "12h": {
              "en": "12h"
            },
            "1d": {
              "en": "1d"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "1s": "source_ui_literal",
            "5s": "source_ui_literal",
            "10s": "source_ui_literal",
            "15s": "source_ui_literal",
            "30s": "source_ui_literal",
            "45s": "source_ui_literal",
            "1m": "source_ui_literal",
            "2m": "source_ui_literal",
            "3m": "source_ui_literal",
            "5m": "source_ui_literal",
            "10m": "source_ui_literal",
            "15m": "source_ui_literal",
            "30m": "source_ui_literal",
            "1h": "source_ui_literal",
            "4h": "source_ui_literal",
            "12h": "source_ui_literal",
            "1d": "source_ui_literal"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.entry.candles",
          "source_key": "ct",
          "type": "string",
          "enum_values": [
            "DEFAULT",
            "HEIKEN_ASHI"
          ],
          "schema_default": "DEFAULT",
          "labels": {
            "en": "Candlestick type"
          },
          "unit": "candle transform",
          "label_verified": true,
          "enum_labels": {
            "DEFAULT": {
              "en": "Normal"
            },
            "HEIKEN_ASHI": {
              "en": "Heiken-Ashi"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "DEFAULT": "source_translation",
            "HEIKEN_ASHI": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.entry.calculation",
          "source_key": "at",
          "type": "string",
          "enum_values": [
            "CL",
            "CR"
          ],
          "schema_default": "CL",
          "labels": {
            "en": "Calculation"
          },
          "unit": "calculation mode",
          "label_verified": true,
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "On crossover (per second)"
            }
          },
          "numeric_range": null,
          "display_note": "CR label is the UI label; does not mean every indicator is a crossover.",
          "enum_caption_origin": {
            "CL": "source_translation",
            "CR": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.entry.reverse",
          "source_key": "rs",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Reverse?"
          },
          "unit": "boolean reversal; meaning is per indicator and role",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.entry.period",
          "source_key": "p",
          "type": "integer",
          "enum_values": null,
          "schema_default": 14,
          "labels": {
            "en": "Period"
          },
          "unit": "bars",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 2,
            "maximum": 30,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.entry.upper-limit",
          "source_key": "up",
          "type": "integer",
          "enum_values": null,
          "schema_default": 70,
          "labels": {
            "en": "Upper limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.entry.lower-limit",
          "source_key": "low",
          "type": "integer",
          "enum_values": null,
          "schema_default": 30,
          "labels": {
            "en": "Lower limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.entry.condition",
          "source_key": "ec",
          "type": "string",
          "enum_values": [
            "CEC",
            "CRTC",
            "TC"
          ],
          "schema_default": "CEC",
          "labels": {
            "en": "Condition"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "CEC": {
              "en": "At the end of the channel"
            },
            "CRTC": {
              "en": "On returning to the channel"
            },
            "TC": {
              "en": "On trend change"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "CEC": "source_translation",
            "CRTC": "source_translation",
            "TC": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "RSI"
      }
    },
    {
      "id": "rsi.exit",
      "original_indicator_id": "RSI",
      "role": "exit",
      "fields": [
        {
          "id": "rsi.exit.asset",
          "source_key": "ss",
          "type": "string",
          "enum_values": null,
          "schema_default": "BTCUSDT",
          "labels": {
            "en": "Asset"
          },
          "unit": "symbol",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.exit.timeframe",
          "source_key": "Is",
          "type": "string",
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "12h",
            "1d"
          ],
          "schema_default": "1m",
          "labels": {
            "en": "TF"
          },
          "unit": "timeframe",
          "label_verified": true,
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "12h": {
              "en": "12h"
            },
            "1d": {
              "en": "1d"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "1s": "source_ui_literal",
            "5s": "source_ui_literal",
            "10s": "source_ui_literal",
            "15s": "source_ui_literal",
            "30s": "source_ui_literal",
            "45s": "source_ui_literal",
            "1m": "source_ui_literal",
            "2m": "source_ui_literal",
            "3m": "source_ui_literal",
            "5m": "source_ui_literal",
            "10m": "source_ui_literal",
            "15m": "source_ui_literal",
            "30m": "source_ui_literal",
            "1h": "source_ui_literal",
            "4h": "source_ui_literal",
            "12h": "source_ui_literal",
            "1d": "source_ui_literal"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.exit.candles",
          "source_key": "ct",
          "type": "string",
          "enum_values": [
            "DEFAULT",
            "HEIKEN_ASHI"
          ],
          "schema_default": "DEFAULT",
          "labels": {
            "en": "Candlestick type"
          },
          "unit": "candle transform",
          "label_verified": true,
          "enum_labels": {
            "DEFAULT": {
              "en": "Normal"
            },
            "HEIKEN_ASHI": {
              "en": "Heiken-Ashi"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "DEFAULT": "source_translation",
            "HEIKEN_ASHI": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.exit.calculation",
          "source_key": "at",
          "type": "string",
          "enum_values": [
            "CL",
            "CR"
          ],
          "schema_default": "CL",
          "labels": {
            "en": "Calculation"
          },
          "unit": "calculation mode",
          "label_verified": true,
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "On crossover (per second)"
            }
          },
          "numeric_range": null,
          "display_note": "CR label is the UI label; does not mean every indicator is a crossover.",
          "enum_caption_origin": {
            "CL": "source_translation",
            "CR": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.exit.reverse",
          "source_key": "rs",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Reverse?"
          },
          "unit": "boolean reversal; meaning is per indicator and role",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.exit.signal-action",
          "source_key": "cba",
          "type": "string",
          "enum_values": [
            "ED",
            "EDOP"
          ],
          "schema_default": "EDOP",
          "labels": {
            "en": "When a signal is received"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "ED": "source_translation",
            "EDOP": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.exit.period",
          "source_key": "p",
          "type": "integer",
          "enum_values": null,
          "schema_default": 14,
          "labels": {
            "en": "Period"
          },
          "unit": "bars",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 2,
            "maximum": 30,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.exit.upper-limit",
          "source_key": "up",
          "type": "integer",
          "enum_values": null,
          "schema_default": 70,
          "labels": {
            "en": "Upper limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.exit.lower-limit",
          "source_key": "low",
          "type": "integer",
          "enum_values": null,
          "schema_default": 30,
          "labels": {
            "en": "Lower limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.exit.condition",
          "source_key": "ec",
          "type": "string",
          "enum_values": [
            "CEC",
            "CRTC",
            "TC"
          ],
          "schema_default": "CEC",
          "labels": {
            "en": "Condition"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "CEC": {
              "en": "At the end of the channel"
            },
            "CRTC": {
              "en": "On returning to the channel"
            },
            "TC": {
              "en": "On trend change"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "CEC": "source_translation",
            "CRTC": "source_translation",
            "TC": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "RSI"
      }
    },
    {
      "id": "rsi.filter",
      "original_indicator_id": "RSI_PRICE_LIMIT",
      "role": "filter",
      "fields": [
        {
          "id": "rsi.filter.asset",
          "source_key": "ss",
          "type": "string",
          "enum_values": null,
          "schema_default": "BTCUSDT",
          "labels": {
            "en": "Asset"
          },
          "unit": "symbol",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.filter.timeframe",
          "source_key": "Is",
          "type": "string",
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "12h",
            "1d"
          ],
          "schema_default": "1m",
          "labels": {
            "en": "TF"
          },
          "unit": "timeframe",
          "label_verified": true,
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "12h": {
              "en": "12h"
            },
            "1d": {
              "en": "1d"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "1s": "source_ui_literal",
            "5s": "source_ui_literal",
            "10s": "source_ui_literal",
            "15s": "source_ui_literal",
            "30s": "source_ui_literal",
            "45s": "source_ui_literal",
            "1m": "source_ui_literal",
            "2m": "source_ui_literal",
            "3m": "source_ui_literal",
            "5m": "source_ui_literal",
            "10m": "source_ui_literal",
            "15m": "source_ui_literal",
            "30m": "source_ui_literal",
            "1h": "source_ui_literal",
            "4h": "source_ui_literal",
            "12h": "source_ui_literal",
            "1d": "source_ui_literal"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.filter.candles",
          "source_key": "ct",
          "type": "string",
          "enum_values": [
            "DEFAULT",
            "HEIKEN_ASHI"
          ],
          "schema_default": "DEFAULT",
          "labels": {
            "en": "Candlestick type"
          },
          "unit": "candle transform",
          "label_verified": true,
          "enum_labels": {
            "DEFAULT": {
              "en": "Normal"
            },
            "HEIKEN_ASHI": {
              "en": "Heiken-Ashi"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "DEFAULT": "source_translation",
            "HEIKEN_ASHI": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.filter.calculation",
          "source_key": "at",
          "type": "string",
          "enum_values": [
            "CL",
            "CR"
          ],
          "schema_default": "CR",
          "labels": {
            "en": "Calculation"
          },
          "unit": "calculation mode",
          "label_verified": true,
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "On crossover (per second)"
            }
          },
          "numeric_range": null,
          "display_note": "CR label is the UI label; does not mean every indicator is a crossover.",
          "enum_caption_origin": {
            "CL": "source_translation",
            "CR": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.filter.reverse",
          "source_key": "rs",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Reverse?"
          },
          "unit": "boolean reversal; meaning is per indicator and role",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi.filter.filter-exit-action",
          "source_key": "pla",
          "type": "string",
          "enum_values": [
            "SD",
            "ED",
            "EDOP"
          ],
          "schema_default": "SD",
          "labels": {
            "en": "When exiting the filter"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "SD": {
              "en": "Cancel cycles"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "SD": "source_translation",
            "ED": "source_translation",
            "EDOP": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi.filter.period",
          "source_key": "p",
          "type": "integer",
          "enum_values": null,
          "schema_default": 14,
          "labels": {
            "en": "Period"
          },
          "unit": "bars",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 2,
            "maximum": 30,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.filter.upper-limit",
          "source_key": "up",
          "type": "integer",
          "enum_values": null,
          "schema_default": 70,
          "labels": {
            "en": "Upper limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.filter.lower-limit",
          "source_key": "low",
          "type": "integer",
          "enum_values": null,
          "schema_default": 30,
          "labels": {
            "en": "Lower limit"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 10,
            "maximum": 90,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        },
        {
          "id": "rsi.filter.filter-type",
          "source_key": "ft",
          "type": "string",
          "enum_values": [
            "BD",
            "BHL",
            "BP",
            "BIC"
          ],
          "schema_default": "BD",
          "labels": {
            "en": "Filter type"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "BD": {
              "en": "Default"
            },
            "BHL": {
              "en": "Above/below channel"
            },
            "BP": {
              "en": "By past signal (By trend)"
            },
            "BIC": {
              "en": "By internal channel"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "BD": "source_translation",
            "BHL": "source_translation",
            "BP": "source_translation",
            "BIC": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "By RSI"
      }
    },
    {
      "id": "rsi-growth-decline.filter",
      "original_indicator_id": "RSI_PRICE_LIMIT_BY_GROWTH_DECLINE",
      "role": "filter",
      "fields": [
        {
          "id": "rsi-growth-decline.filter.asset",
          "source_key": "ss",
          "type": "string",
          "enum_values": null,
          "schema_default": "BTCUSDT",
          "labels": {
            "en": "Asset"
          },
          "unit": "symbol",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi-growth-decline.filter.timeframe",
          "source_key": "Is",
          "type": "string",
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "12h",
            "1d"
          ],
          "schema_default": "1m",
          "labels": {
            "en": "TF"
          },
          "unit": "timeframe",
          "label_verified": true,
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "12h": {
              "en": "12h"
            },
            "1d": {
              "en": "1d"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "1s": "source_ui_literal",
            "5s": "source_ui_literal",
            "10s": "source_ui_literal",
            "15s": "source_ui_literal",
            "30s": "source_ui_literal",
            "45s": "source_ui_literal",
            "1m": "source_ui_literal",
            "2m": "source_ui_literal",
            "3m": "source_ui_literal",
            "5m": "source_ui_literal",
            "10m": "source_ui_literal",
            "15m": "source_ui_literal",
            "30m": "source_ui_literal",
            "1h": "source_ui_literal",
            "4h": "source_ui_literal",
            "12h": "source_ui_literal",
            "1d": "source_ui_literal"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi-growth-decline.filter.candles",
          "source_key": "ct",
          "type": "string",
          "enum_values": [
            "DEFAULT",
            "HEIKEN_ASHI"
          ],
          "schema_default": "DEFAULT",
          "labels": {
            "en": "Candlestick type"
          },
          "unit": "candle transform",
          "label_verified": true,
          "enum_labels": {
            "DEFAULT": {
              "en": "Normal"
            },
            "HEIKEN_ASHI": {
              "en": "Heiken-Ashi"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "DEFAULT": "source_translation",
            "HEIKEN_ASHI": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi-growth-decline.filter.calculation",
          "source_key": "at",
          "type": "string",
          "enum_values": [
            "CL",
            "CR"
          ],
          "schema_default": "CR",
          "labels": {
            "en": "Calculation"
          },
          "unit": "calculation mode",
          "label_verified": true,
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "On crossover (per second)"
            }
          },
          "numeric_range": null,
          "display_note": "CR label is the UI label; does not mean every indicator is a crossover.",
          "enum_caption_origin": {
            "CL": "source_translation",
            "CR": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi-growth-decline.filter.reverse",
          "source_key": "rs",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Reverse?"
          },
          "unit": "boolean reversal; meaning is per indicator and role",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "rsi-growth-decline.filter.filter-exit-action",
          "source_key": "pla",
          "type": "string",
          "enum_values": [
            "SD",
            "ED",
            "EDOP"
          ],
          "schema_default": "SD",
          "labels": {
            "en": "When exiting the filter"
          },
          "unit": "indicator-specific / not established here",
          "label_verified": true,
          "enum_labels": {
            "SD": {
              "en": "Cancel cycles"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "numeric_range": null,
          "enum_caption_origin": {
            "SD": "source_translation",
            "ED": "source_translation",
            "EDOP": "source_translation"
          },
          "enum_caption_status": "verified_source_ui"
        },
        {
          "id": "rsi-growth-decline.filter.period",
          "source_key": "p",
          "type": "integer",
          "enum_values": null,
          "schema_default": 14,
          "labels": {
            "en": "Period"
          },
          "unit": "bars",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": {
            "status": "unresolved_not_in_response",
            "minimum": null,
            "maximum": null
          },
          "source_constraints": {
            "minimum": 2,
            "maximum": 30,
            "evidence": "source_observed; conditional restrictions in 05-signal-passports.md; not current server validation"
          }
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "By RSI (Growth/Decline)"
      }
    }
  ],
  "context_overrides": {
    "backtest-binance-dca-false": {},
    "backtest-binance-dca-true": {
      "rsi.exit": {
        "rsi.exit.signal-action": {
          "enum_values": [
            "AVG",
            "ED",
            "EDOP"
          ],
          "schema_default": "AVG",
          "enum_labels": {
            "AVG": {
              "en": "Average"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          }
        },
        "rsi.exit.calculation": {
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "From intersection (every second)"
            }
          }
        }
      }
    },
    "backtest-bybit-dca-false": {
      "rsi.entry": {
        "rsi.entry.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      },
      "rsi.exit": {
        "rsi.exit.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      },
      "rsi.filter": {
        "rsi.filter.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      },
      "rsi-growth-decline.filter": {
        "rsi-growth-decline.filter.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      }
    },
    "backtest-bybit-dca-true": {
      "rsi.entry": {
        "rsi.entry.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      },
      "rsi.exit": {
        "rsi.exit.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        },
        "rsi.exit.signal-action": {
          "enum_values": [
            "AVG",
            "ED",
            "EDOP"
          ],
          "schema_default": "AVG",
          "enum_labels": {
            "AVG": {
              "en": "Average"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          }
        },
        "rsi.exit.calculation": {
          "enum_labels": {
            "CL": {
              "en": "At bar close"
            },
            "CR": {
              "en": "From intersection (every second)"
            }
          }
        }
      },
      "rsi.filter": {
        "rsi.filter.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      },
      "rsi-growth-decline.filter": {
        "rsi-growth-decline.filter.timeframe": {
          "enum_values": [
            "1s",
            "5s",
            "10s",
            "15s",
            "30s",
            "45s",
            "1m",
            "2m",
            "3m",
            "5m",
            "10m",
            "15m",
            "30m",
            "1h",
            "4h",
            "1d"
          ],
          "enum_labels": {
            "1s": {
              "en": "1s"
            },
            "5s": {
              "en": "5s"
            },
            "10s": {
              "en": "10s"
            },
            "15s": {
              "en": "15s"
            },
            "30s": {
              "en": "30s"
            },
            "45s": {
              "en": "45s"
            },
            "1m": {
              "en": "1m"
            },
            "2m": {
              "en": "2m"
            },
            "3m": {
              "en": "3m"
            },
            "5m": {
              "en": "5m"
            },
            "10m": {
              "en": "10m"
            },
            "15m": {
              "en": "15m"
            },
            "30m": {
              "en": "30m"
            },
            "1h": {
              "en": "1h"
            },
            "4h": {
              "en": "4h"
            },
            "1d": {
              "en": "1d"
            }
          }
        }
      }
    }
  }
}
```

### Condition constraints and dependencies

```json
{
  "format": "itb.condition-constraints/0.4.0",
  "definitions": [
    {
      "id": "rsi.entry",
      "field_ids": [
        "rsi.entry.asset",
        "rsi.entry.timeframe",
        "rsi.entry.candles",
        "rsi.entry.calculation",
        "rsi.entry.reverse",
        "rsi.entry.period",
        "rsi.entry.upper-limit",
        "rsi.entry.lower-limit",
        "rsi.entry.condition"
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "strict_mode_eligible": true,
      "eligibility_scope": "complete normalized constructor input domain; not numerical execution or deployed parity"
    },
    {
      "id": "rsi.exit",
      "field_ids": [
        "rsi.exit.asset",
        "rsi.exit.timeframe",
        "rsi.exit.candles",
        "rsi.exit.calculation",
        "rsi.exit.reverse",
        "rsi.exit.signal-action",
        "rsi.exit.period",
        "rsi.exit.upper-limit",
        "rsi.exit.lower-limit",
        "rsi.exit.condition"
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "strict_mode_eligible": true,
      "eligibility_scope": "complete normalized constructor input domain; not numerical execution or deployed parity"
    },
    {
      "id": "rsi.filter",
      "field_ids": [
        "rsi.filter.asset",
        "rsi.filter.timeframe",
        "rsi.filter.candles",
        "rsi.filter.calculation",
        "rsi.filter.reverse",
        "rsi.filter.filter-exit-action",
        "rsi.filter.period",
        "rsi.filter.upper-limit",
        "rsi.filter.lower-limit",
        "rsi.filter.filter-type"
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "strict_mode_eligible": true,
      "eligibility_scope": "complete normalized constructor input domain; not numerical execution or deployed parity"
    },
    {
      "id": "rsi-growth-decline.filter",
      "field_ids": [
        "rsi-growth-decline.filter.asset",
        "rsi-growth-decline.filter.timeframe",
        "rsi-growth-decline.filter.candles",
        "rsi-growth-decline.filter.calculation",
        "rsi-growth-decline.filter.reverse",
        "rsi-growth-decline.filter.filter-exit-action",
        "rsi-growth-decline.filter.period"
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "strict_mode_eligible": true,
      "eligibility_scope": "complete normalized constructor input domain; not numerical execution or deployed parity"
    }
  ],
  "fields": {
    "rsi.entry.asset": {
      "definition_id": "rsi.entry",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "binding": {
        "kind": "same_as_card_field",
        "field_id": "backtest.symbol",
        "no_external_or_invented_asset": true
      },
      "allowed_values_status": "card_symbol_binding; no static market symbol list in condition metadata",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.entry.timeframe": {
      "definition_id": "rsi.entry",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-binance-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-bybit-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ],
        "backtest-bybit-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.entry.candles": {
      "definition_id": "rsi.entry",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-binance-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.entry.calculation": {
      "definition_id": "rsi.entry",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-binance-dca-true": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-true": [
          "CL",
          "CR"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.entry.reverse": {
      "definition_id": "rsi.entry",
      "type": "boolean",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": [
        false,
        true
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.entry.period": {
      "definition_id": "rsi.entry",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 2,
      "maximum": 30,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.entry.upper-limit": {
      "definition_id": "rsi.entry",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.entry.lower-limit": {
      "definition_id": "rsi.entry",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.entry.condition": {
      "definition_id": "rsi.entry",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-binance-dca-true": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-bybit-dca-false": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-bybit-dca-true": [
          "CEC",
          "CRTC",
          "TC"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.asset": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "binding": {
        "kind": "same_as_card_field",
        "field_id": "backtest.symbol",
        "no_external_or_invented_asset": true
      },
      "allowed_values_status": "card_symbol_binding; no static market symbol list in condition metadata",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.timeframe": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-binance-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-bybit-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ],
        "backtest-bybit-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.candles": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-binance-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.calculation": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-binance-dca-true": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-true": [
          "CL",
          "CR"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.reverse": {
      "definition_id": "rsi.exit",
      "type": "boolean",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": [
        false,
        true
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.signal-action": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "ED",
          "EDOP"
        ],
        "backtest-binance-dca-true": [
          "AVG",
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-false": [
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-true": [
          "AVG",
          "ED",
          "EDOP"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.exit.period": {
      "definition_id": "rsi.exit",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 2,
      "maximum": 30,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.exit.upper-limit": {
      "definition_id": "rsi.exit",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.exit.lower-limit": {
      "definition_id": "rsi.exit",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.exit.condition": {
      "definition_id": "rsi.exit",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-binance-dca-true": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-bybit-dca-false": [
          "CEC",
          "CRTC",
          "TC"
        ],
        "backtest-bybit-dca-true": [
          "CEC",
          "CRTC",
          "TC"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.asset": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "binding": {
        "kind": "same_as_card_field",
        "field_id": "backtest.symbol",
        "no_external_or_invented_asset": true
      },
      "allowed_values_status": "card_symbol_binding; no static market symbol list in condition metadata",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.timeframe": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-binance-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-bybit-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ],
        "backtest-bybit-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.candles": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-binance-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.calculation": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-binance-dca-true": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-true": [
          "CL",
          "CR"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.reverse": {
      "definition_id": "rsi.filter",
      "type": "boolean",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": [
        false,
        true
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.filter-exit-action": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-binance-dca-true": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-false": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-true": [
          "SD",
          "ED",
          "EDOP"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi.filter.period": {
      "definition_id": "rsi.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 2,
      "maximum": 30,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.filter.upper-limit": {
      "definition_id": "rsi.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.filter.lower-limit": {
      "definition_id": "rsi.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 10,
      "maximum": 90,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "rsi.filter.filter-type": {
      "definition_id": "rsi.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "BD",
          "BHL",
          "BP",
          "BIC"
        ],
        "backtest-binance-dca-true": [
          "BD",
          "BHL",
          "BP",
          "BIC"
        ],
        "backtest-bybit-dca-false": [
          "BD",
          "BHL",
          "BP",
          "BIC"
        ],
        "backtest-bybit-dca-true": [
          "BD",
          "BHL",
          "BP",
          "BIC"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.asset": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "binding": {
        "kind": "same_as_card_field",
        "field_id": "backtest.symbol",
        "no_external_or_invented_asset": true
      },
      "allowed_values_status": "card_symbol_binding; no static market symbol list in condition metadata",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.timeframe": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-binance-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d"
        ],
        "backtest-bybit-dca-false": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ],
        "backtest-bybit-dca-true": [
          "1s",
          "5s",
          "10s",
          "15s",
          "30s",
          "45s",
          "1m",
          "2m",
          "3m",
          "5m",
          "10m",
          "15m",
          "30m",
          "1h",
          "4h",
          "1d"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.candles": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-binance-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-false": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ],
        "backtest-bybit-dca-true": [
          "DEFAULT",
          "HEIKEN_ASHI"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.calculation": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-binance-dca-true": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-false": [
          "CL",
          "CR"
        ],
        "backtest-bybit-dca-true": [
          "CL",
          "CR"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.reverse": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "boolean",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": [
        false,
        true
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.filter-exit-action": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "string",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": null,
      "maximum": null,
      "minimum_inclusive": null,
      "maximum_inclusive": null,
      "integer": false,
      "finite": false,
      "allowed_values": null,
      "allowed_values_by_context": {
        "backtest-binance-dca-false": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-binance-dca-true": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-false": [
          "SD",
          "ED",
          "EDOP"
        ],
        "backtest-bybit-dca-true": [
          "SD",
          "ED",
          "EDOP"
        ]
      },
      "step": {
        "status": "not_applicable",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ]
    },
    "rsi-growth-decline.filter.period": {
      "definition_id": "rsi-growth-decline.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 2,
      "maximum": 30,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": null,
      "allowed_values_by_context": {},
      "step": {
        "status": "integer_normalized_domain",
        "value": 1,
        "anchor": 0
      },
      "numeric_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "bounds_status": "source_constructor_bounds_observed",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    }
  },
  "conditional_rules": [
    {
      "definition_id": "rsi.entry",
      "if": {
        "field_id": "rsi.entry.condition",
        "equals": "TC"
      },
      "then": {
        "fields": {
          "rsi.entry.period": {
            "minimum": 2,
            "maximum": 20
          },
          "rsi.entry.upper-limit": {
            "minimum": 30,
            "maximum": 70
          },
          "rsi.entry.lower-limit": {
            "minimum": 30,
            "maximum": 70
          }
        }
      }
    },
    {
      "definition_id": "rsi.exit",
      "if": {
        "field_id": "rsi.exit.condition",
        "equals": "TC"
      },
      "then": {
        "fields": {
          "rsi.exit.period": {
            "minimum": 2,
            "maximum": 20
          },
          "rsi.exit.upper-limit": {
            "minimum": 30,
            "maximum": 70
          },
          "rsi.exit.lower-limit": {
            "minimum": 30,
            "maximum": 70
          }
        }
      }
    },
    {
      "definition_id": "rsi.filter",
      "if": {
        "field_id": "rsi.filter.filter-type",
        "equals": "BP"
      },
      "then": {
        "fields": {
          "rsi.filter.period": {
            "minimum": 2,
            "maximum": 20
          },
          "rsi.filter.upper-limit": {
            "minimum": 30,
            "maximum": 70
          },
          "rsi.filter.lower-limit": {
            "minimum": 30,
            "maximum": 70
          }
        }
      }
    }
  ],
  "cross_field_rules": [
    {
      "definition_id": "rsi.entry",
      "operator": "gt",
      "left_field_id": "rsi.entry.upper-limit",
      "right_field_id": "rsi.entry.lower-limit"
    },
    {
      "definition_id": "rsi.exit",
      "operator": "gt",
      "left_field_id": "rsi.exit.upper-limit",
      "right_field_id": "rsi.exit.lower-limit"
    },
    {
      "definition_id": "rsi.filter",
      "operator": "gt",
      "left_field_id": "rsi.filter.upper-limit",
      "right_field_id": "rsi.filter.lower-limit"
    }
  ]
}
```
