{
  "$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"
    },
    "AnchorSignalRef": {
      "additionalProperties": false,
      "properties": {
        "anchor_field": {
          "enum": [
            "open",
            "high",
            "low",
            "close",
            "mid",
            "range"
          ],
          "title": "Anchor Field",
          "type": "string"
        },
        "anchor_id": {
          "title": "Anchor Id",
          "type": "string"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "anchor",
          "default": "anchor",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "anchor_id",
        "anchor_field"
      ],
      "title": "AnchorSignalRef",
      "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"
    },
    "BinaryExprSignalRef": {
      "additionalProperties": false,
      "description": "Binary expression over two SignalRef operands.\n\nProvided alongside UnaryExprSignalRef so tests / flat-Condition authors can\nbuild composite expressions like ``abs(close - 100)``. Compiles to a binary\nIRExpression.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "left": {
          "discriminator": {
            "mapping": {
              "anchor": "#/$defs/AnchorSignalRef",
              "binary_expr": "#/$defs/BinaryExprSignalRef",
              "constant": "#/$defs/ConstantSignalRef",
              "dist_from_vwap": "#/$defs/DistFromVWAPSignalRef",
              "entry_bar": "#/$defs/EntryBarSignalRef",
              "equity": "#/$defs/EquitySignalRef",
              "event_field": "#/$defs/EventFieldSignalRef",
              "gap_pct": "#/$defs/GapPctValueRef",
              "indicator": {
                "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"
                  }
                ]
              },
              "iv": "#/$defs/IVSignalRef",
              "iv_rank": "#/$defs/IVRankSignalRef",
              "live_position": "#/$defs/LivePositionSignalRef",
              "named_zone": "#/$defs/NamedZoneSignalRef",
              "pcr_vol": "#/$defs/PCRVolSignalRef",
              "percentile": "#/$defs/PercentileSignalRef",
              "prev_bar": "#/$defs/PrevBarSignalRef",
              "price": "#/$defs/PriceSignalRef",
              "rolling_max": "#/$defs/RollingMaxSignalRef",
              "rolling_min": "#/$defs/RollingMinSignalRef",
              "rolling_stats": "#/$defs/RollingStatsSignalRef",
              "sequence_step": "#/$defs/SequenceStepSignalRef",
              "session": "#/$defs/SessionSignalRef",
              "shared_signal": "#/$defs/SharedSignalSignalRef",
              "skew": "#/$defs/SkewSignalRef",
              "swing": "#/$defs/SwingSignalRef",
              "term_structure": "#/$defs/TermStructureSignalRef",
              "time": "#/$defs/TimeSignalRef",
              "trade_history": "#/$defs/TradeHistorySignalRef",
              "triggering_zone": "#/$defs/TriggeringZoneSignalRef",
              "unary_expr": "#/$defs/UnaryExprSignalRef",
              "volume": "#/$defs/VolumeSignalRef"
            },
            "propertyName": "type"
          },
          "oneOf": [
            {
              "$ref": "#/$defs/PriceSignalRef"
            },
            {
              "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"
                }
              ]
            },
            {
              "$ref": "#/$defs/ConstantSignalRef"
            },
            {
              "$ref": "#/$defs/AnchorSignalRef"
            },
            {
              "$ref": "#/$defs/NamedZoneSignalRef"
            },
            {
              "$ref": "#/$defs/TriggeringZoneSignalRef"
            },
            {
              "$ref": "#/$defs/SwingSignalRef"
            },
            {
              "$ref": "#/$defs/PercentileSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMaxSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMinSignalRef"
            },
            {
              "$ref": "#/$defs/VolumeSignalRef"
            },
            {
              "$ref": "#/$defs/EventFieldSignalRef"
            },
            {
              "$ref": "#/$defs/IVSignalRef"
            },
            {
              "$ref": "#/$defs/IVRankSignalRef"
            },
            {
              "$ref": "#/$defs/SkewSignalRef"
            },
            {
              "$ref": "#/$defs/TermStructureSignalRef"
            },
            {
              "$ref": "#/$defs/PCRVolSignalRef"
            },
            {
              "$ref": "#/$defs/PrevBarSignalRef"
            },
            {
              "$ref": "#/$defs/DistFromVWAPSignalRef"
            },
            {
              "$ref": "#/$defs/GapPctValueRef"
            },
            {
              "$ref": "#/$defs/TradeHistorySignalRef"
            },
            {
              "$ref": "#/$defs/EquitySignalRef"
            },
            {
              "$ref": "#/$defs/LivePositionSignalRef"
            },
            {
              "$ref": "#/$defs/SessionSignalRef"
            },
            {
              "$ref": "#/$defs/TimeSignalRef"
            },
            {
              "$ref": "#/$defs/EntryBarSignalRef"
            },
            {
              "$ref": "#/$defs/SequenceStepSignalRef"
            },
            {
              "$ref": "#/$defs/RollingStatsSignalRef"
            },
            {
              "$ref": "#/$defs/UnaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/BinaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/SharedSignalSignalRef"
            }
          ],
          "title": "Left"
        },
        "op": {
          "enum": [
            "+",
            "-",
            "*",
            "/",
            "max",
            "min"
          ],
          "title": "Op",
          "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"
        },
        "right": {
          "discriminator": {
            "mapping": {
              "anchor": "#/$defs/AnchorSignalRef",
              "binary_expr": "#/$defs/BinaryExprSignalRef",
              "constant": "#/$defs/ConstantSignalRef",
              "dist_from_vwap": "#/$defs/DistFromVWAPSignalRef",
              "entry_bar": "#/$defs/EntryBarSignalRef",
              "equity": "#/$defs/EquitySignalRef",
              "event_field": "#/$defs/EventFieldSignalRef",
              "gap_pct": "#/$defs/GapPctValueRef",
              "indicator": {
                "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"
                  }
                ]
              },
              "iv": "#/$defs/IVSignalRef",
              "iv_rank": "#/$defs/IVRankSignalRef",
              "live_position": "#/$defs/LivePositionSignalRef",
              "named_zone": "#/$defs/NamedZoneSignalRef",
              "pcr_vol": "#/$defs/PCRVolSignalRef",
              "percentile": "#/$defs/PercentileSignalRef",
              "prev_bar": "#/$defs/PrevBarSignalRef",
              "price": "#/$defs/PriceSignalRef",
              "rolling_max": "#/$defs/RollingMaxSignalRef",
              "rolling_min": "#/$defs/RollingMinSignalRef",
              "rolling_stats": "#/$defs/RollingStatsSignalRef",
              "sequence_step": "#/$defs/SequenceStepSignalRef",
              "session": "#/$defs/SessionSignalRef",
              "shared_signal": "#/$defs/SharedSignalSignalRef",
              "skew": "#/$defs/SkewSignalRef",
              "swing": "#/$defs/SwingSignalRef",
              "term_structure": "#/$defs/TermStructureSignalRef",
              "time": "#/$defs/TimeSignalRef",
              "trade_history": "#/$defs/TradeHistorySignalRef",
              "triggering_zone": "#/$defs/TriggeringZoneSignalRef",
              "unary_expr": "#/$defs/UnaryExprSignalRef",
              "volume": "#/$defs/VolumeSignalRef"
            },
            "propertyName": "type"
          },
          "oneOf": [
            {
              "$ref": "#/$defs/PriceSignalRef"
            },
            {
              "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"
                }
              ]
            },
            {
              "$ref": "#/$defs/ConstantSignalRef"
            },
            {
              "$ref": "#/$defs/AnchorSignalRef"
            },
            {
              "$ref": "#/$defs/NamedZoneSignalRef"
            },
            {
              "$ref": "#/$defs/TriggeringZoneSignalRef"
            },
            {
              "$ref": "#/$defs/SwingSignalRef"
            },
            {
              "$ref": "#/$defs/PercentileSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMaxSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMinSignalRef"
            },
            {
              "$ref": "#/$defs/VolumeSignalRef"
            },
            {
              "$ref": "#/$defs/EventFieldSignalRef"
            },
            {
              "$ref": "#/$defs/IVSignalRef"
            },
            {
              "$ref": "#/$defs/IVRankSignalRef"
            },
            {
              "$ref": "#/$defs/SkewSignalRef"
            },
            {
              "$ref": "#/$defs/TermStructureSignalRef"
            },
            {
              "$ref": "#/$defs/PCRVolSignalRef"
            },
            {
              "$ref": "#/$defs/PrevBarSignalRef"
            },
            {
              "$ref": "#/$defs/DistFromVWAPSignalRef"
            },
            {
              "$ref": "#/$defs/GapPctValueRef"
            },
            {
              "$ref": "#/$defs/TradeHistorySignalRef"
            },
            {
              "$ref": "#/$defs/EquitySignalRef"
            },
            {
              "$ref": "#/$defs/LivePositionSignalRef"
            },
            {
              "$ref": "#/$defs/SessionSignalRef"
            },
            {
              "$ref": "#/$defs/TimeSignalRef"
            },
            {
              "$ref": "#/$defs/EntryBarSignalRef"
            },
            {
              "$ref": "#/$defs/SequenceStepSignalRef"
            },
            {
              "$ref": "#/$defs/RollingStatsSignalRef"
            },
            {
              "$ref": "#/$defs/UnaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/BinaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/SharedSignalSignalRef"
            }
          ],
          "title": "Right"
        },
        "type": {
          "const": "binary_expr",
          "default": "binary_expr",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "op",
        "left",
        "right"
      ],
      "title": "BinaryExprSignalRef",
      "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"
    },
    "ConstantSignalRef": {
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "constant",
          "default": "constant",
          "title": "Type",
          "type": "string"
        },
        "value": {
          "title": "Value",
          "type": "number"
        }
      },
      "required": [
        "value"
      ],
      "title": "ConstantSignalRef",
      "type": "object"
    },
    "DistFromVWAPSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "dist_from_vwap",
          "default": "dist_from_vwap",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "DistFromVWAPSignalRef",
      "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"
    },
    "EntryBarSignalRef": {
      "additionalProperties": false,
      "description": "Reference to a field of the signal bar for the currently-open position.\n\nAuto-captured by the engine when a position opens. Returns NaN when no\nposition is open. Clears on position close. Use for ORB-style \"stop out\nbelow the signal-bar low\" without AnchorDefinition's silent-latching bug.\n\nFields:\n  - open / high / low / close: signal-bar OHLC\n  - range: high - low\n  - body_high: max(open, close)\n  - body_low: min(open, close)",
      "properties": {
        "entry_bar_field": {
          "enum": [
            "open",
            "high",
            "low",
            "close",
            "range",
            "body_high",
            "body_low"
          ],
          "title": "Entry Bar Field",
          "type": "string"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "entry_bar",
          "default": "entry_bar",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "entry_bar_field"
      ],
      "title": "EntryBarSignalRef",
      "type": "object"
    },
    "EquitySignalRef": {
      "additionalProperties": false,
      "description": "VIB-1370 / VIB-1319: the sub-metric selector is named ``field``\nacross every ValueRef-style type. The legacy name ``equity_metric`` was\nremoved.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "enum": [
            "drawdown_pct",
            "current",
            "peak"
          ],
          "title": "Field",
          "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": "equity",
          "default": "equity",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "title": "EquitySignalRef",
      "type": "object"
    },
    "EventFieldSignalRef": {
      "additionalProperties": false,
      "description": "Field from latest event payload.\n\nAuthoring flow:\n  1. Call list_event_types().\n  2. Pick event_type_id from a returned event type.\n  3. Pick event_field from payload_schema.fields.\n\nExample:\n  {\"type\": \"event_field\", \"event_type_id\": \"macro.cpi\",\n   \"event_field\": \"value\"}\n\nTo compare a release against a previous one, set occurrences_back on a\nsecond ref and subtract:\n  {\"type\": \"binary_expr\", \"op\": \"-\",\n   \"left\":  {\"type\": \"event_field\", \"event_type_id\": \"macro.cpi\",\n             \"event_field\": \"value\"},\n   \"right\": {\"type\": \"event_field\", \"event_type_id\": \"macro.cpi\",\n             \"event_field\": \"value\", \"occurrences_back\": 1}}",
      "properties": {
        "event_field": {
          "description": "Payload field from payload_schema.fields.",
          "title": "Event Field",
          "type": "string"
        },
        "event_type_id": {
          "description": "Event type ID from list_event_types().",
          "title": "Event Type Id",
          "type": "string"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "fill": {
          "default": "previous",
          "description": "'previous' carries forward; 'none' resolves only on the event bar.",
          "enum": [
            "none",
            "previous"
          ],
          "title": "Fill",
          "type": "string"
        },
        "max_age_seconds": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Staleness limit for carried-forward values, in seconds.",
          "title": "Max Age Seconds"
        },
        "occurrences_back": {
          "default": 0,
          "description": "0 = latest release; 1 = the release before it, and so on. Counted by distinct data period, so a later revision of an earlier period does not consume a step. Requires an event type whose payload declares a 'period' (the macro.*/treasury.*/market.*/energy.* release families) and fill='previous'. Resolves as missing when fewer than occurrences_back+1 releases are known.",
          "minimum": 0,
          "title": "Occurrences Back",
          "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": "event_field",
          "default": "event_field",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "event_type_id",
        "event_field"
      ],
      "title": "EventFieldSignalRef",
      "type": "object"
    },
    "GapPctValueRef": {
      "additionalProperties": false,
      "description": "Gap percentage from previous bar's close.\n\nComputes ``(open - prev_close) / prev_close * 100``. Same formula the\ntop-level ``GapPctCondition`` uses; this lets the value be referenced\ninside ``compare``/``cross`` lhs/rhs so it can be combined with other\nindicators (e.g. compare gap_pct > 2.0 alongside an RSI filter).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "gap_pct",
          "default": "gap_pct",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "GapPctValueRef",
      "type": "object"
    },
    "IVRankSignalRef": {
      "additionalProperties": false,
      "description": "IV percentile rank over a trailing window (V1: period=30, lookback_days=252).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "lookback_days": {
          "default": 252,
          "title": "Lookback Days",
          "type": "integer"
        },
        "period": {
          "default": 30,
          "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": "iv_rank",
          "default": "iv_rank",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "IVRankSignalRef",
      "type": "object"
    },
    "IVSignalRef": {
      "additionalProperties": false,
      "description": "ATM implied volatility for a target days-to-expiration (V1: period=30).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "period": {
          "default": 30,
          "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": "iv",
          "default": "iv",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "IVSignalRef",
      "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"
    },
    "LivePositionSignalRef": {
      "additionalProperties": false,
      "description": "VIB-1398 / VIB-1370 / VIB-1319: the sub-metric selector is named\n``field`` across every ValueRef-style type. The legacy name\n``position_metric`` was removed (mirrors the IR-side\n``LivePositionRef.metric \u2192 field`` rename that VIB-1394 shipped).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "enum": [
            "entry_price",
            "bars_in_position",
            "unrealized_pnl_pct",
            "unrealized_pnl_usd",
            "max_excursion_pct",
            "min_excursion_pct"
          ],
          "title": "Field",
          "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": "live_position",
          "default": "live_position",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "title": "LivePositionSignalRef",
      "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"
    },
    "NamedZoneSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "named_zone",
          "default": "named_zone",
          "title": "Type",
          "type": "string"
        },
        "zone_field": {
          "enum": [
            "upper",
            "lower",
            "mid"
          ],
          "title": "Zone Field",
          "type": "string"
        },
        "zone_id": {
          "title": "Zone Id",
          "type": "string"
        }
      },
      "required": [
        "zone_id",
        "zone_field"
      ],
      "title": "NamedZoneSignalRef",
      "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"
    },
    "PCRVolSignalRef": {
      "additionalProperties": false,
      "description": "Put/call ratio by intraday volume.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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": "pcr_vol",
          "default": "pcr_vol",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "PCRVolSignalRef",
      "type": "object"
    },
    "PercentileSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "default": "close",
          "enum": [
            "open",
            "high",
            "low",
            "close"
          ],
          "title": "Field",
          "type": "string"
        },
        "lookback_bars": {
          "default": 100,
          "maximum": 500,
          "minimum": 2,
          "title": "Lookback Bars",
          "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": "percentile",
          "default": "percentile",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "PercentileSignalRef",
      "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"
    },
    "PrevBarSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "default": "close",
          "enum": [
            "open",
            "high",
            "low",
            "close"
          ],
          "title": "Field",
          "type": "string"
        },
        "offset": {
          "default": 1,
          "maximum": 20,
          "minimum": 0,
          "title": "Offset",
          "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": "prev_bar",
          "default": "prev_bar",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "PrevBarSignalRef",
      "type": "object"
    },
    "PriceSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "default": "close",
          "enum": [
            "open",
            "high",
            "low",
            "close"
          ],
          "title": "Field",
          "type": "string"
        },
        "offset": {
          "default": 0,
          "maximum": 500,
          "minimum": 0,
          "title": "Offset",
          "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": "price",
          "default": "price",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "PriceSignalRef",
      "type": "object"
    },
    "RollingMaxSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "anyOf": [
            {
              "enum": [
                "open",
                "high",
                "low",
                "close"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Field"
        },
        "lookback_bars": {
          "default": 20,
          "maximum": 500,
          "minimum": 2,
          "title": "Lookback Bars",
          "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"
        },
        "source": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Source"
        },
        "type": {
          "const": "rolling_max",
          "default": "rolling_max",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "RollingMaxSignalRef",
      "type": "object"
    },
    "RollingMinSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "anyOf": [
            {
              "enum": [
                "open",
                "high",
                "low",
                "close"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Field"
        },
        "lookback_bars": {
          "default": 20,
          "maximum": 500,
          "minimum": 2,
          "title": "Lookback Bars",
          "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"
        },
        "source": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Source"
        },
        "type": {
          "const": "rolling_min",
          "default": "rolling_min",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "RollingMinSignalRef",
      "type": "object"
    },
    "RollingStatsSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "lookback_bars": {
          "maximum": 1000,
          "minimum": 2,
          "title": "Lookback Bars",
          "type": "integer"
        },
        "percentile_level": {
          "anyOf": [
            {
              "maximum": 100.0,
              "minimum": 0.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Percentile Level"
        },
        "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"
        },
        "source": {
          "additionalProperties": true,
          "title": "Source",
          "type": "object"
        },
        "stat": {
          "enum": [
            "mean",
            "std",
            "zscore",
            "sum",
            "count",
            "rank",
            "percentile",
            "ema"
          ],
          "title": "Stat",
          "type": "string"
        },
        "type": {
          "const": "rolling_stats",
          "default": "rolling_stats",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "source",
        "lookback_bars",
        "stat"
      ],
      "title": "RollingStatsSignalRef",
      "type": "object"
    },
    "SequenceStepSignalRef": {
      "additionalProperties": false,
      "description": "Reference to a field of the bar that matched a named sequence step.\n\nAddress the bar that satisfied a specific step inside a specific\nSequenceCondition. Useful for \"stop at the retest bar's low\" in\nbreak-retest setups.\n\nLifecycle mirrors EntryBarSignalRef: the snapshot is captured at step\nfire, preserved for the lifetime of the open position, cleared on\nposition close. NaN when no position is open or the step has not yet\nfired on the current match.\n\nFields:\n  - open / high / low / close: step-bar OHLC\n  - range: high - low\n  - body_high: max(open, close)\n  - body_low: min(open, close)",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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"
        },
        "sequence_id": {
          "description": "Id of the target SequenceCondition.",
          "minLength": 1,
          "title": "Sequence Id",
          "type": "string"
        },
        "step_field": {
          "enum": [
            "open",
            "high",
            "low",
            "close",
            "range",
            "body_high",
            "body_low"
          ],
          "title": "Step Field",
          "type": "string"
        },
        "step_id": {
          "description": "Id of the step within the sequence.",
          "minLength": 1,
          "title": "Step Id",
          "type": "string"
        },
        "type": {
          "const": "sequence_step",
          "default": "sequence_step",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "sequence_id",
        "step_id",
        "step_field"
      ],
      "title": "SequenceStepSignalRef",
      "type": "object"
    },
    "SessionSignalRef": {
      "additionalProperties": false,
      "description": "Session-level value reference.\n\nDay-scoped mode (default): resolves against the full trading day in the\nsession timezone. field in {open, high, low, close, prior_close,\nbars_into_session, range, mid}.\n\nIntraday window mode: set ``window_start`` (HH:MM wall-clock in the\nsession timezone) and ``window_duration_minutes`` to aggregate OHLC\nacross a fixed intraday slot (e.g., Asian session 00:00+480, ORB\n09:30+30). Before the window opens each day: NaN. During the window:\nevolving aggregate. After close: frozen aggregate for the rest of the\nday; resets at the next day's window_start. Fields prior_close and\nbars_into_session are day-scope only (not valid with a window).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "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"
        },
        "session_field": {
          "enum": [
            "open",
            "high",
            "low",
            "close",
            "prior_close",
            "bars_into_session",
            "range",
            "mid",
            "in_session"
          ],
          "title": "Session Field",
          "type": "string"
        },
        "type": {
          "const": "session",
          "default": "session",
          "title": "Type",
          "type": "string"
        },
        "window_duration_minutes": {
          "anyOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Window Duration Minutes"
        },
        "window_start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Intraday window start as HH:MM wall-clock in the session timezone (e.g., '09:30'). Requires window_duration_minutes.",
          "title": "Window Start"
        }
      },
      "required": [
        "session_field"
      ],
      "title": "SessionSignalRef",
      "type": "object"
    },
    "SharedSignalSignalRef": {
      "additionalProperties": false,
      "description": "Reference to a portfolio-level shared signal by name (VIB-2102).\n\nResolves only inside a multi-member portfolio that declares a matching\n``shared_signals`` entry; bound to a member-local metric at portfolio\ncompile time. Illegal in a standalone strategy.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "name": {
          "minLength": 1,
          "title": "Name",
          "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": "shared_signal",
          "default": "shared_signal",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "title": "SharedSignalSignalRef",
      "type": "object"
    },
    "SkewSignalRef": {
      "additionalProperties": false,
      "description": "Risk-reversal skew (V1: delta=25, period=30).",
      "properties": {
        "delta": {
          "default": 25,
          "title": "Delta",
          "type": "integer"
        },
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "period": {
          "default": 30,
          "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": "skew",
          "default": "skew",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "SkewSignalRef",
      "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"
    },
    "SwingSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "offset": {
          "default": 0,
          "maximum": 20,
          "minimum": 0,
          "title": "Offset",
          "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"
        },
        "strength": {
          "default": 5,
          "maximum": 50,
          "minimum": 1,
          "title": "Strength",
          "type": "integer"
        },
        "swing_type": {
          "enum": [
            "high",
            "low"
          ],
          "title": "Swing Type",
          "type": "string"
        },
        "type": {
          "const": "swing",
          "default": "swing",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "swing_type"
      ],
      "title": "SwingSignalRef",
      "type": "object"
    },
    "TermStructureSignalRef": {
      "additionalProperties": false,
      "description": "Vol term-structure ratio IV(short)/IV(long) (V1: short=30, long=90).",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "long": {
          "default": 90,
          "title": "Long",
          "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"
        },
        "short": {
          "default": 30,
          "title": "Short",
          "type": "integer"
        },
        "type": {
          "const": "term_structure",
          "default": "term_structure",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "TermStructureSignalRef",
      "type": "object"
    },
    "TimeSignalRef": {
      "additionalProperties": false,
      "description": "Reference to the current bar's time field.\n\nVIB-1370 / VIB-1319: the sub-metric selector is named ``field`` across\nevery ValueRef-style type. The legacy name ``component`` was removed.\n\nCalendar/intraday fields: ``hour``, ``minute``, ``day_of_week`` (0=Mon),\n``day_of_month``, ``month`` (1=Jan), ``minutes_since_midnight``.\n\nSession-aware fields (use the strategy's session metadata):\n``minutes_to_close``, ``minutes_since_open``. Return NaN for crypto (24h)\nand pre/post-market bars. Comparisons with NaN are silent-False, so\n``not(minutes_to_close <= 5)`` evaluates True outside session \u2014 prefer\n``AllOf([is_in_session, minutes_to_close <= 5])`` when negation is needed.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "enum": [
            "hour",
            "minute",
            "day_of_week",
            "day_of_month",
            "month",
            "minutes_since_midnight",
            "minutes_to_close",
            "minutes_since_open"
          ],
          "title": "Field",
          "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"
        },
        "timezone": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IANA timezone (e.g. 'America/New_York'). None or 'UTC' = no conversion.",
          "title": "Timezone"
        },
        "type": {
          "const": "time",
          "default": "time",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "title": "TimeSignalRef",
      "type": "object"
    },
    "TradeHistorySignalRef": {
      "additionalProperties": false,
      "description": "VIB-1367 phase 4 / VIB-1319: the sub-metric selector is named ``field``\nacross every ValueRef-style type. The legacy name ``trade_metric`` was\nremoved.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "field": {
          "enum": [
            "trade_count",
            "consecutive_wins",
            "consecutive_losses",
            "last_pnl",
            "last_pnl_pct",
            "rolling_win_rate",
            "rolling_avg_pnl_pct",
            "bars_since_last_exit"
          ],
          "title": "Field",
          "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": "trade_history",
          "default": "trade_history",
          "title": "Type",
          "type": "string"
        },
        "window": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Window"
        }
      },
      "required": [
        "field"
      ],
      "title": "TradeHistorySignalRef",
      "type": "object"
    },
    "TriggeringZoneSignalRef": {
      "additionalProperties": false,
      "description": "Reference to the zone that fired the entry's ZoneCondition (VIB-591).\n\nResolves to a level of the *triggering* zone \u2014 the zone selected by the\nentry's ZoneCondition on the signal bar. The id is captured into\n``TradeContext.triggering_zone_id`` so post-entry references (e.g. a\nstanding stop-loss bound to the FVG's lower wick) keep resolving to the\nsame zone for the trade's lifetime.\n\nReturns NaN when no triggering zone is bound (no entry condition with a\nrequired ZoneCondition fired) or the zone has been invalidated/GC'd.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "level": {
          "default": "mid",
          "enum": [
            "upper",
            "lower",
            "mid"
          ],
          "title": "Level",
          "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": "triggering_zone",
          "default": "triggering_zone",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "TriggeringZoneSignalRef",
      "type": "object"
    },
    "UnaryExprSignalRef": {
      "additionalProperties": false,
      "description": "Unary expression over another SignalRef.\n\nWraps a single operand with an op from {abs, neg, log, log10, sqrt, pct_change}.\nCompiles to a unary IRExpression.",
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "op": {
          "enum": [
            "abs",
            "neg",
            "log",
            "log10",
            "sqrt",
            "pct_change"
          ],
          "title": "Op",
          "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"
        },
        "source": {
          "discriminator": {
            "mapping": {
              "anchor": "#/$defs/AnchorSignalRef",
              "binary_expr": "#/$defs/BinaryExprSignalRef",
              "constant": "#/$defs/ConstantSignalRef",
              "dist_from_vwap": "#/$defs/DistFromVWAPSignalRef",
              "entry_bar": "#/$defs/EntryBarSignalRef",
              "equity": "#/$defs/EquitySignalRef",
              "event_field": "#/$defs/EventFieldSignalRef",
              "gap_pct": "#/$defs/GapPctValueRef",
              "indicator": {
                "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"
                  }
                ]
              },
              "iv": "#/$defs/IVSignalRef",
              "iv_rank": "#/$defs/IVRankSignalRef",
              "live_position": "#/$defs/LivePositionSignalRef",
              "named_zone": "#/$defs/NamedZoneSignalRef",
              "pcr_vol": "#/$defs/PCRVolSignalRef",
              "percentile": "#/$defs/PercentileSignalRef",
              "prev_bar": "#/$defs/PrevBarSignalRef",
              "price": "#/$defs/PriceSignalRef",
              "rolling_max": "#/$defs/RollingMaxSignalRef",
              "rolling_min": "#/$defs/RollingMinSignalRef",
              "rolling_stats": "#/$defs/RollingStatsSignalRef",
              "sequence_step": "#/$defs/SequenceStepSignalRef",
              "session": "#/$defs/SessionSignalRef",
              "shared_signal": "#/$defs/SharedSignalSignalRef",
              "skew": "#/$defs/SkewSignalRef",
              "swing": "#/$defs/SwingSignalRef",
              "term_structure": "#/$defs/TermStructureSignalRef",
              "time": "#/$defs/TimeSignalRef",
              "trade_history": "#/$defs/TradeHistorySignalRef",
              "triggering_zone": "#/$defs/TriggeringZoneSignalRef",
              "unary_expr": "#/$defs/UnaryExprSignalRef",
              "volume": "#/$defs/VolumeSignalRef"
            },
            "propertyName": "type"
          },
          "oneOf": [
            {
              "$ref": "#/$defs/PriceSignalRef"
            },
            {
              "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"
                }
              ]
            },
            {
              "$ref": "#/$defs/ConstantSignalRef"
            },
            {
              "$ref": "#/$defs/AnchorSignalRef"
            },
            {
              "$ref": "#/$defs/NamedZoneSignalRef"
            },
            {
              "$ref": "#/$defs/TriggeringZoneSignalRef"
            },
            {
              "$ref": "#/$defs/SwingSignalRef"
            },
            {
              "$ref": "#/$defs/PercentileSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMaxSignalRef"
            },
            {
              "$ref": "#/$defs/RollingMinSignalRef"
            },
            {
              "$ref": "#/$defs/VolumeSignalRef"
            },
            {
              "$ref": "#/$defs/EventFieldSignalRef"
            },
            {
              "$ref": "#/$defs/IVSignalRef"
            },
            {
              "$ref": "#/$defs/IVRankSignalRef"
            },
            {
              "$ref": "#/$defs/SkewSignalRef"
            },
            {
              "$ref": "#/$defs/TermStructureSignalRef"
            },
            {
              "$ref": "#/$defs/PCRVolSignalRef"
            },
            {
              "$ref": "#/$defs/PrevBarSignalRef"
            },
            {
              "$ref": "#/$defs/DistFromVWAPSignalRef"
            },
            {
              "$ref": "#/$defs/GapPctValueRef"
            },
            {
              "$ref": "#/$defs/TradeHistorySignalRef"
            },
            {
              "$ref": "#/$defs/EquitySignalRef"
            },
            {
              "$ref": "#/$defs/LivePositionSignalRef"
            },
            {
              "$ref": "#/$defs/SessionSignalRef"
            },
            {
              "$ref": "#/$defs/TimeSignalRef"
            },
            {
              "$ref": "#/$defs/EntryBarSignalRef"
            },
            {
              "$ref": "#/$defs/SequenceStepSignalRef"
            },
            {
              "$ref": "#/$defs/RollingStatsSignalRef"
            },
            {
              "$ref": "#/$defs/UnaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/BinaryExprSignalRef"
            },
            {
              "$ref": "#/$defs/SharedSignalSignalRef"
            }
          ],
          "title": "Source"
        },
        "type": {
          "const": "unary_expr",
          "default": "unary_expr",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "op",
        "source"
      ],
      "title": "UnaryExprSignalRef",
      "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"
    },
    "VolumeSignalRef": {
      "additionalProperties": false,
      "properties": {
        "factor": {
          "anyOf": [
            {
              "maximum": 1000000.0,
              "minimum": -1000000.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Factor"
        },
        "offset": {
          "default": 0,
          "maximum": 500,
          "minimum": 0,
          "title": "Offset",
          "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": "volume",
          "default": "volume",
          "title": "Type",
          "type": "string"
        }
      },
      "title": "VolumeSignalRef",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "description": "Cross-sectional percentile of ``source`` among portfolio siblings on\nthe current bar, compared to ``value`` with ``op``. Percentile is in\n``[0.0, 1.0]``. Semantic alias for :class:`RankCondition` with explicit\npercentile interpretation (distinct from the rolling single-sleeve\n``PercentileRef`` which ranks within history). Requires a multi-sleeve\nportfolio strategy (VIB-1743).",
  "properties": {
    "op": {
      "enum": [
        ">",
        ">=",
        "<",
        "<=",
        "between",
        "==",
        "!="
      ],
      "title": "Op",
      "type": "string"
    },
    "source": {
      "description": "Per-sleeve scalar whose cross-sectional percentile rank is computed against portfolio siblings on the current bar. E.g. {'type': 'indicator', 'indicator': 'roc', 'period': 20}.",
      "discriminator": {
        "mapping": {
          "anchor": "#/$defs/AnchorSignalRef",
          "binary_expr": "#/$defs/BinaryExprSignalRef",
          "constant": "#/$defs/ConstantSignalRef",
          "dist_from_vwap": "#/$defs/DistFromVWAPSignalRef",
          "entry_bar": "#/$defs/EntryBarSignalRef",
          "equity": "#/$defs/EquitySignalRef",
          "event_field": "#/$defs/EventFieldSignalRef",
          "gap_pct": "#/$defs/GapPctValueRef",
          "indicator": {
            "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"
              }
            ]
          },
          "iv": "#/$defs/IVSignalRef",
          "iv_rank": "#/$defs/IVRankSignalRef",
          "live_position": "#/$defs/LivePositionSignalRef",
          "named_zone": "#/$defs/NamedZoneSignalRef",
          "pcr_vol": "#/$defs/PCRVolSignalRef",
          "percentile": "#/$defs/PercentileSignalRef",
          "prev_bar": "#/$defs/PrevBarSignalRef",
          "price": "#/$defs/PriceSignalRef",
          "rolling_max": "#/$defs/RollingMaxSignalRef",
          "rolling_min": "#/$defs/RollingMinSignalRef",
          "rolling_stats": "#/$defs/RollingStatsSignalRef",
          "sequence_step": "#/$defs/SequenceStepSignalRef",
          "session": "#/$defs/SessionSignalRef",
          "shared_signal": "#/$defs/SharedSignalSignalRef",
          "skew": "#/$defs/SkewSignalRef",
          "swing": "#/$defs/SwingSignalRef",
          "term_structure": "#/$defs/TermStructureSignalRef",
          "time": "#/$defs/TimeSignalRef",
          "trade_history": "#/$defs/TradeHistorySignalRef",
          "triggering_zone": "#/$defs/TriggeringZoneSignalRef",
          "unary_expr": "#/$defs/UnaryExprSignalRef",
          "volume": "#/$defs/VolumeSignalRef"
        },
        "propertyName": "type"
      },
      "oneOf": [
        {
          "$ref": "#/$defs/PriceSignalRef"
        },
        {
          "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"
            }
          ]
        },
        {
          "$ref": "#/$defs/ConstantSignalRef"
        },
        {
          "$ref": "#/$defs/AnchorSignalRef"
        },
        {
          "$ref": "#/$defs/NamedZoneSignalRef"
        },
        {
          "$ref": "#/$defs/TriggeringZoneSignalRef"
        },
        {
          "$ref": "#/$defs/SwingSignalRef"
        },
        {
          "$ref": "#/$defs/PercentileSignalRef"
        },
        {
          "$ref": "#/$defs/RollingMaxSignalRef"
        },
        {
          "$ref": "#/$defs/RollingMinSignalRef"
        },
        {
          "$ref": "#/$defs/VolumeSignalRef"
        },
        {
          "$ref": "#/$defs/EventFieldSignalRef"
        },
        {
          "$ref": "#/$defs/IVSignalRef"
        },
        {
          "$ref": "#/$defs/IVRankSignalRef"
        },
        {
          "$ref": "#/$defs/SkewSignalRef"
        },
        {
          "$ref": "#/$defs/TermStructureSignalRef"
        },
        {
          "$ref": "#/$defs/PCRVolSignalRef"
        },
        {
          "$ref": "#/$defs/PrevBarSignalRef"
        },
        {
          "$ref": "#/$defs/DistFromVWAPSignalRef"
        },
        {
          "$ref": "#/$defs/GapPctValueRef"
        },
        {
          "$ref": "#/$defs/TradeHistorySignalRef"
        },
        {
          "$ref": "#/$defs/EquitySignalRef"
        },
        {
          "$ref": "#/$defs/LivePositionSignalRef"
        },
        {
          "$ref": "#/$defs/SessionSignalRef"
        },
        {
          "$ref": "#/$defs/TimeSignalRef"
        },
        {
          "$ref": "#/$defs/EntryBarSignalRef"
        },
        {
          "$ref": "#/$defs/SequenceStepSignalRef"
        },
        {
          "$ref": "#/$defs/RollingStatsSignalRef"
        },
        {
          "$ref": "#/$defs/UnaryExprSignalRef"
        },
        {
          "$ref": "#/$defs/BinaryExprSignalRef"
        },
        {
          "$ref": "#/$defs/SharedSignalSignalRef"
        }
      ],
      "title": "Source"
    },
    "type": {
      "const": "cross_sectional_percentile",
      "default": "cross_sectional_percentile",
      "title": "Type",
      "type": "string"
    },
    "value": {
      "description": "Threshold percentile in [0.0, 1.0]. 0.9 = top decile, 0.1 = bottom decile, 0.5 = median.",
      "title": "Value",
      "type": "number"
    }
  },
  "required": [
    "source",
    "op",
    "value"
  ],
  "title": "CrossSectionalPercentileCondition",
  "type": "object"
}
