Appearance
Trading
Main Web3 trading tools. Defaults to dry-run. The LLM should pass confirm: true to actually submit. Called without confirm, the tool should return a preview describing exactly what it would have done.
WARNING
Treat confirm: true as the equivalent of pressing the trade button yourself. The LLM only gets it when you approve — review the dry-run output first. That said, not every LLM model has the same reasoning capability.
Side semantics
For every trade tool:
side: "long"— buy (or buy on trigger). Opens or adds to a long position; closes a short whenreduce_only.side: "short"— sell (or sell on trigger). Opens or adds to a short position; closes a long whenreduce_only.
For bracket orders, side is the entry side; TP/SL legs go the opposite direction automatically.
Placement verification
A 200 from Strike's POST /v2/order only means the request was accepted for processing. The matching engine can still refuse the order — most commonly with insufficient_balance — and when it does, the ack looks exactly like the ack for an order that rested on the book. An order that was never placed therefore used to read as "submitted".
Every tool that places an order now guards both ends of that gap:
Before submitting, the account's
available_balanceis checked against the margin the order needs (notional ÷ leverage). An order the account plainly cannot fund is refused locally, with the shortfall and the notional that would fit, and never reaches the exchange. Strike'smaxNotionalValuedoes not cover this — it is a market-level ceiling, not a balance-aware one. The check is read-only, so it runs on the dry run too: an unfundable order fails on the approval card rather than after you approve it.After submitting, the order is read back by
client_order_id(viaGET /v2/order, falling back toGET /v2/history/orderfor orders already off the active index) and the response ends with aLIVE STATUSline:Line Meaning VERIFIED RESTINGLive on the book at the stated price VERIFIED FILLEDExecuted — there is a position, not a pending order REJECTED BY THE EXCHANGENothing was placed. Carries the exchange's reason and the available balance. Returned as a tool error CANCELED/EXPIREDNot on the book UNVERIFIEDThe read-back failed; the order's state is unknown and must be checked with strike_get_open_orders/strike_get_order_historyFor a bracket, verification covers the entry leg — the TP/SL legs are inactive until it fills.
TIP
LIVE STATUS, not the Submitted … summary above it, is what actually happened. Report that line.
strike_place_market_trade
Open or close a position at market.
| Name | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | Internal symbol (BTC-PERP, …) |
side | long / short | — | See above |
quantity | number > 0 | — | Base asset units; must respect size precision |
reduce_only | bool | false | If true, cannot open new exposure (routes to closeLong/closeShort) |
confirm | bool | false | Must be true to actually place |
reduce_only orders bypass the $10 minimum notional (so closing dust always works).
Example prompt:
Open a market long on
BTC-PERPwith 1% of my balance. Confirm and execute.
strike_place_limit_trade
Place a resting limit order. Returns the order ID, which can be passed to strike_cancel_order.
| Name | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | |
side | long / short | — | |
quantity | number > 0 | — | Respects size precision |
price | number > 0 | — | Limit price in USD |
reduce_only | bool | false | Use for exit limits on existing positions |
confirm | bool | false | Must be true to actually place |
Reduce-only limits and empty positions
Strike rejects reduce-only limits when no position exists yet — the order has nothing to reduce. For TPs/SLs that should rest until triggered, use strike_place_take_profit / strike_place_stop_loss instead. For TPs/SLs attached to a planned new entry, use strike_place_bracket_limit.
strike_place_take_profit
Reduce-only take-profit trigger order. Rests on the book until stop_price is hit, then fills at market (if no limit_price) or as a limit at limit_price.
| Name | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | |
side | long / short | — | long = buy on trigger (closes a short); short = sell on trigger (closes a long) |
quantity | number > 0 | — | |
stop_price | number > 0 | — | Trigger (mark) price |
limit_price | number > 0? | — | If set, places take_profit_limit instead of take_profit |
confirm | bool | false |
strike_place_stop_loss
Reduce-only stop-loss trigger order. Same shape as strike_place_take_profit. Use this to attach a stop to an existing position.
| Name | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | |
side | long / short | — | long = buy on trigger (closes a short); short = sell on trigger (closes a long) |
quantity | number > 0 | — | |
stop_price | number > 0 | — | Trigger (mark) price |
limit_price | number > 0? | — | If set, places stop_limit instead of stop |
confirm | bool | false |
strike_place_bracket_limit
Limit entry + take-profit + (optional) stop-loss as a single Strike strategy order. The TP/SL only activate after the entry fills, so they don't get rejected for "no position to reduce" the way standalone reduce-only orders do. Strike OCO-cancels the survivor when one fills.
| Name | Type | Default | Notes |
|---|---|---|---|
symbol | string | — | |
side | long / short | — | Entry side. TP/SL go opposite automatically. |
quantity | number > 0 | — | Entry size |
entry_price | number > 0 | — | Entry limit price |
tp_stop_price | number > 0 | — | TP trigger (mark) price |
tp_limit_price | number > 0? | tp_stop_price | TP limit after trigger; defaults to the trigger |
sl_stop_price | number > 0? | — | Omit for TP-only bracket |
sl_limit_price | number > 0? | — | If omitted with sl_stop_price, SL is a market stop |
confirm | bool | false |
Example prompt:
Place a long
bracket_limitonBTC. Use 1% of my account balanace. Entry at 66,800; TP at 68,500; SL at 66,000. Dry-run first, then confirm.
For multi-TP setups (e.g. 50/30/20 sizing), call this once per TP slice with the matching quantity and TP levels.
strike_cancel_order
Cancel a resting order by ID.
| Name | Type | Default | Notes |
|---|---|---|---|
orderId | string | — | Numeric order ID or client_order_id UUID, as returned by strike_get_open_orders |
symbol | string | — | |
confirm | bool | false |
Example prompt:
List my open orders, then cancel the BTC limit at 65,000.
