addedInput schema / properties / action / properties / exitIfNoProgress
Added value: +{
+ "additionalProperties": false,
+ "description": "Entries with mode \"execute\": close the position at the close of the candle when price has made no new high (buy) / low (sell) for N closed candles since entry. Same rule as backtest_strategy trade.management.exitIfNoProgress",
+ "properties": {
+ "candles": {
+ "description": "Candles without a new extreme in favour (1-100)",
+ "type": "integer"
+ },
+ "timeframe": {
+ "enum": [
+ "M1",
+ "M5",
+ "M15",
+ "M30",
+ "H1",
+ "H4",
+ "D1"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "candles",
+ "timeframe"
+ ],
+ "type": "object"
+}
addedInput schema / properties / action / properties / exitOnCompression
Added value: +{
+ "additionalProperties": false,
+ "description": "Entries with mode \"execute\": close the position when price compresses (accumulates) instead of moving. Same rule as backtest_strategy",
+ "properties": {
+ "candles": {
+ "description": "Last N closed candles (2-100)",
+ "type": "integer"
+ },
+ "maxRangeAtr": {
+ "description": "Close when their total range is below this × ATR(14) of that timeframe (e.g. 0.8)",
+ "type": "number"
+ },
+ "timeframe": {
+ "enum": [
+ "M1",
+ "M5",
+ "M15",
+ "M30",
+ "H1",
+ "H4",
+ "D1"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "candles",
+ "timeframe",
+ "maxRangeAtr"
+ ],
+ "type": "object"
+}
changedInput schema / properties / action / properties / limitAt / properties / point / description
Previous value: -"type \"fvg\": near edge, midpoint (default) or far edge of the gap"New value: +"type \"fvg\" / \"zone\": near edge, midpoint (default) or far edge"
changedInput schema / properties / action / properties / limitAt / properties / ref / description
Previous value: -"type \"level\": the level reference, same forms as in the conditions (e.g. {\"ref\":\"range_high\",\"start\":\"08:00\",\"end\":\"10:00\"}, {\"ref\":\"session_high\",\"session\":\"asia\"}, {\"ref\":\"prev_day_high\"})"New value: +"type \"level\": the level reference, same forms as in the conditions (e.g. {\"ref\":\"range_high\",\"start\":\"08:00\",\"end\":\"10:00\"}, {\"ref\":\"session_high\",\"session\":\"asia\"}, {\"ref\":\"prev_day_high\"}, {\"ref\":\"fib\",\"timeframe\":\"M15\",\"level\":0.618})"
changedInput schema / properties / action / properties / limitAt / properties / type / description
Previous value: -"offset: N pips better than the price when the rule fires; fvg: inside the gap found by fvg_retest / fvg_formed; level: at a level reference computed when the rule fires (e.g. today's 08:00-10:00 UTC range high after a breakout of it)"New value: +"offset: N pips better than the price when the rule fires; fvg: inside the gap found by fvg_retest / fvg_formed; zone: inside the zone of a zone / confluence condition; level: at a level reference computed when the rule fires (e.g. today's 08:00-10:00 UTC range high after a breakout of it)"
changedInput schema / properties / action / properties / limitAt / properties / type / enum
Previous value: -[
- "offset",
- "fvg",
- "level"
-]New value: +[
+ "offset",
+ "fvg",
+ "zone",
+ "level"
+]
changedInput schema / properties / action / properties / stopAt / description
Previous value: -"Entries: a RELATIVE stop loss computed when the rule fires, instead of a fixed stopLoss (use with tpRrRatio)"New value: +"Entries: a RELATIVE stop loss computed when the rule fires, instead of a fixed stopLoss (use with tpRrRatio or takeProfitAt)"
addedInput schema / properties / action / properties / stopAt / properties / ref
Added value: +{
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1",
+ "description": "type \"level\": the level reference"
+}
changedInput schema / properties / action / properties / stopAt / properties / type / description
Previous value: -"fvg: beyond the far edge of the gap; signal_extreme: beyond the sweep wick, the gap or the retest candle wick"New value: +"fvg: beyond the far edge of the gap; zone: beyond the far edge of the zone of a zone/confluence condition; signal_extreme: beyond the sweep wick, the gap, the retest or the confirmation candle wick; level: beyond a level reference computed when the rule fires (e.g. {\"ref\":\"swing_high\",\"timeframe\":\"M15\"})"
changedInput schema / properties / action / properties / stopAt / properties / type / enum
Previous value: -[
- "fvg",
- "signal_extreme"
-]New value: +[
+ "fvg",
+ "zone",
+ "signal_extreme",
+ "level"
+]
addedInput schema / properties / action / properties / takeProfitAt
Added value: +{
+ "additionalProperties": false,
+ "description": "Entries: a take profit at a level computed when the rule fires (instead of takeProfit / tpRrRatio)",
+ "properties": {
+ "pips": {
+ "description": "Offset from the level in pips (positive above, negative below)",
+ "type": "number"
+ },
+ "ref": {
+ "additionalProperties": false,
+ "description": "The level reference: e.g. the last swing low {\"ref\":\"swing_low\",\"timeframe\":\"M15\"} or a Fibonacci extension {\"ref\":\"fib\",\"timeframe\":\"M15\",\"level\":-0.27}",
+ "properties": {
+ "daysAgo": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/daysAgo"
+ },
+ "direction": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/direction"
+ },
+ "end": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/end"
+ },
+ "indicator": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/indicator"
+ },
+ "level": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/level"
+ },
+ "minImpulseAtr": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/minImpulseAtr"
+ },
+ "minSwingAtr": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/minSwingAtr"
+ },
+ "nth": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/nth"
+ },
+ "period": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/period"
+ },
+ "ref": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/ref"
+ },
+ "session": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/session"
+ },
+ "shift": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/shift"
+ },
+ "start": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/start"
+ },
+ "strength": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/strength"
+ },
+ "timeframe": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/timeframe"
+ },
+ "timezone": {
+ "$ref": "#/properties/conditions/items/properties/level/anyOf/1/properties/timezone"
+ }
+ },
+ "required": [
+ "ref"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "level",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "ref"
+ ],
+ "type": "object"
+}
addedInput schema / properties / conditions / items / properties / baseCandles
Added value: +{
+ "description": "flip_zone: minimum candles of the base (2-20, default 3)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / baseRangeAtr
Added value: +{
+ "description": "flip_zone: maximum range of the base in ATR(14) (0.2-5, default 1)",
+ "type": "number"
+}
addedInput schema / properties / conditions / items / properties / confirmStrength
Added value: +{
+ "description": "trigger \"choch\": swing strength on the confirmTimeframe (1-10, default 2)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / confirmTimeframe
Added value: +{
+ "description": "zone/confluence with trigger close/rejection (default the zone timeframe) or choch (required, lower than the zone timeframe)",
+ "enum": [
+ "M1",
+ "M5",
+ "M15",
+ "M30",
+ "H1",
+ "H4",
+ "D1"
+ ],
+ "type": "string"
+}
addedInput schema / properties / conditions / items / properties / from
Added value: +{
+ "description": "fib_zone: lower retracement level (default 0.5)",
+ "type": "number"
+}
changedInput schema / properties / conditions / items / properties / level / anyOf
Previous value: -[
- {
- "type": "number"
- },
- {
- "additionalProperties": false,
- "properties": {
- "daysAgo": {
- "description": "day_high/day_low/day_close: 1 = yesterday, 2 = the day before…; day_open: 0 = today",
- "type": "integer"
- },
- "end": {
- "description": "range_high/range_low: HH:MM UTC (same day, after start)",
- "type": "string"
- },
- "indicator": {
- "description": "ref \"indicator\": highest/lowest = highest high / lowest low of the last N candles",
- "enum": [
- "sma",
- "ema",
- "rsi",
- "atr",
- "highest",
- "lowest"
- ],
- "type": "string"
- },
- "period": {
- "description": "ref \"indicator\": period (e.g. 50)",
- "type": "integer"
- },
- "ref": {
- "enum": [
- "session_high",
- "session_low",
- "range_high",
- "range_low",
- "prev_day_high",
- "prev_day_low",
- "prev_day_close",
- "day_high",
- "day_low",
- "day_open",
- "day_close",
- "indicator",
- "price"
- ],
- "type": "string"
- },
- "session": {
- "description": "session_high/session_low: asia 00:00-07:00, london 07:00-16:00, new_york 13:00-21:00 UTC",
- "enum": [
- "asia",
- "london",
- "new_york"
- ],
- "type": "string"
- },
- "shift": {
- "description": "ref \"indicator\": 0 = last closed candle (default), 1 = the one before…",
- "type": "integer"
- },
- "start": {
- "description": "range_high/range_low: HH:MM UTC",
- "type": "string"
- },
- "timeframe": {
- "description": "ref \"indicator\": candle timeframe",
- "enum": [
- "M1",
- "M5",
- "M15",
- "M30",
- "H1",
- "H4",
- "D1"
- ],
- "type": "string"
- },
- "timezone": {
- "description": "range_high/range_low: IANA time zone (e.g. Europe/London, America/New_York): the HH:MM times are local market time, so the same window follows the market in summer and winter (default UTC); the range must fall within the UTC day",
- "type": "string"
- }
- },
- "required": [
- "ref"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "type": "number"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "daysAgo": {
+ "description": "day_high/day_low/day_close: 1 = yesterday, 2 = the day before…; day_open: 0 = today",
+ "type": "integer"
+ },
+ "direction": {
+ "description": "ref \"fib\": only if the last impulse goes this way (default any)",
+ "enum": [
+ "bullish",
+ "bearish",
+ "any"
+ ],
+ "type": "string"
+ },
+ "end": {
+ "description": "range_high/range_low: HH:MM UTC (same day, after start)",
+ "type": "string"
+ },
+ "indicator": {
+ "description": "ref \"indicator\": highest/lowest = highest high / lowest low of the last N candles",
+ "enum": [
+ "sma",
+ "ema",
+ "rsi",
+ "atr",
+ "highest",
+ "lowest"
+ ],
+ "type": "string"
+ },
+ "level": {
+ "description": "ref \"fib\": the Fibonacci level (e.g. 0.618, 1, -0.27)",
+ "type": "number"
+ },
+ "minImpulseAtr": {
+ "description": "ref \"fib\": only impulses of at least this × ATR(14)",
+ "type": "number"
+ },
+ "minSwingAtr": {
+ "description": "swing_high/swing_low/fib: ignore swings that stand out less than this × ATR(14) (default 0)",
+ "type": "number"
+ },
+ "nth": {
+ "description": "swing_high/swing_low: 1 = the last confirmed swing (default), 2 = the one before…",
+ "type": "integer"
+ },
+ "period": {
+ "description": "ref \"indicator\": period (e.g. 50)",
+ "type": "integer"
+ },
+ "ref": {
+ "description": "Daily references, indicators, price, or MARKET STRUCTURE (M5-D1, closed candles only, no look-ahead): swing_high / swing_low = the last confirmed swing high/low (nth 2 = the one before…; a swing is a high/low with `strength` candles on each side, default 3, confirmed when those candles close); fib = a Fibonacci level of the LAST IMPULSE (the move between the last two opposite swings), measured from its end: 0.5 / 0.618 / 0.786 retracements, 1 = the impulse start, -0.27 / -0.618 = extensions beyond its end (targets).",
+ "enum": [
+ "session_high",
+ "session_low",
+ "range_high",
+ "range_low",
+ "prev_day_high",
+ "prev_day_low",
+ "prev_day_close",
+ "day_high",
+ "day_low",
+ "day_open",
+ "day_close",
+ "indicator",
+ "price",
+ "swing_high",
+ "swing_low",
+ "fib"
+ ],
+ "type": "string"
+ },
+ "session": {
+ "description": "session_high/session_low: asia 00:00-07:00, london 07:00-16:00, new_york 13:00-21:00 UTC",
+ "enum": [
+ "asia",
+ "london",
+ "new_york"
+ ],
+ "type": "string"
+ },
+ "shift": {
+ "description": "ref \"indicator\": 0 = last closed candle (default), 1 = the one before…",
+ "type": "integer"
+ },
+ "start": {
+ "description": "range_high/range_low: HH:MM UTC",
+ "type": "string"
+ },
+ "strength": {
+ "description": "swing_high/swing_low/fib: candles on each side of a swing (1-10, default 3)",
+ "type": "integer"
+ },
+ "timeframe": {
+ "description": "ref \"indicator\": candle timeframe; swing_high/swing_low/fib: structure timeframe (M5-D1)",
+ "enum": [
+ "M1",
+ "M5",
+ "M15",
+ "M30",
+ "H1",
+ "H4",
+ "D1"
+ ],
+ "type": "string"
+ },
+ "timezone": {
+ "description": "range_high/range_low: IANA time zone (e.g. Europe/London, America/New_York): the HH:MM times are local market time, so the same window follows the market in summer and winter (default UTC); the range must fall within the UTC day",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ref"
+ ],
+ "type": "object"
+ }
+]
addedInput schema / properties / conditions / items / properties / maxAgeCandles
Added value: +{
+ "description": "zone: only zones created in the last N candles of its timeframe (1-500, default 50)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / maxTouches
Added value: +{
+ "description": "zone/confluence: 1 = first retest only (default), 2 = up to the second visit… (1-10)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / min
Added value: +{
+ "description": "confluence: how many zones must overlap (default 2)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / minCount
Added value: +{
+ "description": "equal_highs/equal_lows: swings needed (2-5, default 2)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / minImpulseAtr
Added value: +{
+ "description": "bos/choch/order_block/fib_zone: minimum size of the impulse (displacement) in ATR(14) (default 0)",
+ "type": "number"
+}
addedInput schema / properties / conditions / items / properties / minOverlapPips
Added value: +{
+ "description": "confluence: minimum height of the overlap in pips (default 0)",
+ "type": "number"
+}
addedInput schema / properties / conditions / items / properties / minSwingAtr
Added value: +{
+ "description": "Ignore swings that stand out less than this × ATR(14) (default 0)",
+ "type": "number"
+}
addedInput schema / properties / conditions / items / properties / pattern
Added value: +{
+ "description": "candle_pattern and trigger \"rejection\": pin_bar, engulfing or any (default)",
+ "enum": [
+ "pin_bar",
+ "engulfing",
+ "any"
+ ],
+ "type": "string"
+}
changedInput schema / properties / conditions / items / properties / shift / description
Previous value: -"candle_direction: 1 = last closed candle (default), 2 = the one before…"New value: +"candle_direction / candle_pattern: 1 = last closed candle (default), 2 = the one before…"
addedInput schema / properties / conditions / items / properties / strength
Added value: +{
+ "description": "bos/choch/structure_trend/order_block/fib_zone/equal_*: candles on each side of a swing (1-10, default 3)",
+ "type": "integer"
+}
addedInput schema / properties / conditions / items / properties / to
Added value: +{
+ "description": "fib_zone: upper retracement level (default 0.618)",
+ "type": "number"
+}
changedInput schema / properties / conditions / items / properties / tolerancePips / description
Previous value: -"retest: how close to the level (in pips) counts as a retest (default 0 = must touch it)"New value: +"retest: how close to the level (in pips) counts as a retest (default 0 = must touch it); equal_highs/equal_lows: max distance between the swings (default 0.1 × ATR)"
changedInput schema / properties / conditions / items / properties / trigger / description
Previous value: -"fvg_retest: touch = fire as soon as price reaches the gap, without waiting for the candle to close (default); close = fire when the candle that returns to the gap closes"New value: +"fvg_retest: touch = fire as soon as price reaches the gap, without waiting for the candle to close (default); close = fire when the candle that returns to the gap closes. zone/confluence: touch (default), close, rejection or choch"
changedInput schema / properties / conditions / items / properties / trigger / enum
Previous value: -[
- "touch",
- "close"
-]New value: +[
+ "touch",
+ "close",
+ "rejection",
+ "choch"
+]
changedInput schema / properties / conditions / items / properties / type / description
Previous value: -"price_above/price_below {level}: current price beyond level. crosses_above/crosses_below {level}: price crosses the level after creation. close_above/close_below {level,timeframe}: a candle of that timeframe CLOSES beyond level. range_breakout {low,high,timeframe,direction}: a candle closes outside the range. consecutive_closes {level,side,count,timeframe}: N consecutive closes above/below level. sweep_above / sweep_below {level,timeframe,maxCandles}: LIQUIDITY SWEEP (stop hunt / fake breakout): price wicks beyond a known level (previous day high/low, Asian session high/low, equal highs…) coming from the other side, and a candle of that timeframe closes back inside within maxCandles candles (1-10, default 3; the wick candle itself counts). sweep_above → typically a SELL; sweep_below → typically a BUY. fvg_retest {timeframe, direction bullish|bearish, maxCandles, entry, trigger, minGap}: FAIR VALUE GAP (FVG / imbalance, ICT/SMC) retest: three consecutive candles where the 1st and 3rd do not overlap leave a gap (bullish: 3rd low above 1st high; bearish: 3rd high below 1st low); it fires when price returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without going beyond its far edge. trigger \"touch\" (default) fires in the minute price reaches the gap, inside the candle; trigger \"close\" waits for that candle to close and requires it not to close beyond the far edge (more confirmation, later and worse entry). maxCandles = how recent the gap must be (3-100 candles, default 20); minGap = minimum gap size in price (e.g. 1.5 on gold), default any. bullish → typically a BUY with the stop below the gap (backtest stop type \"wick\" uses the gap's far edge); bearish → typically a SELL. Combine with filters (time_window for London/New York, compare for trend). fvg_formed {timeframe, direction, minGap}: fires as soon as a NEW fair value gap forms (the last closed candle completes it) — pair it with a LIMIT entry inside the gap (action.limitAt {\"type\":\"fvg\",\"point\":\"midpoint\"}) and an expiry, which is how FVG entries are usually traded. retest {level, direction up|down, timeframe, maxCandles, tolerancePips}: BREAK AND RETEST of a level on closed candles of that timeframe. up: a candle closes above the level after a close at or below it (the breakout), then within maxCandles candles (1-50, default 10) the FIRST candle that comes back to the level (low <= level + tolerancePips, default 0) and still closes above it is the retest: it fires at the close of that candle. If a candle closes back at or below the level before the retest, that breakout is cancelled (a new one can start later). down = the mirror (break below, retest from below, close below). up → typically a BUY, down → a SELL; action.stopAt {\"type\":\"signal_extreme\"} puts the stop beyond the retest candle wick. Levels can be references (e.g. the 08:00-10:00 UTC range high: {\"ref\":\"range_high\",\"start\":\"08:00\",\"end\":\"10:00\"}, the Asian session high, the previous day high). at_time {at}: at a given ISO datetime. time_window {start,end}: only between HH:MM–HH:MM UTC. days_of_week {days}: only on those days. Time filters alone never trigger an order. LEVELS CAN BE REFERENCES instead of numbers (recomputed every minute, same as backtest_strategy): Asian/London/New York session high/low, previous day high/low/close, day_high/low N days ago, a custom HH:MM range, or an indicator (SMA, EMA, RSI, ATR, highest/lowest of N candles on M1-D1, closed candles only). compare {left, op, right}: compares two values (numbers or references), op above / below / crosses_above / crosses_below — e.g. trend filters: price above the D1 EMA 50, H1 RSI below 30; crosses_* can be the trigger (moving-average crossover). candle_direction {timeframe, direction bullish|bearish, shift}: the last closed candle of that timeframe (shift 1) closed up/down — e.g. \"yesterday was bullish\". Test the same rule first with backtest_strategy: the conditions are the same."New value: +"price_above/price_below {level}: current price beyond level. crosses_above/crosses_below {level}: price crosses the level after creation. close_above/close_below {level,timeframe}: a candle of that timeframe CLOSES beyond level. range_breakout {low,high,timeframe,direction}: a candle closes outside the range. consecutive_closes {level,side,count,timeframe}: N consecutive closes above/below level. sweep_above / sweep_below {level,timeframe,maxCandles}: LIQUIDITY SWEEP (stop hunt / fake breakout): price wicks beyond a known level (previous day high/low, Asian session high/low, equal highs…) coming from the other side, and a candle of that timeframe closes back inside within maxCandles candles (1-10, default 3; the wick candle itself counts). sweep_above → typically a SELL; sweep_below → typically a BUY. fvg_retest {timeframe, direction bullish|bearish, maxCandles, entry, trigger, minGap}: FAIR VALUE GAP (FVG / imbalance, ICT/SMC) retest: three consecutive candles where the 1st and 3rd do not overlap leave a gap (bullish: 3rd low above 1st high; bearish: 3rd high below 1st low); it fires when price returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without going beyond its far edge. trigger \"touch\" (default) fires in the minute price reaches the gap, inside the candle; trigger \"close\" waits for that candle to close and requires it not to close beyond the far edge (more confirmation, later and worse entry). maxCandles = how recent the gap must be (3-100 candles, default 20); minGap = minimum gap size in price (e.g. 1.5 on gold), default any. bullish → typically a BUY with the stop below the gap (backtest stop type \"wick\" uses the gap's far edge); bearish → typically a SELL. Combine with filters (time_window for London/New York, compare for trend). fvg_formed {timeframe, direction, minGap}: fires as soon as a NEW fair value gap forms (the last closed candle completes it) — pair it with a LIMIT entry inside the gap (action.limitAt {\"type\":\"fvg\",\"point\":\"midpoint\"}) and an expiry, which is how FVG entries are usually traded. retest {level, direction up|down, timeframe, maxCandles, tolerancePips}: BREAK AND RETEST of a level on closed candles of that timeframe. up: a candle closes above the level after a close at or below it (the breakout), then within maxCandles candles (1-50, default 10) the FIRST candle that comes back to the level (low <= level + tolerancePips, default 0) and still closes above it is the retest: it fires at the close of that candle. If a candle closes back at or below the level before the retest, that breakout is cancelled (a new one can start later). down = the mirror (break below, retest from below, close below). up → typically a BUY, down → a SELL; action.stopAt {\"type\":\"signal_extreme\"} puts the stop beyond the retest candle wick. Levels can be references (e.g. the 08:00-10:00 UTC range high: {\"ref\":\"range_high\",\"start\":\"08:00\",\"end\":\"10:00\"}, the Asian session high, the previous day high). at_time {at}: at a given ISO datetime. time_window {start,end}: only between HH:MM–HH:MM UTC. days_of_week {days}: only on those days. Time filters alone never trigger an order. LEVELS CAN BE REFERENCES instead of numbers (recomputed every minute, same as backtest_strategy): Asian/London/New York session high/low, previous day high/low/close, day_high/low N days ago, a custom HH:MM range, or an indicator (SMA, EMA, RSI, ATR, highest/lowest of N candles on M1-D1, closed candles only). compare {left, op, right}: compares two values (numbers or references), op above / below / crosses_above / crosses_below — e.g. trend filters: price above the D1 EMA 50, H1 RSI below 30; crosses_* can be the trigger (moving-average crossover). candle_direction {timeframe, direction bullish|bearish, shift}: the last closed candle of that timeframe (shift 1) closed up/down — e.g. \"yesterday was bullish\". MARKET STRUCTURE (M5-D1, closed candles, no look-ahead; a swing = a high/low with `strength` candles on each side, default 3, known when those candles close): bos {timeframe, direction bullish|bearish, maxCandles, minImpulseAtr} = filter: the last break of structure (a close beyond the last swing) was in that direction within maxCandles candles (default 20); choch = the same but it reversed the previous break (change of character); structure_trend {timeframe, direction} = higher highs and higher lows (bullish) / lower highs and lower lows (bearish); candle_pattern {timeframe, pattern pin_bar|engulfing|any, direction, shift} = the last closed candle is a rejection candle. zone {zone, timeframe, direction, trigger, …} = ENTRY TRIGGER when price comes back to a live zone: zone order_block (last opposite candle before the impulse that broke structure; minImpulseAtr for displacement), flip_zone (a base of baseCandles+ candles within baseRangeAtr × ATR, default 3 and 1, broken by a close: broken support becomes resistance and vice versa), fib_zone (between the from/to retracements of the LAST impulse, default 0.5-0.618; OTE 0.62-0.79), fvg (fair value gap), equal_highs / equal_lows (2+ swing highs/lows within tolerancePips, default 0.1 × ATR: liquidity). A zone dies when a candle closes beyond it; maxAgeCandles (default 50) = how recent; maxTouches (default 1) = first retest only, 2 = up to the second visit… trigger: touch (default: the minute price reaches it), close (a confirmTimeframe candle touches it and closes back outside), rejection (same, with a pin bar / engulfing candle), choch (a CHoCH on a LOWER confirmTimeframe while price is in the zone: multi-timeframe entry). confluence {direction, zones:[{zone, timeframe, …}, …] (2-4), min (default 2), minOverlapPips, trigger…} = ENTRY TRIGGER at the OVERLAP of at least `min` live zones (the entry zone is their intersection; results are broken down by combination). The zone of the trigger is used by stop/limit \"zone\" (stop beyond its far edge, limit at its near edge / midpoint / far edge). Test the same rule first with backtest_strategy: the conditions are the same."
changedInput schema / properties / conditions / items / properties / type / enum
Previous value: -[
- "price_above",
- "price_below",
- "crosses_above",
- "crosses_below",
- "close_above",
- "close_below",
- "range_breakout",
- "consecutive_closes",
- "sweep_above",
- "sweep_below",
- "fvg_retest",
- "fvg_formed",
- "retest",
- "at_time",
- "time_window",
- "days_of_week",
- "compare",
- "candle_direction"
-]New value: +[
+ "price_above",
+ "price_below",
+ "crosses_above",
+ "crosses_below",
+ "close_above",
+ "close_below",
+ "range_breakout",
+ "consecutive_closes",
+ "sweep_above",
+ "sweep_below",
+ "fvg_retest",
+ "fvg_formed",
+ "retest",
+ "at_time",
+ "time_window",
+ "days_of_week",
+ "compare",
+ "candle_direction",
+ "bos",
+ "choch",
+ "structure_trend",
+ "zone",
+ "confluence",
+ "candle_pattern"
+]
addedInput schema / properties / conditions / items / properties / zone
Added value: +{
+ "description": "zone: the zone kind",
+ "enum": [
+ "order_block",
+ "flip_zone",
+ "fib_zone",
+ "fvg",
+ "equal_highs",
+ "equal_lows"
+ ],
+ "type": "string"
+}
addedInput schema / properties / conditions / items / properties / zones
Added value: +{
+ "description": "confluence: 2-4 zones, e.g. [{\"zone\":\"order_block\",\"timeframe\":\"M15\"},{\"zone\":\"flip_zone\",\"timeframe\":\"M15\"},{\"zone\":\"fib_zone\",\"timeframe\":\"M15\",\"from\":0.5,\"to\":0.618}]",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "baseCandles": {
+ "type": "integer"
+ },
+ "baseRangeAtr": {
+ "type": "number"
+ },
+ "from": {
+ "type": "number"
+ },
+ "maxAgeCandles": {
+ "type": "integer"
+ },
+ "minCount": {
+ "type": "integer"
+ },
+ "minGap": {
+ "type": "number"
+ },
+ "minImpulseAtr": {
+ "type": "number"
+ },
+ "minSwingAtr": {
+ "type": "number"
+ },
+ "strength": {
+ "type": "integer"
+ },
+ "timeframe": {
+ "enum": [
+ "M5",
+ "M15",
+ "M30",
+ "H1",
+ "H4",
+ "D1"
+ ],
+ "type": "string"
+ },
+ "to": {
+ "type": "number"
+ },
+ "tolerancePips": {
+ "type": "number"
+ },
+ "zone": {
+ "enum": [
+ "order_block",
+ "flip_zone",
+ "fib_zone",
+ "fvg",
+ "equal_highs",
+ "equal_lows"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "zone",
+ "timeframe"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}