> 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/ai-strategy-builder/machine-impulse.md).

# Impulse and price change reference

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 and action rules. These three product variants use different windows and predicates. None offers a Reverse control. A positive impulse threshold selects rising price movement, not a Long-only trade direction.

## Current impulse — impulse.entry / impulse.exit

`IMPULSE`, displayed as **Impulse 2.0**, uses Normal one-second close samples with current evaluation. `p_s` selects 10, 20, …, 100 samples/nominal seconds; default 100. Over that ending window, let Lmin and Hmax be the minimum and maximum **close**, and C be the last close:

`pump=100*(C−Lmin)/Lmin`; `dump=100*(C−Hmax)/Hmax`.

This is the last close's distance from the window's extrema. It is not the candle high−low range and not the largest arbitrary low-to-high move that occurred and then fully reversed within the window.

Positive `dp`: pump>=dp gives A. Negative dp: dump<=dp gives A. Otherwise N. Equality qualifies in both directions. The accepted thresholds are a finite signed list in the constraints, not every number between its endpoints.

For MAIN, A can satisfy either selected task direction, subject to filters and task state. For CLOSE\_BY, ED/EDOP uses A as a direction-neutral ending condition, while AVG requests averaging. The condition may remain true; it is not defined as a one-time transition across dp.

`fm` (**Fast mode**) is a Boolean field in the observed MAIN metadata, default false, and is absent from CLOSE\_BY. It is separate from the page's global x200 option. The ordinary profile supports fm=false. The exact effect of **fm=true** on the current ordinary BACKTEST execution path remains unconfirmed and requires a separate mode check; do not promise speed, altered fills or equivalence for that setting.

## Past impulse filter — past-impulse.filter

`IMPULSE_PRICE_LIMIT`, **Based on past impulse**, searches overlapping p\_s-close windows in the last `p_m*60` one-second closes. For each window it computes the endpoint pump/dump above; P is the largest pump and D the smallest dump found. `p_m` is 1, 2, 5, 10, 15, 20 or 25 minutes; p\_s must be less than p\_m\*60. The dp list differs from the current-impulse list.

With `bs=false`, define “no qualifying impulse” as P\<dp for positive dp, or D>dp for negative dp. With `bs=true`, dp must be positive and “no qualifying impulse” means **both** P\<dp and D>−dp.

`WNI` gives AA when there was no qualifying impulse; `WI` gives AA when that condition is false; otherwise N. A movement exactly at the threshold counts as an impulse. Both-side mode searches either up or down movement; it does not mean two simultaneous positions. Unknown/NaN extrema return N rather than passing WI/WNI.

## Price change 2.0 filter — price-change.filter

`IMPULSE_PRICE_LIMIT_3`, **By price increase/decrease 2.0**, is different from both window-extrema calculations. It offers 1m, 5m, 15m and 1h timeframes, default 1h, and uses the current close and the first open in p Normal bars:

`change=100*(last_close−first_open)/first_open`.

p is integer 3…150, default 12. Let T=abs(dp); the confirmed absolute threshold is an integer 1…100, default 30. The sign written in dp does not switch the selected ei variant:

* `GM`: change>=T gives AA.
* `GL`: change<=T gives AA.
* `DM`: change<=−T gives AA.
* `DL`: change>=−T gives AA.

Otherwise N. All four threshold comparisons include equality. GL also permits negative changes; DL also permits positive changes. They are signed inequalities, not tests that first require growth or decline of a particular sign. The first open must be nonzero for the formula; NaN input does not grant permission. Candle type and timing are fixed with no separate selectors.

## 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.

* `impulse.entry` — `MAIN` / `IMPULSE`. Semantics: **Current impulse — impulse.entry / impulse.exit**. Fields: `ss`, `fm`, `p_s`, `dp`. timeframe: no selector; candles: no selector; calculation: no selector; Reverse: no selector.
* `impulse.exit` — `CLOSE_BY` / `IMPULSE`. Semantics: **Current impulse — impulse.entry / impulse.exit**. Fields: `ss`, `cba`, `p_s`, `dp`. timeframe: no selector; candles: no selector; calculation: no selector; Reverse: no selector.
* `price-change.filter` — `PRICE_LIMIT` / `IMPULSE_PRICE_LIMIT_3`. Semantics: **Price change 2.0 filter — price-change.filter**. Fields: `ss`, `Is`, `pla`, `p`, `dp`, `ei`. timeframe: ID-specific list; default 1h; candles: no selector; calculation: no selector; Reverse: no selector.
* `past-impulse.filter` — `PRICE_LIMIT` / `IMPULSE_PRICE_LIMIT`. Semantics: **Past impulse filter — past-impulse.filter**. Fields: `ss`, `pla`, `p_s`, `dp`, `p_m`, `ei`, `bs`. timeframe: no selector; candles: no selector; calculation: no selector; Reverse: no selector.

## 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": "impulse.entry",
      "original_indicator_id": "IMPULSE",
      "role": "entry",
      "fields": [
        {
          "id": "impulse.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": "impulse.entry.fast-mode",
          "source_key": "fm",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Fast mode"
          },
          "unit": "not specified",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "impulse.entry.period-seconds",
          "source_key": "p_s",
          "type": "string",
          "enum_values": [
            "10",
            "20",
            "30",
            "40",
            "50",
            "60",
            "70",
            "80",
            "90",
            "100"
          ],
          "schema_default": "100",
          "labels": {
            "en": "Calculation time (s)"
          },
          "unit": "seconds",
          "label_verified": true,
          "enum_labels": {
            "10": {
              "en": "10"
            },
            "20": {
              "en": "20"
            },
            "30": {
              "en": "30"
            },
            "40": {
              "en": "40"
            },
            "50": {
              "en": "50"
            },
            "60": {
              "en": "60"
            },
            "70": {
              "en": "70"
            },
            "80": {
              "en": "80"
            },
            "90": {
              "en": "90"
            },
            "100": {
              "en": "100"
            }
          },
          "numeric_range": null
        },
        {
          "id": "impulse.entry.deviation-percent",
          "source_key": "dp",
          "type": "number",
          "enum_values": null,
          "schema_default": 3.0,
          "labels": {
            "en": "Deviation"
          },
          "unit": "percent",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "Impulse 2.0"
      }
    },
    {
      "id": "impulse.exit",
      "original_indicator_id": "IMPULSE",
      "role": "exit",
      "fields": [
        {
          "id": "impulse.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": "impulse.exit.signal-action",
          "source_key": "cba",
          "type": "string",
          "enum_values": [
            "ED",
            "EDOP"
          ],
          "schema_default": "EDOP",
          "labels": {
            "en": "When a signal is received"
          },
          "unit": "not specified",
          "label_verified": true,
          "enum_labels": {
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "numeric_range": null
        },
        {
          "id": "impulse.exit.period-seconds",
          "source_key": "p_s",
          "type": "string",
          "enum_values": [
            "10",
            "20",
            "30",
            "40",
            "50",
            "60",
            "70",
            "80",
            "90",
            "100"
          ],
          "schema_default": "100",
          "labels": {
            "en": "Calculation time (s)"
          },
          "unit": "seconds",
          "label_verified": true,
          "enum_labels": {
            "10": {
              "en": "10"
            },
            "20": {
              "en": "20"
            },
            "30": {
              "en": "30"
            },
            "40": {
              "en": "40"
            },
            "50": {
              "en": "50"
            },
            "60": {
              "en": "60"
            },
            "70": {
              "en": "70"
            },
            "80": {
              "en": "80"
            },
            "90": {
              "en": "90"
            },
            "100": {
              "en": "100"
            }
          },
          "numeric_range": null
        },
        {
          "id": "impulse.exit.deviation-percent",
          "source_key": "dp",
          "type": "number",
          "enum_values": null,
          "schema_default": 3.0,
          "labels": {
            "en": "Deviation"
          },
          "unit": "percent",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "Impulse 2.0"
      }
    },
    {
      "id": "past-impulse.filter",
      "original_indicator_id": "IMPULSE_PRICE_LIMIT",
      "role": "filter",
      "fields": [
        {
          "id": "past-impulse.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": "past-impulse.filter.filter-exit-action",
          "source_key": "pla",
          "type": "string",
          "enum_values": [
            "SD",
            "ED",
            "EDOP"
          ],
          "schema_default": "SD",
          "labels": {
            "en": "When exiting the filter"
          },
          "unit": "not specified",
          "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
        },
        {
          "id": "past-impulse.filter.period-seconds",
          "source_key": "p_s",
          "type": "string",
          "enum_values": [
            "10",
            "20",
            "30",
            "40",
            "50",
            "60",
            "70",
            "80",
            "90",
            "100"
          ],
          "schema_default": "100",
          "labels": {
            "en": "Calculation time (s)"
          },
          "unit": "seconds",
          "label_verified": true,
          "enum_labels": {
            "10": {
              "en": "10"
            },
            "20": {
              "en": "20"
            },
            "30": {
              "en": "30"
            },
            "40": {
              "en": "40"
            },
            "50": {
              "en": "50"
            },
            "60": {
              "en": "60"
            },
            "70": {
              "en": "70"
            },
            "80": {
              "en": "80"
            },
            "90": {
              "en": "90"
            },
            "100": {
              "en": "100"
            }
          },
          "numeric_range": null
        },
        {
          "id": "past-impulse.filter.deviation-percent",
          "source_key": "dp",
          "type": "number",
          "enum_values": null,
          "schema_default": 3.0,
          "labels": {
            "en": "Deviation"
          },
          "unit": "percent",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "past-impulse.filter.period-minutes",
          "source_key": "p_m",
          "type": "string",
          "enum_values": [
            "1",
            "2",
            "5",
            "10",
            "15",
            "20",
            "25"
          ],
          "schema_default": "15",
          "labels": {
            "en": "Analysis time (m)"
          },
          "unit": "minutes",
          "label_verified": true,
          "enum_labels": {
            "1": {
              "en": "1"
            },
            "2": {
              "en": "2"
            },
            "5": {
              "en": "5"
            },
            "10": {
              "en": "10"
            },
            "15": {
              "en": "15"
            },
            "20": {
              "en": "20"
            },
            "25": {
              "en": "25"
            }
          },
          "numeric_range": null
        },
        {
          "id": "past-impulse.filter.source-ei",
          "source_key": "ei",
          "type": "string",
          "enum_values": [
            "WI",
            "WNI"
          ],
          "schema_default": "WNI",
          "labels": {
            "en": "Allow entry if"
          },
          "unit": "not specified",
          "label_verified": true,
          "enum_labels": {
            "WI": {
              "en": "There was an impulse"
            },
            "WNI": {
              "en": "There was no momentum"
            }
          },
          "numeric_range": null
        },
        {
          "id": "past-impulse.filter.both-sides",
          "source_key": "bs",
          "type": "boolean",
          "enum_values": null,
          "schema_default": false,
          "labels": {
            "en": "Both sides"
          },
          "unit": "not specified",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "Based on past impulse"
      }
    },
    {
      "id": "price-change.filter",
      "original_indicator_id": "IMPULSE_PRICE_LIMIT_3",
      "role": "filter",
      "fields": [
        {
          "id": "price-change.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": "price-change.filter.timeframe",
          "source_key": "Is",
          "type": "string",
          "enum_values": [
            "1m",
            "5m",
            "15m",
            "1h"
          ],
          "schema_default": "1h",
          "labels": {
            "en": "TF"
          },
          "unit": "timeframe",
          "label_verified": true,
          "enum_labels": {
            "1m": {
              "en": "1m"
            },
            "5m": {
              "en": "5m"
            },
            "15m": {
              "en": "15m"
            },
            "1h": {
              "en": "1h"
            }
          },
          "numeric_range": null
        },
        {
          "id": "price-change.filter.filter-exit-action",
          "source_key": "pla",
          "type": "string",
          "enum_values": [
            "SD",
            "ED",
            "EDOP"
          ],
          "schema_default": "SD",
          "labels": {
            "en": "When exiting the filter"
          },
          "unit": "not specified",
          "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
        },
        {
          "id": "price-change.filter.period",
          "source_key": "p",
          "type": "integer",
          "enum_values": null,
          "schema_default": 12,
          "labels": {
            "en": "Period"
          },
          "unit": "bars",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "price-change.filter.deviation-percent",
          "source_key": "dp",
          "type": "integer",
          "enum_values": null,
          "schema_default": 30,
          "labels": {
            "en": "Deviation"
          },
          "unit": "percent",
          "label_verified": true,
          "enum_labels": null,
          "numeric_range": null
        },
        {
          "id": "price-change.filter.source-ei",
          "source_key": "ei",
          "type": "string",
          "enum_values": [
            "GM",
            "GL",
            "DM",
            "DL"
          ],
          "schema_default": "GM",
          "labels": {
            "en": "Allow entry if"
          },
          "unit": "not specified",
          "label_verified": true,
          "enum_labels": {
            "GM": {
              "en": "Growth of more than"
            },
            "GL": {
              "en": "Growth of less than"
            },
            "DM": {
              "en": "Decrease of more than"
            },
            "DL": {
              "en": "Decrease of less than"
            }
          },
          "numeric_range": null
        }
      ],
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "labels": {
        "en": "By price increase/decrease 2.0"
      }
    }
  ],
  "context_overrides": {
    "backtest-binance-dca-false": {},
    "backtest-binance-dca-true": {
      "impulse.exit": {
        "impulse.exit.signal-action": {
          "enum_values": [
            "AVG",
            "ED",
            "EDOP"
          ],
          "enum_labels": {
            "AVG": {
              "en": "Average"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "schema_default": "AVG"
        }
      }
    },
    "backtest-bybit-dca-false": {},
    "backtest-bybit-dca-true": {
      "impulse.exit": {
        "impulse.exit.signal-action": {
          "enum_values": [
            "AVG",
            "ED",
            "EDOP"
          ],
          "enum_labels": {
            "AVG": {
              "en": "Average"
            },
            "ED": {
              "en": "Sell by market"
            },
            "EDOP": {
              "en": "Sell at market with deviation (if specified)"
            }
          },
          "schema_default": "AVG"
        }
      }
    }
  }
}
```

### Condition constraints and dependencies

```json
{
  "format": "itb.condition-constraints/0.4.0",
  "definitions": [
    {
      "id": "impulse.entry",
      "field_ids": [
        "impulse.entry.asset",
        "impulse.entry.fast-mode",
        "impulse.entry.period-seconds",
        "impulse.entry.deviation-percent"
      ],
      "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": "impulse.exit",
      "field_ids": [
        "impulse.exit.asset",
        "impulse.exit.signal-action",
        "impulse.exit.period-seconds",
        "impulse.exit.deviation-percent"
      ],
      "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": "past-impulse.filter",
      "field_ids": [
        "past-impulse.filter.asset",
        "past-impulse.filter.filter-exit-action",
        "past-impulse.filter.period-seconds",
        "past-impulse.filter.deviation-percent",
        "past-impulse.filter.period-minutes",
        "past-impulse.filter.source-ei",
        "past-impulse.filter.both-sides"
      ],
      "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": "price-change.filter",
      "field_ids": [
        "price-change.filter.asset",
        "price-change.filter.timeframe",
        "price-change.filter.filter-exit-action",
        "price-change.filter.period",
        "price-change.filter.deviation-percent",
        "price-change.filter.source-ei"
      ],
      "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": {
    "impulse.entry.asset": {
      "definition_id": "impulse.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
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "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"
    },
    "impulse.entry.fast-mode": {
      "definition_id": "impulse.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"
      ]
    },
    "impulse.entry.period-seconds": {
      "definition_id": "impulse.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": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-binance-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-false": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ]
      },
      "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"
      ]
    },
    "impulse.entry.deviation-percent": {
      "definition_id": "impulse.entry",
      "type": "number",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": -50.0,
      "maximum": 50.0,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": false,
      "finite": true,
      "allowed_values": [
        1.0,
        1.5,
        2.0,
        2.5,
        3.0,
        3.5,
        4.0,
        4.5,
        5.0,
        5.5,
        6.0,
        6.5,
        7.0,
        7.5,
        8.0,
        8.5,
        9.0,
        9.5,
        -1.0,
        -1.5,
        -2.0,
        -2.5,
        -3.0,
        -3.5,
        -4.0,
        -4.5,
        -5.0,
        -5.5,
        -6.0,
        -6.5,
        -7.0,
        -7.5,
        -8.0,
        -8.5,
        -9.0,
        -9.5,
        10.0,
        11.0,
        12.0,
        13.0,
        14.0,
        15.0,
        16.0,
        17.0,
        18.0,
        19.0,
        20.0,
        -10.0,
        -11.0,
        -12.0,
        -13.0,
        -14.0,
        -15.0,
        -16.0,
        -17.0,
        -18.0,
        -19.0,
        -20.0,
        25.0,
        30.0,
        35.0,
        40.0,
        45.0,
        50.0,
        -25.0,
        -30.0,
        -35.0,
        -40.0,
        -45.0,
        -50.0
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "source_allowed_values",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "numeric_status": "source_allowed_values_observed",
      "bounds_status": "source_allowed_values_observed",
      "input_policy": "finite JSON number; no numeric strings or bool; apply exact listed source rules",
      "ui_step": 0.01,
      "ui_step_is_server_constraint": false
    },
    "impulse.exit.asset": {
      "definition_id": "impulse.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
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "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"
    },
    "impulse.exit.signal-action": {
      "definition_id": "impulse.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"
      ]
    },
    "impulse.exit.period-seconds": {
      "definition_id": "impulse.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": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-binance-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-false": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ]
      },
      "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"
      ]
    },
    "impulse.exit.deviation-percent": {
      "definition_id": "impulse.exit",
      "type": "number",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": -50.0,
      "maximum": 50.0,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": false,
      "finite": true,
      "allowed_values": [
        1.0,
        1.5,
        2.0,
        2.5,
        3.0,
        3.5,
        4.0,
        4.5,
        5.0,
        5.5,
        6.0,
        6.5,
        7.0,
        7.5,
        8.0,
        8.5,
        9.0,
        9.5,
        -1.0,
        -1.5,
        -2.0,
        -2.5,
        -3.0,
        -3.5,
        -4.0,
        -4.5,
        -5.0,
        -5.5,
        -6.0,
        -6.5,
        -7.0,
        -7.5,
        -8.0,
        -8.5,
        -9.0,
        -9.5,
        10.0,
        11.0,
        12.0,
        13.0,
        14.0,
        15.0,
        16.0,
        17.0,
        18.0,
        19.0,
        20.0,
        -10.0,
        -11.0,
        -12.0,
        -13.0,
        -14.0,
        -15.0,
        -16.0,
        -17.0,
        -18.0,
        -19.0,
        -20.0,
        25.0,
        30.0,
        35.0,
        40.0,
        45.0,
        50.0,
        -25.0,
        -30.0,
        -35.0,
        -40.0,
        -45.0,
        -50.0
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "source_allowed_values",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "numeric_status": "source_allowed_values_observed",
      "bounds_status": "source_allowed_values_observed",
      "input_policy": "finite JSON number; no numeric strings or bool; apply exact listed source rules",
      "ui_step": 0.01,
      "ui_step_is_server_constraint": false
    },
    "past-impulse.filter.asset": {
      "definition_id": "past-impulse.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
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "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"
    },
    "past-impulse.filter.filter-exit-action": {
      "definition_id": "past-impulse.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"
      ]
    },
    "past-impulse.filter.period-seconds": {
      "definition_id": "past-impulse.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": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-binance-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-false": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ],
        "backtest-bybit-dca-true": [
          "10",
          "20",
          "30",
          "40",
          "50",
          "60",
          "70",
          "80",
          "90",
          "100"
        ]
      },
      "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"
      ]
    },
    "past-impulse.filter.deviation-percent": {
      "definition_id": "past-impulse.filter",
      "type": "number",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": -20.0,
      "maximum": 20.0,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": false,
      "finite": true,
      "allowed_values": [
        0.5,
        -0.5,
        1,
        -1.0,
        1.5,
        -1.5,
        2,
        -2.0,
        2.5,
        -2.5,
        3.0,
        -3.0,
        3.5,
        -3.5,
        4.0,
        -4.0,
        4.5,
        -4.5,
        5.0,
        -5.0,
        10.0,
        -10.0,
        15.0,
        -15.0,
        20.0,
        -20.0
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "source_allowed_values",
        "value": null,
        "anchor": null
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "numeric_status": "source_allowed_values_observed",
      "bounds_status": "source_allowed_values_observed",
      "input_policy": "finite JSON number; no numeric strings or bool; apply exact listed source rules",
      "ui_step": 0.01,
      "ui_step_is_server_constraint": false
    },
    "past-impulse.filter.period-minutes": {
      "definition_id": "past-impulse.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": [
          "1",
          "2",
          "5",
          "10",
          "15",
          "20",
          "25"
        ],
        "backtest-binance-dca-true": [
          "1",
          "2",
          "5",
          "10",
          "15",
          "20",
          "25"
        ],
        "backtest-bybit-dca-false": [
          "1",
          "2",
          "5",
          "10",
          "15",
          "20",
          "25"
        ],
        "backtest-bybit-dca-true": [
          "1",
          "2",
          "5",
          "10",
          "15",
          "20",
          "25"
        ]
      },
      "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"
      ]
    },
    "past-impulse.filter.source-ei": {
      "definition_id": "past-impulse.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": [
          "WI",
          "WNI"
        ],
        "backtest-binance-dca-true": [
          "WI",
          "WNI"
        ],
        "backtest-bybit-dca-false": [
          "WI",
          "WNI"
        ],
        "backtest-bybit-dca-true": [
          "WI",
          "WNI"
        ]
      },
      "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"
      ]
    },
    "past-impulse.filter.both-sides": {
      "definition_id": "past-impulse.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"
      ]
    },
    "price-change.filter.asset": {
      "definition_id": "price-change.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
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "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"
    },
    "price-change.filter.timeframe": {
      "definition_id": "price-change.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": [
          "1m",
          "5m",
          "15m",
          "1h"
        ],
        "backtest-binance-dca-true": [
          "1m",
          "5m",
          "15m",
          "1h"
        ],
        "backtest-bybit-dca-false": [
          "1m",
          "5m",
          "15m",
          "1h"
        ],
        "backtest-bybit-dca-true": [
          "1m",
          "5m",
          "15m",
          "1h"
        ]
      },
      "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"
      ]
    },
    "price-change.filter.filter-exit-action": {
      "definition_id": "price-change.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"
      ]
    },
    "price-change.filter.period": {
      "definition_id": "price-change.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": 3,
      "maximum": 150,
      "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
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "numeric_status": "source_constructor_bounds_observed",
      "bounds_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "price-change.filter.deviation-percent": {
      "definition_id": "price-change.filter",
      "type": "integer",
      "nullable": false,
      "nullability_status": "curated_non_null_subset",
      "strict_mode_eligible": true,
      "status": "source_observed_and_current_backtest_observed",
      "minimum": -100,
      "maximum": 100,
      "minimum_inclusive": true,
      "maximum_inclusive": true,
      "integer": true,
      "finite": true,
      "allowed_values": [
        -100,
        -99,
        -98,
        -97,
        -96,
        -95,
        -94,
        -93,
        -92,
        -91,
        -90,
        -89,
        -88,
        -87,
        -86,
        -85,
        -84,
        -83,
        -82,
        -81,
        -80,
        -79,
        -78,
        -77,
        -76,
        -75,
        -74,
        -73,
        -72,
        -71,
        -70,
        -69,
        -68,
        -67,
        -66,
        -65,
        -64,
        -63,
        -62,
        -61,
        -60,
        -59,
        -58,
        -57,
        -56,
        -55,
        -54,
        -53,
        -52,
        -51,
        -50,
        -49,
        -48,
        -47,
        -46,
        -45,
        -44,
        -43,
        -42,
        -41,
        -40,
        -39,
        -38,
        -37,
        -36,
        -35,
        -34,
        -33,
        -32,
        -31,
        -30,
        -29,
        -28,
        -27,
        -26,
        -25,
        -24,
        -23,
        -22,
        -21,
        -20,
        -19,
        -18,
        -17,
        -16,
        -15,
        -14,
        -13,
        -12,
        -11,
        -10,
        -9,
        -8,
        -7,
        -6,
        -5,
        -4,
        -3,
        -2,
        -1,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89,
        90,
        91,
        92,
        93,
        94,
        95,
        96,
        97,
        98,
        99,
        100
      ],
      "allowed_values_by_context": {},
      "step": {
        "status": "source_modulo",
        "value": 1,
        "anchor": 0
      },
      "available_contexts": [
        "backtest-binance-dca-false",
        "backtest-binance-dca-true",
        "backtest-bybit-dca-false",
        "backtest-bybit-dca-true"
      ],
      "numeric_status": "source_constructor_bounds_observed",
      "bounds_status": "source_constructor_bounds_observed",
      "input_policy": "exact JSON integer; no numeric strings, bool, rounding or truncation",
      "ui_step": 1,
      "ui_step_is_server_constraint": false
    },
    "price-change.filter.source-ei": {
      "definition_id": "price-change.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": [
          "GM",
          "GL",
          "DM",
          "DL"
        ],
        "backtest-binance-dca-true": [
          "GM",
          "GL",
          "DM",
          "DL"
        ],
        "backtest-bybit-dca-false": [
          "GM",
          "GL",
          "DM",
          "DL"
        ],
        "backtest-bybit-dca-true": [
          "GM",
          "GL",
          "DM",
          "DL"
        ]
      },
      "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"
      ]
    }
  },
  "conditional_rules": [
    {
      "definition_id": "past-impulse.filter",
      "if": {
        "field_id": "past-impulse.filter.both-sides",
        "equals": true
      },
      "then": {
        "fields": {
          "past-impulse.filter.deviation-percent": {
            "allowed_values": [
              0.5,
              1,
              1.5,
              2,
              2.5,
              3.0,
              3.5,
              4.0,
              4.5,
              5.0,
              10.0,
              15.0,
              20.0
            ]
          }
        }
      }
    },
    {
      "definition_id": "past-impulse.filter",
      "if": {
        "field_id": "past-impulse.filter.period-minutes",
        "equals": "1"
      },
      "then": {
        "fields": {
          "past-impulse.filter.period-seconds": {
            "allowed_values": [
              "10",
              "20",
              "30",
              "40",
              "50"
            ]
          }
        }
      }
    }
  ],
  "cross_field_rules": []
}
```
