okx-cex-bot▌
okx/agent-skills · updated Apr 8, 2026
MDX-style export adds YAML metadata + attribution linking explainx.ai and this canonical listing URL.
Native OKX grid and DCA trading bot management with server-side execution.
- ›Create and manage spot grid bots (price range, grid count, investment amount) and contract grid bots (long/short/neutral with leverage) — both run entirely on OKX servers
- ›Contract DCA (Dollar Cost Averaging / Martingale) bots with configurable safety orders, price steps, volume multipliers, take-profit, and stop-loss
- ›Monitor active bots, retrieve P&L, view individual fills and cycles, and stop bots with c
OKX CEX Bot Trading
Grid and DCA (Spot & Contract Martingale) bot management on OKX. All bots are native OKX server-side — they run on OKX and do not require a local process.
Preflight
Before running any command, follow ../_shared/preflight.md.
Use metadata.version from this file's frontmatter as the reference for Step 2.
Prerequisites
npm install -g @okx_ai/okx-trade-cli
Check credentials, then set up if missing:
okx config show # shows configured profiles (api_key shows last 4 chars)
okx config init # interactive wizard if not configured
Security: NEVER accept API credentials in chat. Guide users to
okx config initor edit~/.okx/config.tomldirectly.
Credential & Profile Check
Run before every authenticated command.
Step A — Verify credentials
okx config show
If no configuration → stop, guide user to okx config init, wait for completion.
Step B — Determine profile (required)
--profile |
Mode | Funds |
|---|---|---|
live |
实盘 | Real money |
demo |
模拟盘 | Simulated, safe for testing |
Resolution:
- User intent is clear ("real"/"实盘"/"live" →
live; "test"/"模拟"/"demo" →demo) → use it, inform user - No explicit declaration → check conversation context for previous profile → use it if found
- Nothing found → ask: "Live (实盘) or Demo (模拟盘)?" — wait before proceeding
After every command: append [profile: live] or [profile: demo]
Handling 401 Errors
Stop immediately. Guide user to update ~/.okx/config.toml with their editor. Verify with okx config show before retrying.
Skill Routing
| Need | Skill |
|---|---|
| Market data, prices, depth | okx-cex-market |
| Account balance, positions, fees | okx-cex-portfolio |
| Regular spot/swap/futures orders | okx-cex-trade |
| Grid / DCA bots | okx-cex-bot (this skill) |
Command Index
Grid Bot
| Command | Type | Description |
|---|---|---|
okx bot grid create |
WRITE | Create a grid bot (spot or contract) |
okx bot grid stop |
WRITE | Stop a grid bot |
okx bot grid orders |
READ | List active or history grid bots |
okx bot grid details |
READ | Grid bot details + PnL |
okx bot grid sub-orders |
READ | Individual grid fills or pending orders |
DCA Bot (Spot & Contract)
| Command | Type | Description |
|---|---|---|
okx bot dca create |
WRITE | Create a DCA (Martingale) bot (spot or contract) |
okx bot dca stop |
WRITE | Stop a DCA bot (spot or contract) |
okx bot dca orders |
READ | List active or history DCA bots (default: contract_dca) |
okx bot dca details |
READ | DCA bot details + PnL |
okx bot dca sub-orders |
READ | DCA cycles and orders within a cycle |
Operation Flow
Step 1 — Identify bot type and action
Parse user request → determine module (Grid / DCA) and action (create / stop / list / details).
Step 2 — Execute
READ commands (orders, details, sub-orders): run immediately after profile confirmation.
WRITE commands (create, stop): confirm key parameters with user once before executing.
Step 3 — Verify after writes
- After create → run the corresponding
orderscommand to confirm active - After stop → run
orders --historyto confirm stopped
Key Rules
- Never auto-transfer funds. If balance is insufficient for bot creation, report the shortfall (current available vs required) and ask the user how to proceed: (1) transfer funds manually, (2) reduce size, or (3) cancel.
algoIdis the bot's algo order ID (from create or list output). It is NOT a normalordId. Never fabricate — always obtain from a prior command.algoOrdTypefor grid must match the bot's actual type. Always use the value frombot grid orders— do not infer from user description alone. Mismatch causes error50016.- When operating on existing bots, always list first to get correct IDs, unless the user provides them explicitly.
- TP/SL constraints:
tpTriggerPx/tpRatioandslTriggerPx/slRatioare mutually exclusive pairs.
CLI Command Reference
Grid Bot — Create
okx bot grid create --instId <id> --algoOrdType <type> \
--maxPx <px> --minPx <px> --gridNum <n> \
[--runType <1|2>] \
[--quoteSz <n>] [--baseSz <n>] \
[--direction <long|short|neutral>] [--lever <n>] [--sz <n>] \
[--basePos] [--no-basePos] \
[--tpTriggerPx <px>] [--slTriggerPx <px>] [--tpRatio <ratio>] [--slRatio <ratio>] \
[--algoClOrdId <id>] [--json]
| Param | Required | Default | Description |
|---|---|---|---|
--instId |
Yes | - | Instrument (e.g., BTC-USDT for spot, BTC-USDT-SWAP for USDT-M contract, BTC-USD-SWAP for coin-M contract) |
--algoOrdType |
Yes | - | grid (spot grid) or contract_grid (contract grid, including coin-margined) |
--maxPx |
Yes | - | Upper price boundary |
--minPx |
Yes | - | Lower price boundary |
--gridNum |
Yes | - | Grid levels (2–100) |
--runType |
No | 1 |
1=arithmetic spacing, 2=geometric spacing |
--quoteSz |
Cond. | - | USDT investment — spot grid only (provide quoteSz or baseSz) |
--baseSz |
Cond. | - | Base currency investment — spot grid only |
--direction |
Cond. | - | long, short, or neutral — required for contract grid |
--lever |
Cond. | - | Leverage (e.g., 5) — contract grid only |
--sz |
Cond. | - | Investment margin in USDT (USDT-M) or coin (coin-M) — contract grid only |
--basePos / --no-basePos |
No | true |
Open a base position at creation — contract grid only (ignored for neutral). Use --no-basePos to disable |
--tpTriggerPx |
No | - | Take-profit trigger price (mutually exclusive with --tpRatio) |
--slTriggerPx |
No | - | Stop-loss trigger price (mutually exclusive with --slRatio) |
--tpRatio |
No | - | Take-profit ratio — contract grid only (mutually exclusive with --tpTriggerPx) |
--slRatio |
No | - | Stop-loss ratio — contract grid only (mutually exclusive with --slTriggerPx) |
--algoClOrdId |
No | - | Client-defined algo order ID (1-32 alphanumeric). Unique per user, enables idempotent creation |
Grid Bot — Stop
okx bot grid stop --algoId <id> --algoOrdType <type> --instId <id> \
[--stopType <1|2|3|5|6>] [--json]
--algoIdand--algoOrdTypemust come frombot grid ordersoutput. ThealgoOrdTypemust match the bot's actual type — do not guess.
--stopType |
Behavior |
|---|---|
1 |
Stop + sell/close all positions at market (default) |
2 |
Stop + keep current assets as-is |
3 |
Stop + close at limit prices |
5 |
Stop + partial close |
6 |
Stop without selling (smart arbitrage) |
Grid Bot — List Orders
okx bot grid orders --algoOrdType <type> [--instId <id>] [--algoId <id>] [--history] [--json]
| Param | Required | Default | Description |
|---|---|---|---|
--algoOrdType |
Yes | - | grid (spot), contract_grid (contract), or moon_grid (moon) |
--instId |
No | - | Filter by instrument |
--algoId |
No | - | Filter by algo order ID. NOT a normal trade order ID |
--history |
No | false | Show completed/stopped bots instead of active |
Grid Bot — Details
okx bot grid details --algoOrdType <type> --algoId <id> [--json]
Returns: bot config, current PnL (pnlRatio), grid range, number of grids, state, position info.
Grid Bot — Sub-Orders
okx bot grid sub-orders --algoOrdType <type> --algoId <id> [--live] [--json]
| Flag | Effect |
|---|---|
| (default) | Filled sub-orders (executed grid trades) |
--live |
Pending grid orders currently on the book |
DCA Bot — Create (Spot & Contract)
okx bot dca create --algoOrdType <spot_dca|contract_dca> --instId <id> --direction <long|short> \
--initOrdAmt <n> --maxSafetyOrds <n> --tpPct <ratio> \
[--lever <n>] [--safetyOrdAmt <n>] [--pxSteps <ratio>] [--pxStepsMult <mult>] [--volMult <mult>] \
[--slPct <ratio>] [--slMode <limit|market>] [--allowReinvest] \
[--triggerStrategy <instant|price|rsi>] [--triggerPx <price>] \
[--triggerCond <cross_up|cross_down>] [--thold <threshold>] [--timeframe <timeframe>] [--timePeriod <period>] \
[--algoClOrdId <id>] [--reserveFunds <true|false>] [--tradeQuoteCcy <ccy>] [--json]
| Param | Required | Default | Description |
|---|---|---|---|
--algoOrdType |
Yes | - | spot_dca (Spot DCA) or contract_dca (Contract DCA) |
--instId |
Yes | - | Instrument (e.g., BTC-USDT for spot, BTC-USDT-SWAP for contract) |
--lever |
Cond. | - | Leverage multiplier (e.g., 3). Required for contract_dca |
--direction |
Yes | - | long or short. spot_dca must be long |
--initOrdAmt |
Yes | - | Initial order amount (quote currency) |
--maxSafetyOrds |
Yes | - | Max safety orders, integer [0, 100] (e.g., 3; 0 = no DCA) |
--safetyOrdAmt |
Cond. | - | Safety order amount (quote currency). Required when maxSafetyOrds > 0 |
-- |