{
    "registry_version": "2.2.0",
    "registry_hash": "fe6f391d6f1bf09949a0b969bdf8b2cf055cc9d3a6bc23a988c8e7140d5fd5e2",
    "generated_at": "2026-08-04T00:00:00Z",
    "compatibility_version": "1.0",
    "language": "KababaliScript",
    "versions": [
        1,
        2
    ],
    "keywords": [
        "version",
        "strategy",
        "symbol",
        "timeframe",
        "input",
        "int",
        "float",
        "bool",
        "min",
        "max",
        "series",
        "let",
        "buy",
        "sell",
        "when",
        "entry",
        "stop",
        "target",
        "plot",
        "draw",
        "true",
        "false"
    ],
    "operators": [
        "||",
        "&&",
        "==",
        "!=",
        ">",
        ">=",
        "<",
        "<=",
        "!"
    ],
    "price_sources": [
        "open",
        "high",
        "low",
        "close",
        "bid",
        "ask",
        "volume"
    ],
    "timeframes": [
        "M1",
        "M5",
        "M15",
        "M30",
        "H1",
        "H4",
        "D1"
    ],
    "colors": [
        "green",
        "orange",
        "blue",
        "red",
        "white",
        "yellow",
        "purple",
        "cyan",
        "pink",
        "gray"
    ],
    "line_styles": [
        "solid",
        "dashed",
        "dotted"
    ],
    "sessions": [
        "LONDON",
        "NEW_YORK"
    ],
    "trade_fields": [
        "when",
        "entry",
        "stop",
        "target"
    ],
    "buy_entry": "ask",
    "sell_entry": "bid",
    "functions": {
        "ema": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "ema(close, 9)",
            "since": 1
        },
        "sma": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "sma(close, 20)",
            "since": 1
        },
        "wma": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "wma(close, 20)",
            "since": 1
        },
        "rsi": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "rsi(close, 14)",
            "since": 1
        },
        "stochastic_k": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "stochastic_k(high, low, close, 14)",
            "since": 1
        },
        "stochastic_d": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int",
                "positive_int"
            ],
            "returns": "series",
            "example": "stochastic_d(high, low, close, 14, 3)",
            "since": 1
        },
        "cci": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "cci(high, low, close, 20)",
            "since": 1
        },
        "momentum": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "momentum(close, 14)",
            "since": 1
        },
        "macd_line": {
            "params": [
                "series",
                "positive_int",
                "positive_int"
            ],
            "returns": "series",
            "example": "macd_line(close, 12, 26)",
            "since": 1
        },
        "macd_signal": {
            "params": [
                "series",
                "positive_int",
                "positive_int",
                "positive_int"
            ],
            "returns": "series",
            "example": "macd_signal(close, 12, 26, 9)",
            "since": 1
        },
        "adx": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "adx(high, low, close, 14)",
            "since": 1
        },
        "plus_di": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "plus_di(high, low, close, 14)",
            "since": 1
        },
        "minus_di": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "minus_di(high, low, close, 14)",
            "since": 1
        },
        "atr": {
            "params": [
                "positive_int"
            ],
            "returns": "series",
            "example": "atr(14)",
            "since": 1
        },
        "bb_mid": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "bb_mid(close, 20)",
            "since": 1
        },
        "bb_upper": {
            "params": [
                "series",
                "positive_int",
                "positive_number"
            ],
            "returns": "series",
            "example": "bb_upper(close, 20, 2.0)",
            "since": 1
        },
        "bb_lower": {
            "params": [
                "series",
                "positive_int",
                "positive_number"
            ],
            "returns": "series",
            "example": "bb_lower(close, 20, 2.0)",
            "since": 1
        },
        "vwap": {
            "params": [
                "series",
                "series"
            ],
            "returns": "series",
            "example": "vwap(close, volume)",
            "since": 1
        },
        "obv": {
            "params": [
                "series",
                "series"
            ],
            "returns": "series",
            "example": "obv(close, volume)",
            "since": 1
        },
        "mfi": {
            "params": [
                "series",
                "series",
                "series",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "mfi(high, low, close, volume, 14)",
            "since": 1
        },
        "supertrend": {
            "params": [
                "series",
                "series",
                "series",
                "positive_int",
                "positive_number"
            ],
            "returns": "series",
            "example": "supertrend(high, low, close, 14, 3.0)",
            "since": 1
        },
        "parabolic_sar": {
            "params": [
                "series",
                "series",
                "positive_number",
                "positive_number"
            ],
            "returns": "series",
            "example": "parabolic_sar(high, low, 0.02, 0.2)",
            "since": 1
        },
        "pivot_point": {
            "params": [
                "series",
                "series",
                "series"
            ],
            "returns": "series",
            "example": "pivot_point(high, low, close)",
            "since": 1
        },
        "pivot_r1": {
            "params": [
                "series",
                "series",
                "series"
            ],
            "returns": "series",
            "example": "pivot_r1(high, low, close)",
            "since": 1
        },
        "pivot_s1": {
            "params": [
                "series",
                "series",
                "series"
            ],
            "returns": "series",
            "example": "pivot_s1(high, low, close)",
            "since": 1
        },
        "pivot_r2": {
            "params": [
                "series",
                "series",
                "series"
            ],
            "returns": "series",
            "example": "pivot_r2(high, low, close)",
            "since": 1
        },
        "pivot_s2": {
            "params": [
                "series",
                "series",
                "series"
            ],
            "returns": "series",
            "example": "pivot_s2(high, low, close)",
            "since": 1
        },
        "donchian_high": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "donchian_high(high, 20)",
            "since": 1
        },
        "donchian_low": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "donchian_low(low, 20)",
            "since": 1
        },
        "highest": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "highest(high, 20)",
            "since": 1
        },
        "lowest": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "lowest(low, 20)",
            "since": 1
        },
        "ichimoku_conversion": {
            "params": [
                "positive_int"
            ],
            "returns": "series",
            "example": "ichimoku_conversion(9)",
            "since": 1
        },
        "ichimoku_base": {
            "params": [
                "positive_int"
            ],
            "returns": "series",
            "example": "ichimoku_base(26)",
            "since": 1
        },
        "ichimoku_span_a": {
            "params": [
                "positive_int",
                "positive_int"
            ],
            "returns": "series",
            "example": "ichimoku_span_a(9, 26)",
            "since": 1
        },
        "ichimoku_span_b": {
            "params": [
                "positive_int"
            ],
            "returns": "series",
            "example": "ichimoku_span_b(52)",
            "since": 1
        },
        "higher_close": {
            "params": [
                "timeframe"
            ],
            "returns": "series",
            "example": "higher_close(M5)",
            "since": 1,
            "higher_timeframe": true
        },
        "higher_ema": {
            "params": [
                "timeframe",
                "series",
                "positive_int"
            ],
            "returns": "series",
            "example": "higher_ema(M5, close, 21)",
            "since": 1,
            "higher_timeframe": true
        },
        "custom_ma": {
            "params": [
                "series",
                "positive_int",
                "enum:ma"
            ],
            "returns": "series",
            "example": "custom_ma(close, 20, EMA)",
            "since": 1
        },
        "custom_oscillator": {
            "params": [
                "series",
                "positive_int",
                "enum:oscillator"
            ],
            "returns": "series",
            "example": "custom_oscillator(close, 14, RSI)",
            "since": 1
        },
        "crossover": {
            "params": [
                "series",
                "series"
            ],
            "returns": "bool",
            "example": "crossover(fastEma, slowEma)",
            "since": 1
        },
        "crossunder": {
            "params": [
                "series",
                "series"
            ],
            "returns": "bool",
            "example": "crossunder(fastEma, slowEma)",
            "since": 1
        },
        "break_of_structure_up": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "break_of_structure_up(20)",
            "since": 1
        },
        "break_of_structure_down": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "break_of_structure_down(20)",
            "since": 1
        },
        "choch_up": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "choch_up(20)",
            "since": 1
        },
        "choch_down": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "choch_down(20)",
            "since": 1
        },
        "liquidity_sweep_high": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "liquidity_sweep_high(20)",
            "since": 1
        },
        "liquidity_sweep_low": {
            "params": [
                "positive_int"
            ],
            "returns": "bool",
            "example": "liquidity_sweep_low(20)",
            "since": 1
        },
        "bullish_divergence": {
            "params": [
                "series",
                "series",
                "positive_int"
            ],
            "returns": "bool",
            "example": "bullish_divergence(close, rsiValue, 20)",
            "since": 1
        },
        "bearish_divergence": {
            "params": [
                "series",
                "series",
                "positive_int"
            ],
            "returns": "bool",
            "example": "bearish_divergence(close, rsiValue, 20)",
            "since": 1
        },
        "retest_long": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "bool",
            "example": "retest_long(level, 10)",
            "since": 1
        },
        "retest_short": {
            "params": [
                "series",
                "positive_int"
            ],
            "returns": "bool",
            "example": "retest_short(level, 10)",
            "since": 1
        },
        "candle_bullish_engulfing": {
            "params": [],
            "returns": "bool",
            "example": "candle_bullish_engulfing()",
            "since": 1
        },
        "candle_bearish_engulfing": {
            "params": [],
            "returns": "bool",
            "example": "candle_bearish_engulfing()",
            "since": 1
        },
        "in_session": {
            "params": [
                "session"
            ],
            "returns": "bool",
            "example": "in_session(\"LONDON\")",
            "since": 1
        },
        "volatility_low": {
            "params": [
                "positive_int",
                "volatility_multiplier"
            ],
            "returns": "bool",
            "example": "volatility_low(14, 1.5)",
            "since": 1
        },
        "volatility_normal": {
            "params": [
                "positive_int",
                "volatility_multiplier"
            ],
            "returns": "bool",
            "example": "volatility_normal(14, 1.5)",
            "since": 1
        },
        "volatility_high": {
            "params": [
                "positive_int",
                "volatility_multiplier"
            ],
            "returns": "bool",
            "example": "volatility_high(14, 1.5)",
            "since": 1
        },
        "swing_low": {
            "params": [
                "positive_int"
            ],
            "returns": "stop",
            "example": "swing_low(10)",
            "since": 1
        },
        "swing_high": {
            "params": [
                "positive_int"
            ],
            "returns": "stop",
            "example": "swing_high(10)",
            "since": 1
        },
        "atr_stop": {
            "params": [
                "positive_number"
            ],
            "returns": "stop",
            "example": "atr_stop(1.5)",
            "since": 1
        },
        "rr": {
            "params": [
                "reward_risk"
            ],
            "returns": "target",
            "example": "rr(2.0)",
            "since": 1
        },
        "fixed_pips": {
            "params": [
                "positive_number"
            ],
            "returns": "distance",
            "example": "fixed_pips(20)",
            "since": 1
        }
    },
    "drawings": [
        "plot(series, color.name)",
        "plot(series, color.name, \"Label\")",
        "plot(series, color.name, \"Label\", width_1_to_4)",
        "plot(series, color.name, \"Label\", width_1_to_4, line.solid|dashed|dotted)",
        "draw(entry)",
        "draw(stop)",
        "draw(target)",
        "draw(declaredBoolean)"
    ],
    "controlled_templates": {
        "moving_average": [
            "EMA",
            "SMA",
            "WMA"
        ],
        "oscillator": [
            "RSI",
            "MOMENTUM"
        ]
    },
    "higher_timeframe": {
        "functions": [
            "higher_close",
            "higher_ema"
        ],
        "must_be_strictly_higher": true,
        "closed_candles_only": true
    },
    "stop_methods": [
        "swing_low",
        "swing_high",
        "atr_stop",
        "fixed_pips"
    ],
    "target_methods": [
        "rr",
        "fixed_pips"
    ],
    "risk_functions": [
        "swing_low",
        "swing_high",
        "atr_stop",
        "fixed_pips",
        "rr"
    ],
    "declaration_grammar": {
        "order": [
            "version",
            "strategy",
            "properties",
            "inputs",
            "declarations",
            "trade_blocks",
            "drawings"
        ],
        "version": "version 1; | version 2;",
        "strategy": "strategy \"Name\" { ... }",
        "properties": [
            "symbol = \"BROKER_SYMBOL\"; (v2 only, optional)",
            "timeframe = M1|M5|M15|M30|H1|H4|D1; (required)"
        ],
        "v1_inputs": [
            "input int name = default;",
            "input float name = default;"
        ],
        "v2_inputs": [
            "input int name = default min minimum max maximum;",
            "input float name = default min minimum max maximum;",
            "input bool name = true|false;"
        ],
        "v1_declarations": [
            "series name = expression;",
            "bool name = expression;"
        ],
        "v2_declarations": [
            "series name = expression;",
            "bool name = expression;",
            "let name = expression;"
        ],
        "trade_block": "buy|sell { when = bool; entry = ask|bid; stop = method; target = method; }",
        "statement_terminator": ";",
        "comments": [
            "// line comment",
            "/* block comment */"
        ]
    },
    "type_rules": {
        "series arithmetic": "rejected by current EA runtime",
        "comparisons": "numeric/series to bool",
        "logical": "bool only",
        "let": "immutable series or bool",
        "when": "bool",
        "input bounds": "v2 numeric inputs only"
    },
    "limits": {
        "source_bytes": 100000,
        "ast_nodes": 2000,
        "expression_depth": 32,
        "function_calls": 500,
        "inputs": 64,
        "declarations": 256,
        "lookback": 10000,
        "tokens": 10000,
        "strategy_name_length": 80,
        "symbol_length": 64,
        "validation_seconds": 2
    },
    "closed_candle": {
        "conditions_use": "most recently completed strategy candle",
        "ohlcv": [
            "open",
            "high",
            "low",
            "close",
            "volume"
        ],
        "live_execution_prices": [
            "bid",
            "ask"
        ],
        "forming_candle_conditions": false
    },
    "unsupported_response": "Unsupported in KababaliScript: <brief feature>",
    "deprecated": [
        "Logical word aliases and automatic syntax repair are deprecated; use registered operators and exact syntax.",
        "v1 series/bool declarations remain supported; v2 may use immutable let."
    ],
    "version_compatibility": {
        "1": "stable; int/float inputs and series/bool declarations; no bounds, symbol, bool input, or let",
        "2": "adds optional symbol, bool inputs, required bounds for numeric inputs, and immutable let"
    },
    "validation_messages": {
        "KBS-E101": "Missing version",
        "KBS-E102": "Unsupported version",
        "KBS-E104": "Unknown function",
        "KBS-E106": "Missing semicolon",
        "KBS-E109": "Unmatched delimiter",
        "KBS-E110": "Feature unavailable in language version",
        "KBS-E116": "Invalid declaration order",
        "KBS-E201": "Wrong argument count",
        "KBS-E202": "Wrong argument type",
        "KBS-E204": "Invalid timeframe",
        "KBS-E207": "Duplicate declaration",
        "KBS-E208": "Undefined name",
        "KBS-E210": "Missing trade field",
        "KBS-E211": "Period must be positive",
        "KBS-E218": "Invalid side entry",
        "KBS-E220": "Invalid higher timeframe",
        "KBS-E225": "Unsupported arithmetic",
        "KBS-E226": "Invalid or unbounded input",
        "KBS-E227": "Input default outside bounds",
        "KBS-E228": "Invalid stop definition",
        "KBS-E229": "Invalid target definition",
        "KBS-E230": "Forming-candle dependency",
        "KBS-E231": "Invalid strategy name",
        "KBS-E232": "Immutable let reassignment",
        "KBS-E999": "Internal compiler error"
    },
    "compatibility_engine": {
        "version": "1.0.0",
        "extension_registry_version": "1.0.0",
        "extension_registry_hash": "d8d6227ee59fa821e1b1fdebc370263d6793d6ad81ebbb57a84531d0328e5ec5",
        "active_aliases": [
            {
                "alias": "ADX",
                "target": "adx",
                "category": "Common naming",
                "description": "Safe compatibility alias for adx()."
            },
            {
                "alias": "ATR",
                "target": "atr",
                "category": "Common naming",
                "description": "Safe compatibility alias for atr()."
            },
            {
                "alias": "average_true_range",
                "target": "atr",
                "category": "Common naming",
                "description": "Safe compatibility alias for atr()."
            },
            {
                "alias": "bollinger_lower",
                "target": "bb_lower",
                "category": "Common naming",
                "description": "Safe compatibility alias for bb_lower()."
            },
            {
                "alias": "bollinger_mid",
                "target": "bb_mid",
                "category": "Common naming",
                "description": "Safe compatibility alias for bb_mid()."
            },
            {
                "alias": "bollinger_upper",
                "target": "bb_upper",
                "category": "Common naming",
                "description": "Safe compatibility alias for bb_upper()."
            },
            {
                "alias": "bos_down",
                "target": "break_of_structure_down",
                "category": "Common naming",
                "description": "Safe compatibility alias for break_of_structure_down()."
            },
            {
                "alias": "bos_up",
                "target": "break_of_structure_up",
                "category": "Common naming",
                "description": "Safe compatibility alias for break_of_structure_up()."
            },
            {
                "alias": "CCI",
                "target": "cci",
                "category": "Common naming",
                "description": "Safe compatibility alias for cci()."
            },
            {
                "alias": "di_minus",
                "target": "minus_di",
                "category": "Common naming",
                "description": "Safe compatibility alias for minus_di()."
            },
            {
                "alias": "di_plus",
                "target": "plus_di",
                "category": "Common naming",
                "description": "Safe compatibility alias for plus_di()."
            },
            {
                "alias": "EMA",
                "target": "ema",
                "category": "Common naming",
                "description": "Safe compatibility alias for ema()."
            },
            {
                "alias": "exponential_moving_average",
                "target": "ema",
                "category": "Common naming",
                "description": "Safe compatibility alias for ema()."
            },
            {
                "alias": "liquidity_sweep_buy",
                "target": "liquidity_sweep_low",
                "category": "Common naming",
                "description": "Safe compatibility alias for liquidity_sweep_low()."
            },
            {
                "alias": "liquidity_sweep_sell",
                "target": "liquidity_sweep_high",
                "category": "Common naming",
                "description": "Safe compatibility alias for liquidity_sweep_high()."
            },
            {
                "alias": "macd",
                "target": "macd_line",
                "category": "Common naming",
                "description": "Safe compatibility alias for macd_line()."
            },
            {
                "alias": "macd_sig",
                "target": "macd_signal",
                "category": "Common naming",
                "description": "Safe compatibility alias for macd_signal()."
            },
            {
                "alias": "MFI",
                "target": "mfi",
                "category": "Common naming",
                "description": "Safe compatibility alias for mfi()."
            },
            {
                "alias": "OBV",
                "target": "obv",
                "category": "Common naming",
                "description": "Safe compatibility alias for obv()."
            },
            {
                "alias": "relative_strength_index",
                "target": "rsi",
                "category": "Common naming",
                "description": "Safe compatibility alias for rsi()."
            },
            {
                "alias": "RSI",
                "target": "rsi",
                "category": "Common naming",
                "description": "Safe compatibility alias for rsi()."
            },
            {
                "alias": "simple_moving_average",
                "target": "sma",
                "category": "Common naming",
                "description": "Safe compatibility alias for sma()."
            },
            {
                "alias": "SMA",
                "target": "sma",
                "category": "Common naming",
                "description": "Safe compatibility alias for sma()."
            },
            {
                "alias": "ta.adx",
                "target": "adx",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for adx()."
            },
            {
                "alias": "ta.atr",
                "target": "atr",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for atr()."
            },
            {
                "alias": "ta.cci",
                "target": "cci",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for cci()."
            },
            {
                "alias": "ta.crossover",
                "target": "crossover",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for crossover()."
            },
            {
                "alias": "ta.crossunder",
                "target": "crossunder",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for crossunder()."
            },
            {
                "alias": "ta.ema",
                "target": "ema",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for ema()."
            },
            {
                "alias": "ta.highest",
                "target": "highest",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for highest()."
            },
            {
                "alias": "ta.lowest",
                "target": "lowest",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for lowest()."
            },
            {
                "alias": "ta.mfi",
                "target": "mfi",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for mfi()."
            },
            {
                "alias": "ta.obv",
                "target": "obv",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for obv()."
            },
            {
                "alias": "ta.rsi",
                "target": "rsi",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for rsi()."
            },
            {
                "alias": "ta.sma",
                "target": "sma",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for sma()."
            },
            {
                "alias": "ta.vwap",
                "target": "vwap",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for vwap()."
            },
            {
                "alias": "ta.wma",
                "target": "wma",
                "category": "AI/Pine compatibility",
                "description": "Safe compatibility alias for wma()."
            },
            {
                "alias": "VWAP",
                "target": "vwap",
                "category": "Common naming",
                "description": "Safe compatibility alias for vwap()."
            },
            {
                "alias": "weighted_moving_average",
                "target": "wma",
                "category": "Common naming",
                "description": "Safe compatibility alias for wma()."
            },
            {
                "alias": "WMA",
                "target": "wma",
                "category": "Common naming",
                "description": "Safe compatibility alias for wma()."
            }
        ],
        "safety": "Aliases only rename known executable functions. New indicators remain unsupported until runtime implementation is deployed and validated."
    }
}
