{
  "additionalProperties": false,
  "description": "Optimal Trade Entry -- Fibonacci retracement zone between swing points.\n\nCreates a zone between two Fibonacci levels (default 61.8%-78.6%) of the\nmost recent swing high to swing low range. Entry triggers when price\nretraces into this zone.",
  "properties": {
    "direction": {
      "default": "both",
      "enum": [
        "bullish",
        "bearish",
        "both"
      ],
      "title": "Direction",
      "type": "string"
    },
    "fib_lower": {
      "default": 0.786,
      "description": "Lower fib level (deeper retracement)",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Fib Lower",
      "type": "number"
    },
    "fib_upper": {
      "default": 0.618,
      "description": "Upper fib level (closer to origin, shallower retracement)",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Fib Upper",
      "type": "number"
    },
    "fill_threshold": {
      "default": 0.5,
      "description": "Fill percentage (0-1) at which zone is considered filled",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Fill Threshold",
      "type": "number"
    },
    "max_bars": {
      "anyOf": [
        {
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": 100,
      "description": "Zone expiry in bars",
      "title": "Max Bars"
    },
    "select": {
      "default": "any",
      "description": "How to pick among matching zones at trigger time. 'any' (default) fires when any zone overlaps the bar. 'nearest'/'most_recent'/'oldest' deterministically pick one zone \u2014 required when binding execution price via TriggeringZonePriceSpec (VIB-591).",
      "enum": [
        "nearest",
        "most_recent",
        "oldest",
        "any"
      ],
      "title": "Select",
      "type": "string"
    },
    "swing_strength": {
      "default": 5,
      "description": "Bars on each side to confirm swing point",
      "maximum": 50,
      "minimum": 2,
      "title": "Swing Strength",
      "type": "integer"
    },
    "type": {
      "const": "ote",
      "default": "ote",
      "title": "Type",
      "type": "string"
    }
  },
  "title": "OTECondition",
  "type": "object"
}
