Serveur MCP

BenAwf

com.benawf/mcp
Données et analytique Finance et investissement Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Supports trading strategy design, rule editing, market context lookup, backtesting, trade review, and experiment lineage.

add_entry_gate
Add one AND entry gate. Args: side + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['side', 'condition'], 'properties': {'side': {'enum': ['long', 'short'], 'type': 'string', 'description': 'entry.long or entry.short.'}, 'condition': {'anyOf': [{'type': 'object', 'required': ['kind', 'left', 'op', 'right'], 'properties': {'op': {'enum': ['gt', 'lt', 'gte', 'lte', 'crosses_above', 'crosses_below'], 'type': 'string', 'description': 'Comparison operator. crosses_above/crosses_below require previous bar context.'}, 'kind': {'type': 'string', 'const': 'comparison'}, 'left': {'anyOf': [{'type': 'object', 'required': ['kind', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'price'}, 'field': {'enum': ['open', 'high', 'low', 'close'], 'type': 'string', 'description': 'Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back â\x80\x94 enables wick/rejection patterns (e.g. high pierced a level then close reclaimed).'}, 'lookback': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20.'}, 'timeframeMinutes': {'type': 'integer', 'description': 'Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'value'], 'properties': {'kind': {'type': 'string', 'const': 'constant'}, 'value': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'name', 'field', 'timeframeMinutes', 'lookback', 'params'], 'properties': {'kind': {'type': 'string', 'const': 'indicator'}, 'name': {'type': 'string', 'description': 'Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE.'}, 'field': {'enum': ['value', 'signal', 'histogram', 'upper', 'middle', 'lower', 'poc', 'vah', 'val', 'equilibrium', 'premium_pct'], 'type': 'string', 'description': 'Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators.'}, 'params': {'type': 'object', 'required': ['wing', 'atrMult', 'lookbackBars'], 'properties': {'wing': {'anyOf': [{'type': 'integer', 'maximum': 10, 'minimum': 1}, {'type': 'null'}], 'description': 'Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1â\x80\x932) = short-term structure, larger (4â\x80\x9310) = major swings only.'}, 'atrMult': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0.5}, {'type': 'null'}], 'description': 'ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult Ã\x97 ATR to count as displacement. Default 1.5.'}, 'lookbackBars': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 10}, {'type': 'null'}], 'description': 'Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (â\x89¤100).'}}, 'description': 'Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults.', 'additionalProperties': False}, 'lookback': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'zoneType', 'state', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'zone'}, 'field': {'enum': ['top', 'bottom', 'mid'], 'type': 'string', 'description': "Zone price level: top or bottom edge, or mid (midpoint â\x80\x94 the FVG 'consequent encroachment'). Default mid."}, 'state': {'enum': ['open', 'tapped', 'mitigated'], 'type': 'string', 'description': 'Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open.'}, 'lookback': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback'}, 'zoneType': {'enum': ['fvg_bull', 'fvg_bear', 'ob_bull', 'ob_bear'], 'type': 'string', 'description': 'fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block).'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'fn', 'a', 'b'], 'properties': {'a': {'anyOf': [{'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/1'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/2'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/3'}], 'description': 'First input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'b': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a', 'description': 'Second input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'fn': {'enum': ['spread', 'ratio', 'abs_distance_pct'], 'type': 'string', 'description': 'spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points â\x80\x94 same scale as ATR_PCT and SL/TP).'}, 'kind': {'type': 'string', 'const': 'derived'}}, 'additionalProperties': False}]}, 'right': {'$ref': '#/properties/condition/anyOf/0/properties/left'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'startUtc', 'endUtc', 'timeframeMinutes'], 'properties': {'kind': {'type': 'string', 'const': 'time_window'}, 'endUtc': {'$ref': '#/properties/condition/anyOf/1/properties/startUtc', 'description': 'Window end, exclusive. Earlier than startUtc = overnight window (e.g. "02:00" with start "22:00"). Equal to startUtc = always in window.'}, 'startUtc': {'type': 'string', 'description': 'Window start, inclusive (e.g. "09:30" for the New York killzone open).'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'days', 'timeframeMinutes'], 'properties': {'days': {'type': 'array', 'items': {'enum': ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'type': 'string'}, 'maxItems': 7, 'minItems': 1, 'description': 'Allowed UTC weekdays (e.g. omit "fri" to skip Friday).'}, 'kind': {'type': 'string', 'const': 'day_of_week'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision.'}}, 'additionalProperties': False}], 'description': 'Translator-shaped entry gate condition.'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
delete_entry_gate
Remove one entry gate by id (from get_experiment). Args: id only. Refuses when it would leave both long and short with zero gates.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'Gate id from get_experiment.rules.entry.'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
diff_dsl
Structured rules diff between two @R# iterations (entry gates per side, position, exit, cooldown). Use before adopting an older iteration's levers onto a newer one.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ref_a', 'ref_b'], 'properties': {'ref_a': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'First @R# to compare (older / baseline).'}, 'ref_b': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'Second @R# to compare (newer).'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
get_backtest
Cache-or-run one sim for an @R# + window, then return Score, trade count, PnL, drawdown, and bounded stats for one run. Numbers only — no BenAwf assessment LLM; you analyze. Same @R# + window → cached @B# (identical stats; follow the comment). After any mutate pass that result's dsl_ref. If you changed rules behind the same R#/draft, or suspect a stale cached @B#, pass force:true to force a fresh sim — never extrapolate from a cached B# of a different rules state.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': "@R# to sim. After mutate use that result's dsl_ref, not the Live-rules header."}, 'force': {'type': 'boolean', 'description': 'Skip the cache and force a fresh sim for this @R# + window. Use after any rule change on the same R#/draft, or whenever a cached B# is suspect.'}, 'config': {'type': 'object', 'required': ['asset', 'start_date', 'end_date', 'initial_balance', 'max_drawdown'], 'properties': {'asset': {'enum': ['BTC', 'ETH', 'SOL', 'XRP', 'BNB', 'LTC', 'LINK', 'DOGE', 'PEPE', 'SHIB', 'SPY', 'QQQ', 'IWM', 'DIA', 'VOO', 'XLF', 'XLE', 'XLK', 'XLV', 'XLP', 'XLY', 'XLU', 'XLI', 'XLB', 'XLRE', 'XLC', 'SMH', 'ARKK', 'GLD', 'SLV', 'TLT', 'HYG', 'EEM', 'AAPL', 'MSFT', 'GOOGL', 'AMZN', 'NVDA', 'META', 'TSLA', 'AVGO', 'ORCL', 'ADBE', 'CRM', 'AMD', 'QCOM', 'TXN', 'INTC', 'INTU', 'IBM', 'NOW', 'AMAT', 'MU', 'ARM', 'MRVL', 'PANW', 'CRWD', 'DDOG', 'NET', 'SNOW', 'PLTR', 'SMCI', 'DELL', 'APP', 'SHOP', 'UBER', 'ABNB', 'NFLX', 'COIN', 'HOOD', 'PYPL', 'JPM', 'BAC', 'WFC', 'C', 'GS', 'MS', 'V', 'MA', 'AXP', 'SCHW', 'BLK', 'SPGI', 'CME', 'COF', 'UNH', 'JNJ', 'LLY', 'PFE', 'MRK', 'ABBV', 'TMO', 'ABT', 'AMGN', 'ISRG', 'MDT', 'BMY', 'GILD', 'CVS', 'WMT', 'COST', 'HD', 'MCD', 'NKE', 'SBUX', 'TGT', 'LOW', 'PG', 'KO', 'PEP', 'PM', 'MO', 'CL', 'EL', 'DIS', 'BKNG', 'MAR', 'CAT', 'DE', 'BA', 'GE', 'HON', 'UPS', 'RTX', 'LMT', 'XOM', 'CVX', 'COP', 'SLB', 'NEE', 'DUK', 'SO', 'F', 'T', 'VZ', 'CMCSA', 'TMUS', 'XAUUSD', 'XAGUSD'], 'type': 'string', 'description': 'Single symbol to sim (e.g. BTC).'}, 'end_date': {'type': 'string', 'format': 'date-time'}, 'start_date': {'type': 'string', 'format': 'date-time'}, 'max_drawdown': {'type': 'number', 'maximum': 100, 'minimum': 0.01}, 'initial_balance': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Window + capital. Omit to reuse the previous run. Do not send empty strings or zeros.', 'additionalProperties': False}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
get_experiment
Prose summary plus rules JSON (entry gates with ids, position, exit, cooldownMinutes) and that iteration's @B# refs. Read before inventing translator-shaped mutate args.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'DSL iteration ref @R# (e.g. R2 or @R2).'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
get_lineage
Champion @R#, per-iteration verdicts, levers tried/untried/failed on champion, converged flag, and user canvas view vs recommended working @R#.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
get_market_context_by_date
OHLCV and cited indicators around that date (engine lookback each side).
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['symbol', 'date', 'time_frame'], 'properties': {'date': {'type': 'string', 'format': 'date-time'}, 'symbol': {'enum': ['BTC', 'ETH', 'SOL', 'XRP', 'BNB', 'LTC', 'LINK', 'DOGE', 'PEPE', 'SHIB', 'SPY', 'QQQ', 'IWM', 'DIA', 'VOO', 'XLF', 'XLE', 'XLK', 'XLV', 'XLP', 'XLY', 'XLU', 'XLI', 'XLB', 'XLRE', 'XLC', 'SMH', 'ARKK', 'GLD', 'SLV', 'TLT', 'HYG', 'EEM', 'AAPL', 'MSFT', 'GOOGL', 'AMZN', 'NVDA', 'META', 'TSLA', 'AVGO', 'ORCL', 'ADBE', 'CRM', 'AMD', 'QCOM', 'TXN', 'INTC', 'INTU', 'IBM', 'NOW', 'AMAT', 'MU', 'ARM', 'MRVL', 'PANW', 'CRWD', 'DDOG', 'NET', 'SNOW', 'PLTR', 'SMCI', 'DELL', 'APP', 'SHOP', 'UBER', 'ABNB', 'NFLX', 'COIN', 'HOOD', 'PYPL', 'JPM', 'BAC', 'WFC', 'C', 'GS', 'MS', 'V', 'MA', 'AXP', 'SCHW', 'BLK', 'SPGI', 'CME', 'COF', 'UNH', 'JNJ', 'LLY', 'PFE', 'MRK', 'ABBV', 'TMO', 'ABT', 'AMGN', 'ISRG', 'MDT', 'BMY', 'GILD', 'CVS', 'WMT', 'COST', 'HD', 'MCD', 'NKE', 'SBUX', 'TGT', 'LOW', 'PG', 'KO', 'PEP', 'PM', 'MO', 'CL', 'EL', 'DIS', 'BKNG', 'MAR', 'CAT', 'DE', 'BA', 'GE', 'HON', 'UPS', 'RTX', 'LMT', 'XOM', 'CVX', 'COP', 'SLB', 'NEE', 'DUK', 'SO', 'F', 'T', 'VZ', 'CMCSA', 'TMUS', 'XAUUSD', 'XAGUSD'], 'type': 'string'}, 'time_frame': {'enum': [1, 5, 15, 30, 60, 240, 1440], 'type': 'number', 'description': 'OHLCV timeframe in minutes: 1, 5, 15, 30, 60, 240, 1440.'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
list_backtests
Open Lab @B# rows with window, assets, trade count, PnL, win rate, drawdown, and tape_stripped.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}, 'iteration_ref': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'Optional @R#. Omit to retrieve backtests across all iterations.'}}, 'description': '@B# rows with window, PnL, trades, DD, tape_stripped.', 'additionalProperties': False}
list_iterations
Open Lab @R# rows as the same dump as Live rules (parent, headline @B#, Long/Position/Exit).
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
list_strategies
Ids, @R# refs, and backtest headlines for strategies not currently open.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'exclusiveMinimum': 0}, 'offset': {'type': 'integer', 'minimum': 0}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
list_trades
One page of fills (20 per page): trade_id, side, prices, PnL.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ref', 'page', 'sort'], 'properties': {'ref': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Backtest @B# ref (e.g. B3 or @B3).'}, 'page': {'type': 'integer', 'minimum': 1}, 'sort': {'enum': ['open_date', 'pnl'], 'type': 'string'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'description': 'One page of tape fills (20/page).', 'additionalProperties': False}
patch_cooldown
Set root cooldownMinutes. Args: cooldownMinutes number|null. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['cooldownMinutes'], 'properties': {'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}, 'cooldownMinutes': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'description': 'Root cooldownMinutes, or null to clear.'}}, 'additionalProperties': False}
patch_entry_gate
Replace one entry gate by id. Args: id + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'condition'], 'properties': {'id': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'Gate id from get_experiment.rules.entry.'}, 'condition': {'anyOf': [{'type': 'object', 'required': ['kind', 'left', 'op', 'right'], 'properties': {'op': {'enum': ['gt', 'lt', 'gte', 'lte', 'crosses_above', 'crosses_below'], 'type': 'string', 'description': 'Comparison operator. crosses_above/crosses_below require previous bar context.'}, 'kind': {'type': 'string', 'const': 'comparison'}, 'left': {'anyOf': [{'type': 'object', 'required': ['kind', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'price'}, 'field': {'enum': ['open', 'high', 'low', 'close'], 'type': 'string', 'description': 'Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back â\x80\x94 enables wick/rejection patterns (e.g. high pierced a level then close reclaimed).'}, 'lookback': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20.'}, 'timeframeMinutes': {'type': 'integer', 'description': 'Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'value'], 'properties': {'kind': {'type': 'string', 'const': 'constant'}, 'value': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'name', 'field', 'timeframeMinutes', 'lookback', 'params'], 'properties': {'kind': {'type': 'string', 'const': 'indicator'}, 'name': {'type': 'string', 'description': 'Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE.'}, 'field': {'enum': ['value', 'signal', 'histogram', 'upper', 'middle', 'lower', 'poc', 'vah', 'val', 'equilibrium', 'premium_pct'], 'type': 'string', 'description': 'Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators.'}, 'params': {'type': 'object', 'required': ['wing', 'atrMult', 'lookbackBars'], 'properties': {'wing': {'anyOf': [{'type': 'integer', 'maximum': 10, 'minimum': 1}, {'type': 'null'}], 'description': 'Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1â\x80\x932) = short-term structure, larger (4â\x80\x9310) = major swings only.'}, 'atrMult': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0.5}, {'type': 'null'}], 'description': 'ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult Ã\x97 ATR to count as displacement. Default 1.5.'}, 'lookbackBars': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 10}, {'type': 'null'}], 'description': 'Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (â\x89¤100).'}}, 'description': 'Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults.', 'additionalProperties': False}, 'lookback': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'zoneType', 'state', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'zone'}, 'field': {'enum': ['top', 'bottom', 'mid'], 'type': 'string', 'description': "Zone price level: top or bottom edge, or mid (midpoint â\x80\x94 the FVG 'consequent encroachment'). Default mid."}, 'state': {'enum': ['open', 'tapped', 'mitigated'], 'type': 'string', 'description': 'Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open.'}, 'lookback': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback'}, 'zoneType': {'enum': ['fvg_bull', 'fvg_bear', 'ob_bull', 'ob_bear'], 'type': 'string', 'description': 'fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block).'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'fn', 'a', 'b'], 'properties': {'a': {'anyOf': [{'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/1'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/2'}, {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/3'}], 'description': 'First input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'b': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a', 'description': 'Second input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'fn': {'enum': ['spread', 'ratio', 'abs_distance_pct'], 'type': 'string', 'description': 'spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points â\x80\x94 same scale as ATR_PCT and SL/TP).'}, 'kind': {'type': 'string', 'const': 'derived'}}, 'additionalProperties': False}]}, 'right': {'$ref': '#/properties/condition/anyOf/0/properties/left'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'startUtc', 'endUtc', 'timeframeMinutes'], 'properties': {'kind': {'type': 'string', 'const': 'time_window'}, 'endUtc': {'$ref': '#/properties/condition/anyOf/1/properties/startUtc', 'description': 'Window end, exclusive. Earlier than startUtc = overnight window (e.g. "02:00" with start "22:00"). Equal to startUtc = always in window.'}, 'startUtc': {'type': 'string', 'description': 'Window start, inclusive (e.g. "09:30" for the New York killzone open).'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'days', 'timeframeMinutes'], 'properties': {'days': {'type': 'array', 'items': {'enum': ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'type': 'string'}, 'maxItems': 7, 'minItems': 1, 'description': 'Allowed UTC weekdays (e.g. omit "fri" to skip Friday).'}, 'kind': {'type': 'string', 'const': 'day_of_week'}, 'timeframeMinutes': {'$ref': '#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision.'}}, 'additionalProperties': False}], 'description': 'Translator-shaped replacement condition.'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
patch_exit
Full replace of rules.exit. Args: exit JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['exit'], 'properties': {'exit': {'type': 'object', 'required': ['stopLossPercentage', 'takeProfitPercentage', 'partialExitsAt', 'trail', 'breakevenAfterMinutes', 'maxHoldMinutes', 'signalExit'], 'properties': {'trail': {'anyOf': [{'type': 'array', 'items': {'type': 'number'}, 'maxItems': 2, 'minItems': 2}, {'type': 'null'}], 'description': 'Trail config: [fire, extend]. Null disables. extend > 0 chains (re-arm after each bump); extend = 0 locks SL at the fire price once then clears. fire = fraction of current TP distance (0â\x80\x931 exclusive); extend = TP multiplier add-on (0 = fire-price lock one-shot).'}, 'signalExit': {'anyOf': [{'type': 'object', 'required': ['long', 'short'], 'properties': {'long': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['kind', 'left', 'op', 'right'], 'properties': {'op': {'enum': ['gt', 'lt', 'gte', 'lte', 'crosses_above', 'crosses_below'], 'type': 'string', 'description': 'Comparison operator. crosses_above/crosses_below require previous bar context.'}, 'kind': {'type': 'string', 'const': 'comparison'}, 'left': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source'}, 'right': {'$ref': '#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/0/properties/left'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'startUtc', 'endUtc', 'timeframeMinutes'], 'properties': {'kind': {'type': 'string', 'const': 'time_window'}, 'endUtc': {'$ref': '#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/1/properties/startUtc', 'description': 'Window end, exclusive. Earlier than startUtc = overnight window (e.g. "02:00" with start "22:00"). Equal to startUtc = always in window.'}, 'startUtc': {'type': 'string', 'description': 'Window start, inclusive (e.g. "09:30" for the New York killzone open).'}, 'timeframeMinutes': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'days', 'timeframeMinutes'], 'properties': {'days': {'type': 'array', 'items': {'enum': ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'type': 'string'}, 'maxItems': 7, 'minItems': 1, 'description': 'Allowed UTC weekdays (e.g. omit "fri" to skip Friday).'}, 'kind': {'type': 'string', 'const': 'day_of_week'}, 'timeframeMinutes': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision.'}}, 'additionalProperties': False}]}}, 'short': {'type': 'array', 'items': {'$ref': '#/properties/exit/properties/signalExit/anyOf/0/properties/long/items'}}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Optional indicator-based exit: closes the position at market when these conditions fire (evaluated on the same cadence as entries). Same condition shape as entry blocks. Use for mean-reversion targets (e.g. close crosses VWAP) or thesis-invalidation exits instead of relying only on fixed TP. Null disables.'}, 'maxHoldMinutes': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'description': 'Hard TTL: force close at market after this many minutes regardless of PnL. Null disables.'}, 'partialExitsAt': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['pricePercentage', 'exitAmountFraction'], 'properties': {'pricePercentage': {'type': 'number', 'description': 'Signed decimal move from entry (-1 to 1). Percent as fraction: -0.005 = -0.5%, 0.03 = +3%. Not the 0â\x80\x93100 scale used by stopLossPercentage.', 'exclusiveMaximum': 1, 'exclusiveMinimum': -1}, 'exitAmountFraction': {'type': 'number', 'description': 'Fraction of the remaining position to liquidate when this level is hit', 'exclusiveMaximum': 1, 'exclusiveMinimum': 0}}, 'additionalProperties': False}}, {'type': 'null'}], 'description': 'Ladder of partial exits. Null means no partial exits.'}, 'stopLossPercentage': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Fixed stop/TP distance on the 0â\x80\x93100 scale (original shape).'}, {'type': 'object', 'required': ['source', 'op', 'value', 'minPercentage', 'maxPercentage', 'fallbackPercentage'], 'properties': {'op': {'enum': ['multiply', 'add'], 'type': 'string', 'description': 'multiply = resolved(source) Ã\x97 value; add = resolved(source) + value.'}, 'value': {'type': 'number', 'description': 'Multiplier or addend applied after resolving source.'}, 'source': {'anyOf': [{'type': 'object', 'required': ['kind', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'price'}, 'field': {'enum': ['open', 'high', 'low', 'close'], 'type': 'string', 'description': 'Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back â\x80\x94 enables wick/rejection patterns (e.g. high pierced a level then close reclaimed).'}, 'lookback': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20.'}, 'timeframeMinutes': {'type': 'integer', 'description': 'Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'value'], 'properties': {'kind': {'type': 'string', 'const': 'constant'}, 'value': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'name', 'field', 'timeframeMinutes', 'lookback', 'params'], 'properties': {'kind': {'type': 'string', 'const': 'indicator'}, 'name': {'type': 'string', 'description': 'Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE.'}, 'field': {'enum': ['value', 'signal', 'histogram', 'upper', 'middle', 'lower', 'poc', 'vah', 'val', 'equilibrium', 'premium_pct'], 'type': 'string', 'description': 'Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators.'}, 'params': {'type': 'object', 'required': ['wing', 'atrMult', 'lookbackBars'], 'properties': {'wing': {'anyOf': [{'type': 'integer', 'maximum': 10, 'minimum': 1}, {'type': 'null'}], 'description': 'Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1â\x80\x932) = short-term structure, larger (4â\x80\x9310) = major swings only.'}, 'atrMult': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0.5}, {'type': 'null'}], 'description': 'ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult Ã\x97 ATR to count as displacement. Default 1.5.'}, 'lookbackBars': {'anyOf': [{'type': 'integer', 'maximum': 100, 'minimum': 10}, {'type': 'null'}], 'description': 'Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (â\x89¤100).'}}, 'description': 'Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults.', 'additionalProperties': False}, 'lookback': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback'}, 'timeframeMinutes': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'zoneType', 'state', 'field', 'timeframeMinutes', 'lookback'], 'properties': {'kind': {'type': 'string', 'const': 'zone'}, 'field': {'enum': ['top', 'bottom', 'mid'], 'type': 'string', 'description': "Zone price level: top or bottom edge, or mid (midpoint â\x80\x94 the FVG 'consequent encroachment'). Default mid."}, 'state': {'enum': ['open', 'tapped', 'mitigated'], 'type': 'string', 'description': 'Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open.'}, 'lookback': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback'}, 'zoneType': {'enum': ['fvg_bull', 'fvg_bear', 'ob_bull', 'ob_bear'], 'type': 'string', 'description': 'fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block).'}, 'timeframeMinutes': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes', 'description': 'Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'fn', 'a', 'b'], 'properties': {'a': {'anyOf': [{'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0'}, {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/1'}, {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/2'}, {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/3'}], 'description': 'First input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'b': {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/4/properties/a', 'description': 'Second input â\x80\x94 a primitive operand (price, indicator, or constant). No nesting.'}, 'fn': {'enum': ['spread', 'ratio', 'abs_distance_pct'], 'type': 'string', 'description': 'spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points â\x80\x94 same scale as ATR_PCT and SL/TP).'}, 'kind': {'type': 'string', 'const': 'derived'}}, 'additionalProperties': False}], 'description': 'Operand resolved at rule-fire time (latest fully closed bar). Any indicator, price field, or derived expression.'}, 'maxPercentage': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}], 'description': 'Ceiling on the resolved 0â\x80\x93100 distance after op. Null disables.'}, 'minPercentage': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}], 'description': 'Floor on the resolved 0â\x80\x93100 distance after op. Null disables.'}, 'fallbackPercentage': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Fixed 0â\x80\x93100 distance used when source resolves null (indicator warmup).'}}, 'additionalProperties': False}], 'description': 'Stop-loss distance from entry on the 0â\x80\x93100 scale, or a dynamic expression resolved at fire time. 0 disables SL.'}, 'takeProfitPercentage': {'anyOf': [{'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/0'}, {'$ref': '#/properties/exit/properties/stopLossPercentage/anyOf/1'}], 'description': 'Take-profit distance from entry on the 0â\x80\x93100 scale, or a dynamic expression resolved at fire time.'}, 'breakevenAfterMinutes': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'description': 'Soft TTL: minutes after open at which the engine intervenes. If the trade is in profit, it closes at market to lock in the gain. If underwater, SL moves to break-even. Null disables.'}}, 'description': 'Full replace of rules.exit (not a merge). Every key required â\x80\x94 null disables: stopLossPercentage + takeProfitPercentage = 0â\x80\x93100 number OR {source,op,value,fallbackPercentage,minPercentage,maxPercentage}; partialExitsAt = [{pricePercentage, exitAmountFraction}] | null (pricePercentage is a decimal fraction: 0.03 = +3%, NOT the 0â\x80\x93100 SL/TP scale); trail = [fire, extend] | null (fire in (0,1), extend >= 0; NOT {fire,extend}); breakevenAfterMinutes + maxHoldMinutes = number | null; signalExit = {long, short} condition arrays | null. Cooldown lives on the rules root (op=patch_cooldown), not here.', 'additionalProperties': False}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
patch_position
Full replace of rules.position. Args: position JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['position'], 'properties': {'position': {'type': 'object', 'required': ['usdAmount', 'balancePercent', 'orderType', 'limitPrice', 'expiresInMinutes', 'usedTechnicalAnalysisIndicators'], 'properties': {'orderType': {'enum': ['market', 'limit'], 'type': 'string'}, 'usdAmount': {'type': 'number', 'minimum': 0, 'description': 'Fixed USD notional when the rule fires. Use 0 when sizing via balancePercent.'}, 'limitPrice': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'description': 'Limit price when orderType is limit; null for market orders.'}, 'balancePercent': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Percent of available balance to deploy (0â\x80\x93100 scale) when the rule fires. Use 0 when sizing via usdAmount.'}, 'expiresInMinutes': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'description': 'Limit order TTL in minutes; null when not used.'}, 'usedTechnicalAnalysisIndicators': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Indicators that justify this entry (one of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE) â\x80\x94 use [] when none. Never list zone types (fvg_bull, fvg_bear, ob_bull, ob_bear); those belong on zone operands.'}}, 'description': 'Full replace of rules.position (not a merge). Every key required. usdAmount XOR balancePercent (unused = 0). orderType = market|limit. limitPrice + expiresInMinutes = number | null (null unless limit). usedTechnicalAnalysisIndicators = string[] ([] if none; never zone types).', 'additionalProperties': False}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
select_iteration
Load an @R# onto the live canvas so mutate tools edit that iteration.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': '@R# to load onto the canvas (usually champion).'}, 'strategy_id': {'type': 'string', 'minLength': 1, 'description': 'Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open.'}}, 'additionalProperties': False}
Ajouté
get_market_context_by_date
22 September 2026 02:40
Ajouté
diff_dsl
22 September 2026 02:40
Ajouté
get_experiment
22 September 2026 02:40
Ajouté
list_trades
22 September 2026 02:40
Ajouté
get_backtest
22 September 2026 02:40
Ajouté
list_backtests
22 September 2026 02:40
Ajouté
list_strategies
22 September 2026 02:40
Ajouté
patch_cooldown
22 September 2026 02:40
Ajouté
patch_exit
22 September 2026 02:40
Ajouté
patch_position
22 September 2026 02:40
Ajouté
delete_entry_gate
22 September 2026 02:40
Ajouté
patch_entry_gate
22 September 2026 02:40
Ajouté
add_entry_gate
22 September 2026 02:40
Ajouté
select_iteration
22 September 2026 02:40
Ajouté
get_lineage
22 September 2026 02:40
Ajouté
list_iterations
22 September 2026 02:40