update_strategy
Change a DRAFT strategy in place: its signals, their parameters, or a stated execution value. Pass the COMPLETE entry and exit signal lists when changing signals -- what you pass replaces what was stored, it is not merged, while constraints merge onto the stored execution config. Only a draft that has never been backtested can change: once a backtest has measured it, its rules are frozen so the results stay attached to the rules they ran, and a change means saving a NEW strategy with save_strategy. Use this to act on verify_strategy's warnings without creating a duplicate.
[Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| constraints | No | Execution values the person stated, e.g. {"max_risk_per_trade": 0.01}. Each is kept exactly as given rather than nudged. | |
| strategy_id | Yes | The strategy's UUID. | |
| exit_signals | No | The signals that close one, same shape. A strategy may have none, and then it exits on risk rules alone. | |
| entry_signals | No | The signals that open a position. Exactly one must be a TRIGGER in the knowledge graph; the rest are FILTERs. | |
| strategy_name | No | What to call it, in plain words a person reads -- the entry trigger's friendly_name from the knowledge graph, then the asset and timeframe, e.g. "Upside Range Breakout - BTC 1h". Never a code name such as btc_strategy or bb_upper_breakout. | |
| regime_override | No | Save anyway when the regime check refuses. Only ever on the person's explicit say-so, after they have been told why. | |
| regime_direction | No | The direction band from get_market_regime, e.g. bear. The signal searches filter by it and find_sweep_runs marks each row's regime_fit with it; save_strategy and update_strategy read the current band themselves, so their check runs without it. |