Skip to main content
Glama

Update Conditional Order

update_conditional_order
Destructive

Update an active rule-based conditional order. Fields not sent keep their current value; "conditions" replaces the whole list, "action" is merged field by field (sending a different action.type replaces the whole action, e.g. turning a close_position exit into a modify_position). The symbol cannot be changed (cancel and create a new order instead).

Input Schema

NameRequiredDescriptionDefault
titleNoNew short descriptive name
actionNoFields of the action to change
orderIdYesThe conditional order ID to update
expiresAtNoNew expiration (ISO 8601). Never later than 24h after the order was created (exit rules: 7 days); null resets to that maximum
conditionsNoConditions combined with AND (max 5; up to 8 when using level references, compare or candle_direction). At least one must be a price/candle condition or a compare with crosses_above/crosses_below.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed35 schema fields changed
    • 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"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / action / properties / trailing
      Added value: +{
      +  "description": "Entries with mode \"execute\": true: trailing stop executed by the broker — the stop follows price at the initial stop distance (entry to stopLoss) and only moves in favour. Available on cTrader, TradeLocker and MetaTrader (market and pending orders) and Bybit (market orders); rejected on other platforms. backtest_strategy trade.trailing simulates the same rule. Checked when the order is created.",
      +  "type": "boolean"
      +}
    • 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"
      -      }
      -    },
      -    "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"
      +      },
      +      "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"
      +  }
      +]
    • addedInput schema / properties / conditions / items / properties / timezone
      Added value: +{
      +  "description": "time_window: 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)",
      +  "type": "string"
      +}
  3. Changed10 schema fields changed
    • changedInput schema / properties / action / properties / limitAt / properties / pips / description
      Previous value: -"type \"offset\": pips below (buy) / above (sell) the trigger price"New value: +"type \"offset\": pips below (buy) / above (sell) the trigger price; type \"level\": optional offset from the level in pips (positive above, negative below)"
    • addedInput schema / properties / action / properties / limitAt / properties / ref
      Added value: +{
      +  "$ref": "#/properties/conditions/items/properties/level/anyOf/1",
      +  "description": "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\"})"
      +}
    • 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"New 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)"
    • changedInput schema / properties / action / properties / limitAt / properties / type / enum
      Previous value: -[
      -  "offset",
      -  "fvg"
      -]New value: +[
      +  "offset",
      +  "fvg",
      +  "level"
      +]
    • 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 or the gap"New value: +"fvg: beyond the far edge of the gap; signal_extreme: beyond the sweep wick, the gap or the retest candle wick"
    • changedInput schema / properties / conditions / items / properties / direction / description
      Previous value: -"range_breakout: up/down/any; candle_direction and fvg_retest: bullish/bearish"New value: +"range_breakout: up/down/any; retest: up/down; candle_direction and fvg_retest: bullish/bearish"
    • changedInput schema / properties / conditions / items / properties / maxCandles / description
      Previous value: -"sweep_above/sweep_below: candles allowed to close back inside after the wick (1-10, default 3); fvg_retest: how recent the gap must be, in candles (3-100, default 20)"New value: +"sweep_above/sweep_below: candles allowed to close back inside after the wick (1-10, default 3); fvg_retest: how recent the gap must be, in candles (3-100, default 20); retest: max candles between the breakout candle and the retest candle (1-50, default 10)"
    • addedInput schema / properties / conditions / items / properties / tolerancePips
      Added value: +{
      +  "description": "retest: how close to the level (in pips) counts as a retest (default 0 = must touch it)",
      +  "type": "number"
      +}
    • 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. 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\". 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",
      -  "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"
      +]
  4. Changed2 schema fields changed
    • addedInput schema / properties / conditions / items / properties / trigger
      Added value: +{
      +  "description": "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",
      +  "enum": [
      +    "touch",
      +    "close"
      +  ],
      +  "type": "string"
      +}
    • 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, 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 a closed candle returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without closing beyond its far edge. 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. 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. 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."
  5. Changed3 schema fields changed
    • addedInput schema / properties / action / properties / brokerConfigs / items / properties / confirmHighRisk
      Added value: +{
      +  "description": "Only after the user explicitly confirmed a percentage risk above 10% per order",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / action / properties / brokerConfigs / items / properties / sizingMode / description
      Previous value: -"\"percentage\" = % of balance to risk (max 10), \"fixed_lots\" = lot size"New value: +"\"percentage\" = % of the balance LOST if the stop loss is hit (not the share of the balance used); \"fixed_lots\" = lot size"
    • changedInput schema / properties / action / properties / brokerConfigs / items / properties / sizingValue / description
      Previous value: -"Percentage (e.g. 1) or lots (e.g. 0.01)"New value: +"Percentage (typically 0.25-2, up to 100; above 10 needs confirmHighRisk after the user confirms) or lots (e.g. 0.01)"
  6. Changed7 schema fields changed
    • addedInput schema / properties / action / properties / expiryMinutes
      Added value: +{
      +  "description": "Only for type \"limit\": cancel the pending order if it has not filled after this many minutes (1-1440)",
      +  "type": "integer"
      +}
    • addedInput schema / properties / action / properties / limitAt
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Only for type \"limit\": a RELATIVE limit price computed when the rule fires, instead of a fixed limitPrice",
      +  "properties": {
      +    "pips": {
      +      "description": "type \"offset\": pips below (buy) / above (sell) the trigger price",
      +      "type": "number"
      +    },
      +    "point": {
      +      "description": "type \"fvg\": near edge, midpoint (default) or far edge of the gap",
      +      "enum": [
      +        "near",
      +        "midpoint",
      +        "far"
      +      ],
      +      "type": "string"
      +    },
      +    "type": {
      +      "description": "offset: N pips better than the price when the rule fires; fvg: inside the gap found by fvg_retest / fvg_formed",
      +      "enum": [
      +        "offset",
      +        "fvg"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / action / properties / maxMinutes
      Added value: +{
      +  "description": "Entries: close the position this many minutes after it opens (1-10080), whatever the result — a time exit; with it the take profit is optional",
      +  "type": "integer"
      +}
    • addedInput schema / properties / action / properties / stopAt
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Entries: a RELATIVE stop loss computed when the rule fires, instead of a fixed stopLoss (use with tpRrRatio)",
      +  "properties": {
      +    "bufferPips": {
      +      "description": "Extra pips beyond that level (default 0)",
      +      "type": "number"
      +    },
      +    "type": {
      +      "description": "fvg: beyond the far edge of the gap; signal_extreme: beyond the sweep wick or the gap",
      +      "enum": [
      +        "fvg",
      +        "signal_extreme"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / action / properties / stopLoss / description
      Previous value: -"Entries: stop loss price (required). modify_position: new stop loss price, or \"break_even\" to move it to the entry price"New value: +"Entries: stop loss price (required unless stopAt). modify_position: new stop loss price, or \"break_even\" to move it to the entry price"
    • 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, 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 a closed candle returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without closing beyond its far edge. 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). 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, 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 a closed candle returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without closing beyond its far edge. 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. 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."
    • 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",
      -  "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",
      +  "at_time",
      +  "time_window",
      +  "days_of_week",
      +  "compare",
      +  "candle_direction"
      +]
  7. Changed6 schema fields changed
    • changedInput schema / properties / conditions / items / properties / direction / description
      Previous value: -"range_breakout: up/down/any; candle_direction: bullish/bearish"New value: +"range_breakout: up/down/any; candle_direction and fvg_retest: bullish/bearish"
    • addedInput schema / properties / conditions / items / properties / entry
      Added value: +{
      +  "description": "fvg_retest: touch = price reaches the gap (default); midpoint = price reaches its 50%",
      +  "enum": [
      +    "touch",
      +    "midpoint"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / conditions / items / properties / maxCandles / description
      Previous value: -"sweep_above/sweep_below: candles allowed to close back inside after the wick (1-10, default 3)"New value: +"sweep_above/sweep_below: candles allowed to close back inside after the wick (1-10, default 3); fvg_retest: how recent the gap must be, in candles (3-100, default 20)"
    • addedInput schema / properties / conditions / items / properties / minGap
      Added value: +{
      +  "description": "fvg_retest: minimum gap size in price units (default: any size)",
      +  "type": "number"
      +}
    • 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. 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, 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 a closed candle returns to the gap for the FIRST time (entry \"touch\" = reaches its near edge, default; \"midpoint\" = its 50%) without closing beyond its far edge. 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). 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."
    • 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",
      -  "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",
      +  "at_time",
      +  "time_window",
      +  "days_of_week",
      +  "compare",
      +  "candle_direction"
      +]
  8. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, openWorldHint=true, so the safety profile is covered. The description adds genuinely non-obvious behavior: omitted fields persist, "conditions" replaces the whole list, "action" merges field-by-field, and a changed action.type wipes the prior action — exactly the kind of silent-destruction detail an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, zero filler, with the merge rules front-loaded ahead of the constraint about symbols. Every sentence conveys actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with a very deep nested schema, the description covers the hardest thing to infer (patch semantics per field). It omits whether updating re-arms a triggered rule, the 24h/7-day expiry interaction, and what the response contains, but the schema and annotations carry most of that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds merge/replace semantics for the two object parameters that the schema cannot express (partial patch vs full replacement). It does not restate orderId or expiresAt behavior, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update an active rule-based conditional order") and scopes it to active orders. It is clearly separable from create_conditional_order, cancel_conditional_order, and get_conditional_order in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent away from an unsupported use case: "The symbol cannot be changed (cancel and create a new order instead)" names the alternative path. It stops short of naming sibling tools directly or saying when to prefer update over cancel+recreate for other fields.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources