{
  "$defs": {
    "ADXIndicatorSignalRef": {
      "additionalProperties": false,
      "description": "ADX with access to +DI / -DI directional indicators.\n\nThe ADX indicator computes three series internally: the composite ADX\n(trend strength) plus the Plus Directional Indicator (+DI) and Minus\nDirectional Indicator (-DI). Use ``output`` to select which series:\n\n  - ``adx`` (default): composite Wilder ADX, 0-100 trend strength.\n  - ``plus_di``: +DI, upward directional movement strength.\n  - ``minus_di``: -DI, downward directional movement strength.\n\n``plus_di > minus_di`` indicates an up-trending directional bias;\n``plus_di < minus_di`` indicates a down-trending bias.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "adx_di",
          "default": "adx_di",
          "title": "Indicator",
          "type": "string"
        },
        "output": {
          "default": "adx",
          "enum": [
            "adx",
            "plus_di",
            "minus_di"
          ],
          "title": "Output",
          "type": "string"
        },
        "period": {
          "default": 14,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "ADXIndicatorSignalRef",
      "type": "object"
    },
    "AVWAPIndicatorSignalRef": {
      "additionalProperties": false,
      "description": "Anchored VWAP \u2014 VWAP anchored to a specific session/week/month/custom point.\n\nMirrors the IR ``AnchoredVWAP`` model: ``anchor`` selects the canonical\nanchor boundary; ``anchor_datetime`` (ISO 8601 string) supplies the custom\nanchor instant when ``anchor=\"custom\"``.\n\nUse ``vwap`` for the simple session-anchored case; use ``avwap`` when you\nneed week/month/ytd/custom anchors or the ``std_dev`` band output.",
      "properties": {
        "anchor": {
          "default": "session",
          "enum": [
            "session",
            "session_open",
            "week",
            "week_open",
            "month",
            "month_start",
            "ytd",
            "custom"
          ],
          "title": "Anchor",
          "type": "string"
        },
        "anchor_datetime": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Anchor Datetime"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "avwap",
          "default": "avwap",
          "title": "Indicator",
          "type": "string"
        },
        "output": {
          "default": "value",
          "enum": [
            "value",
            "std_dev"
          ],
          "title": "Output",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "AVWAPIndicatorSignalRef",
      "type": "object"
    },
    "AdIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "ad",
          "default": "ad",
          "title": "Indicator",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "AdIndicatorSignalRef",
      "type": "object"
    },
    "AroonIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "aroon",
          "default": "aroon",
          "title": "Indicator",
          "type": "string"
        },
        "line": {
          "enum": [
            "up",
            "down"
          ],
          "title": "Line",
          "type": "string"
        },
        "period": {
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "period",
        "line"
      ],
      "title": "AroonIndicatorSignalRef",
      "type": "object"
    },
    "BollingerSignalRef": {
      "additionalProperties": false,
      "description": "Bollinger Bands \u2014 select band edge or derived property.\n\nOutputs:\n  - upper / middle / lower: price-level bands\n  - bandwidth: (upper - lower) / middle * 100\n  - stddev: population standard deviation over the window",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "bollinger",
          "default": "bollinger",
          "title": "Indicator",
          "type": "string"
        },
        "multiplier": {
          "default": 2.0,
          "maximum": 10.0,
          "minimum": 0.1,
          "title": "Multiplier",
          "type": "number"
        },
        "output": {
          "enum": [
            "upper",
            "middle",
            "lower",
            "bandwidth",
            "stddev"
          ],
          "title": "Output",
          "type": "string"
        },
        "period": {
          "default": 20,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "output"
      ],
      "title": "BollingerSignalRef",
      "type": "object"
    },
    "CandlestickSignalRef": {
      "additionalProperties": false,
      "description": "Candlestick pattern recognition as a numeric signal value (VIB-1316).\n\nEmits a per-bar value in ``{-1.0, 0.0, +1.0}`` indicating a bearish\npattern hit, no hit, or a bullish pattern hit respectively. Routes\nthrough the same engine routine (``_update_candlestick``) as\n``CandlePatternSpec`` so the two paths agree on every bar.\n\nUse this SignalRef when you need the pattern value as an operand in a\n``compare`` or ``cross`` condition (e.g. ``candlestick(doji) == 1``).\nFor role-shaped entry/exit semantics with quality filters, prefer\n``CandlePatternSpec`` as the top-level ConditionSpec.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "candlestick",
          "default": "candlestick",
          "title": "Indicator",
          "type": "string"
        },
        "pattern": {
          "enum": [
            "hammer",
            "inverted_hammer",
            "shooting_star",
            "doji",
            "dragonfly_doji",
            "gravestone_doji",
            "spinning_top",
            "marubozu",
            "bullish_engulfing",
            "bearish_engulfing",
            "harami",
            "harami_cross",
            "inside_bar",
            "morning_star",
            "evening_star",
            "piercing_line",
            "dark_cloud_cover",
            "three_white_soldiers",
            "three_black_crows"
          ],
          "title": "Pattern",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "pattern"
      ],
      "title": "CandlestickSignalRef",
      "type": "object"
    },
    "DonchianSignalRef": {
      "additionalProperties": false,
      "description": "Donchian Channel \u2014 rolling max/min over `period` bars; **excludes the current bar** (differs from most charting platforms which include it).\n\nNote: this engine excludes the current bar so that a close-exceeds-upper\nbreakout signal is meaningful (the current bar cannot contaminate its own\nband). Most charting platforms plot Donchian bands *including* the current\nbar \u2014 strategies ported from those platforms will see the breakout-bar\nupper/lower differ by one bar of high/low data. See\n``docs/indicator-conventions.md``.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "donchian",
          "default": "donchian",
          "title": "Indicator",
          "type": "string"
        },
        "output": {
          "enum": [
            "upper",
            "middle",
            "lower"
          ],
          "title": "Output",
          "type": "string"
        },
        "period": {
          "default": 20,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "output"
      ],
      "title": "DonchianSignalRef",
      "type": "object"
    },
    "KeltnerSignalRef": {
      "additionalProperties": false,
      "description": "Keltner Channel \u2014 EMA middle with ATR-based upper/lower bands.\n\nMirrors BollingerSignalRef/DonchianSignalRef. Exposes typed access to the\nthree KC band edges. ``period`` drives the EMA middle band. Set\n``atr_period`` to use a different lookback for the ATR that shapes the\nupper/lower bands (common practice is a shorter ATR than the EMA, e.g.\n``period=20, atr_period=10``). ``atr_period=None`` (default) reuses\n``period`` for ATR \u2014 historical behavior.",
      "properties": {
        "atr_period": {
          "anyOf": [
            {
              "maximum": 500,
              "minimum": 2,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Atr Period"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "keltner",
          "default": "keltner",
          "title": "Indicator",
          "type": "string"
        },
        "multiplier": {
          "default": 2.0,
          "maximum": 10.0,
          "minimum": 0.1,
          "title": "Multiplier",
          "type": "number"
        },
        "output": {
          "enum": [
            "upper",
            "middle",
            "lower"
          ],
          "title": "Output",
          "type": "string"
        },
        "period": {
          "default": 20,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "output"
      ],
      "title": "KeltnerSignalRef",
      "type": "object"
    },
    "MacdIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "fast_period": {
          "maximum": 500,
          "minimum": 1,
          "title": "Fast Period",
          "type": "integer"
        },
        "indicator": {
          "enum": [
            "macd",
            "macd_signal",
            "macd_histogram"
          ],
          "title": "Indicator",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "signal_period": {
          "maximum": 500,
          "minimum": 1,
          "title": "Signal Period",
          "type": "integer"
        },
        "slow_period": {
          "maximum": 500,
          "minimum": 2,
          "title": "Slow Period",
          "type": "integer"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "indicator",
        "fast_period",
        "slow_period",
        "signal_period"
      ],
      "title": "MacdIndicatorSignalRef",
      "type": "object"
    },
    "OBVIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "obv",
          "default": "obv",
          "title": "Indicator",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "OBVIndicatorSignalRef",
      "type": "object"
    },
    "PeriodIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "enum": [
            "ema",
            "sma",
            "rsi",
            "atr",
            "adx",
            "roc",
            "cci",
            "volume_sma",
            "mfi",
            "cmf",
            "vwma",
            "std",
            "var",
            "median"
          ],
          "title": "Indicator",
          "type": "string"
        },
        "offset": {
          "default": 0,
          "maximum": 500,
          "minimum": 0,
          "title": "Offset",
          "type": "integer"
        },
        "period": {
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "indicator",
        "period"
      ],
      "title": "PeriodIndicatorSignalRef",
      "type": "object"
    },
    "PivotIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "enum": [
            "pivot_p",
            "pivot_s1",
            "pivot_s2",
            "pivot_s3",
            "pivot_r1",
            "pivot_r2",
            "pivot_r3"
          ],
          "title": "Indicator",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "indicator"
      ],
      "title": "PivotIndicatorSignalRef",
      "type": "object"
    },
    "SrsiIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "d_period": {
          "default": 3,
          "maximum": 100,
          "minimum": 1,
          "title": "D Period",
          "type": "integer"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "enum": [
            "srsi_k",
            "srsi_d"
          ],
          "title": "Indicator",
          "type": "string"
        },
        "k_period": {
          "default": 3,
          "maximum": 100,
          "minimum": 1,
          "title": "K Period",
          "type": "integer"
        },
        "period": {
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "indicator",
        "period"
      ],
      "title": "SrsiIndicatorSignalRef",
      "type": "object"
    },
    "StochasticIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "d_period": {
          "default": 3,
          "maximum": 100,
          "minimum": 1,
          "title": "D Period",
          "type": "integer"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "enum": [
            "stochastic_k",
            "stochastic_d"
          ],
          "title": "Indicator",
          "type": "string"
        },
        "k_period": {
          "default": 3,
          "maximum": 100,
          "minimum": 1,
          "title": "K Period",
          "type": "integer"
        },
        "period": {
          "default": 14,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "indicator"
      ],
      "title": "StochasticIndicatorSignalRef",
      "type": "object"
    },
    "SupertrendIndicatorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "supertrend",
          "default": "supertrend",
          "title": "Indicator",
          "type": "string"
        },
        "multiplier": {
          "default": 3.0,
          "maximum": 10.0,
          "minimum": 0.1,
          "title": "Multiplier",
          "type": "number"
        },
        "output": {
          "default": "value",
          "enum": [
            "value",
            "direction"
          ],
          "title": "Output",
          "type": "string"
        },
        "period": {
          "default": 10,
          "maximum": 500,
          "minimum": 2,
          "title": "Period",
          "type": "integer"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "SupertrendIndicatorSignalRef",
      "type": "object"
    },
    "VWAPBandsSignalRef": {
      "additionalProperties": false,
      "description": "VWAP Bands \u2014 stddev envelopes around anchored VWAP.\n\nOutputs:\n  - upper  = VWAP + mult * sigma\n  - middle = VWAP\n  - lower  = VWAP - mult * sigma\n\nwhere sigma is the volume-weighted std dev of typical price vs VWAP,\naccumulated since the last anchor reset (session/week/month).",
      "properties": {
        "anchor": {
          "default": "session",
          "enum": [
            "session",
            "week",
            "month"
          ],
          "title": "Anchor",
          "type": "string"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "vwap_bands",
          "default": "vwap_bands",
          "title": "Indicator",
          "type": "string"
        },
        "multiplier": {
          "default": 2.0,
          "maximum": 10.0,
          "minimum": 0.1,
          "title": "Multiplier",
          "type": "number"
        },
        "output": {
          "enum": [
            "upper",
            "middle",
            "lower"
          ],
          "title": "Output",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "output"
      ],
      "title": "VWAPBandsSignalRef",
      "type": "object"
    },
    "VWAPIndicatorSignalRef": {
      "additionalProperties": false,
      "description": "VWAP \u2014 anchored Volume-Weighted Average Price.\n\nResets at each anchor boundary (session/week/month). Use this SignalRef\nwhen you need the VWAP scalar as an operand in compare/cross conditions\n(e.g. ``close > vwap(session)``). For envelope/band semantics use\n``vwap_bands`` instead.\n\nMath: anchored cumulative volume-weighted typical price; zero-volume\nbars carry forward the prior VWAP value (no vol=1.0 substitution). See\n``docs/indicator-conventions.md``.",
      "properties": {
        "anchor": {
          "default": "session",
          "enum": [
            "session",
            "week",
            "month"
          ],
          "title": "Anchor",
          "type": "string"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "indicator": {
          "const": "vwap",
          "default": "vwap",
          "title": "Indicator",
          "type": "string"
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional higher-timeframe override for this value ref. Set it inside lhs/rhs refs such as {'type': 'indicator', ..., 'resolution': '4h'} or {'type': 'price', 'field': 'close', 'resolution': '4h'}. Do not put timeframe/source_timeframe on the parent condition. None = strategy timeframe.",
          "title": "Resolution"
        },
        "type": {
          "const": "indicator",
          "default": "indicator",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "VWAPIndicatorSignalRef",
      "type": "object"
    }
  },
  "discriminator": {
    "mapping": {
      "ad": "#/$defs/AdIndicatorSignalRef",
      "adx": "#/$defs/PeriodIndicatorSignalRef",
      "adx_di": "#/$defs/ADXIndicatorSignalRef",
      "aroon": "#/$defs/AroonIndicatorSignalRef",
      "atr": "#/$defs/PeriodIndicatorSignalRef",
      "avwap": "#/$defs/AVWAPIndicatorSignalRef",
      "bollinger": "#/$defs/BollingerSignalRef",
      "candlestick": "#/$defs/CandlestickSignalRef",
      "cci": "#/$defs/PeriodIndicatorSignalRef",
      "cmf": "#/$defs/PeriodIndicatorSignalRef",
      "donchian": "#/$defs/DonchianSignalRef",
      "ema": "#/$defs/PeriodIndicatorSignalRef",
      "keltner": "#/$defs/KeltnerSignalRef",
      "macd": "#/$defs/MacdIndicatorSignalRef",
      "macd_histogram": "#/$defs/MacdIndicatorSignalRef",
      "macd_signal": "#/$defs/MacdIndicatorSignalRef",
      "median": "#/$defs/PeriodIndicatorSignalRef",
      "mfi": "#/$defs/PeriodIndicatorSignalRef",
      "obv": "#/$defs/OBVIndicatorSignalRef",
      "pivot_p": "#/$defs/PivotIndicatorSignalRef",
      "pivot_r1": "#/$defs/PivotIndicatorSignalRef",
      "pivot_r2": "#/$defs/PivotIndicatorSignalRef",
      "pivot_r3": "#/$defs/PivotIndicatorSignalRef",
      "pivot_s1": "#/$defs/PivotIndicatorSignalRef",
      "pivot_s2": "#/$defs/PivotIndicatorSignalRef",
      "pivot_s3": "#/$defs/PivotIndicatorSignalRef",
      "roc": "#/$defs/PeriodIndicatorSignalRef",
      "rsi": "#/$defs/PeriodIndicatorSignalRef",
      "sma": "#/$defs/PeriodIndicatorSignalRef",
      "srsi_d": "#/$defs/SrsiIndicatorSignalRef",
      "srsi_k": "#/$defs/SrsiIndicatorSignalRef",
      "std": "#/$defs/PeriodIndicatorSignalRef",
      "stochastic_d": "#/$defs/StochasticIndicatorSignalRef",
      "stochastic_k": "#/$defs/StochasticIndicatorSignalRef",
      "supertrend": "#/$defs/SupertrendIndicatorSignalRef",
      "var": "#/$defs/PeriodIndicatorSignalRef",
      "volume_sma": "#/$defs/PeriodIndicatorSignalRef",
      "vwap": "#/$defs/VWAPIndicatorSignalRef",
      "vwap_bands": "#/$defs/VWAPBandsSignalRef",
      "vwma": "#/$defs/PeriodIndicatorSignalRef"
    },
    "propertyName": "indicator"
  },
  "oneOf": [
    {
      "$ref": "#/$defs/PeriodIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/MacdIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/StochasticIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/SrsiIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/AdIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/OBVIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/AroonIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/SupertrendIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/BollingerSignalRef"
    },
    {
      "$ref": "#/$defs/DonchianSignalRef"
    },
    {
      "$ref": "#/$defs/KeltnerSignalRef"
    },
    {
      "$ref": "#/$defs/VWAPBandsSignalRef"
    },
    {
      "$ref": "#/$defs/VWAPIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/AVWAPIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/ADXIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/PivotIndicatorSignalRef"
    },
    {
      "$ref": "#/$defs/CandlestickSignalRef"
    }
  ]
}
