{
  "$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": "Compare this sleeve's ``source`` against a named sibling sleeve's\n``sibling_source`` at the current bar. Enables pairs trades and other\ncross-symbol references. The named ``symbol`` must be a member of the\nportfolio universe (VIB-1743).\n\nExample: long AAA when AAA's close < BBB's close \u2192\n``SiblingCompareCondition(source=close, op=\"<\", symbol=\"BBB\", sibling_source=close)``.",
  "properties": {
    "op": {
      "enum": [
        ">",
        ">=",
        "<",
        "<=",
        "between",
        "==",
        "!="
      ],
      "title": "Op",
      "type": "string"
    },
    "sibling_source": {
      "description": "Source ref resolved against the sibling's bars/indicators \u2014 independent of this sleeve's ``source``. E.g. {'type': 'price', 'field': 'close'} or {'type': 'indicator', 'indicator': 'ema', 'period': 50}.",
      "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": "Sibling Source"
    },
    "source": {
      "description": "Per-sleeve scalar evaluated against this sleeve's own bars/indicators (the left-hand side of the comparison). E.g. {'type': 'price', 'field': 'close'}.",
      "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"
    },
    "symbol": {
      "description": "Symbol of the sibling sleeve in the portfolio universe to compare against. Must be a member of the strategy's universe (e.g. 'QQQ' when the strategy trades ['SPY', 'QQQ', 'IWM']).",
      "minLength": 1,
      "title": "Symbol",
      "type": "string"
    },
    "type": {
      "const": "sibling_compare",
      "default": "sibling_compare",
      "title": "Type",
      "type": "string"
    }
  },
  "required": [
    "source",
    "op",
    "symbol",
    "sibling_source"
  ],
  "title": "SiblingCompareCondition",
  "type": "object"
}
