OKX CEX Smart Money CLI
Smart Money leaderboard, trader analytics, position tracking, and aggregated consensus signals.
Preflight
Before running any command, follow ../_shared/preflight.md.
Use metadata.version from this file's frontmatter as the reference for Step 2.
Prerequisites
- Install
okxCLI: - Configure credentials:
- Verify:
okx smartmoney traders-by-filter --limit 5
Security: NEVER accept credentials in chat. Guide users to
okx config initfor setup.
Credential & Profile Check
Run both commands before any authenticated command — the apiKey field from okx auth status --json is the auth-binary's internal state and is always false regardless of whether ~/.okx/config.toml has an API-key profile. okx config show --json is the only authoritative source for API-key presence. The auth method is detected during preflight Step 2 and remembered for the session.
Apply in this order — first match wins:
config show --jsonhas any profile with a non-emptyapi_keyfield → API Key mode. Proceed.- No API-key profile AND
auth status --jsonreturns"status":"logged_in"→ OAuth mode. Proceed. - No API-key profile AND
"status":"pending"— login is in progress, wait for it to complete. - No API-key profile AND
"status":"not_logged_in"— stop, loadokx-cex-authskill and follow login steps, wait for completion.
Smart Money does not support demo mode (leaderboard data is live-only). Always use live mode silently — don't mention it unless there's an error.
- API Key users: use
--profile <live-profile>(the profile withoutdemo=true). - OAuth users: no flag needed (live is the default).
On authentication errors (401 / "Session expired" / "Run okx auth login first"): stop immediately, load okx-cex-auth skill and follow re-authentication steps, then retry.
Skill Routing
Command Index (10 commands, all read-only)
Trader family (6)
Signal / coin family (4)
Time anchor:
signal-trend-by-{filter,trader}take an optional--asOfTime <yyyyMMddHH>(10-digit UTC hour, e.g.2026050100). Returns the latest--limitbuckets ending at that anchor. Omit--asOfTimeto use the current UTC hour.signal-overview-by-{filter,trader}does not expose any time input — handler always uses the current hour.
Multi-coin selection:
signal-overview-by-filterandsignal-overview-by-traderaccept--topInstruments(top-N hottest) or--instCcyList BTC,ETH,SOL(explicit base ccy list). The two flags are mutually exclusive. Passing neither defaults to--topInstruments=20.
⚠ Linear-only scope: All four
signal-*commands aggregate USDT-margined and USDS-margined contracts only. Coin-margined contracts (BTC-USD-SWAP,BTC-USD-DELIVERY,ETH-USD-SWAP, …) are excluded by upstream — a trader's coin-margined positions are silently dropped fromlongNotional/shortNotional/tradersWithPosition. If a trader holds large coin-margined exposure but no linear position on that coin, they will not appear in the signal at all. To see a trader's full position book including coin-margined, runsmartmoney trader-positions --authorId <id>.
Need a trader's full picture? The old
smartmoney tradercomposite command is removed. Runperformance-by-trader,trader-positions, andtrader-orders-historyin parallel.
For full command syntax and parameters, read {baseDir}/references/trader-commands.md and {baseDir}/references/signal-commands.md.
Operation Flow
Step 0 — Credential & Profile Check
Before any authenticated command: see Credential & Profile Check. Always use live mode silently.
Step 1 — Identify intent
Trader discovery / ranking:
- "推荐交易员" / "top traders" / "牛人榜" →
smartmoney traders-by-filterwith sorting/filtering. See{baseDir}/references/trader-commands.md. - "看看某个交易员" / "trader detail" → run
performance-by-trader,trader-positions,trader-orders-historyin parallel (the old compositesmartmoney traderis removed). - "搜索 alice / 小明" / "find trader by nickname" →
smartmoney search-trader --keyword <name>(returns ≤10 matches withauthorIdto feed into other tools). - "verify these authorIds" / 已知 authorId →
smartmoney performance-by-trader --authorIds <id1,id2>(direct lookup;--sortBy/--periodhonored, defaultspnl/90). - "他的当前持仓" / "current positions only" →
smartmoney trader-positions --authorId <id>. - "他的成交记录" / "trade history" →
smartmoney trader-orders-history --authorId <id>(paginated). - "历史平仓" / "closed positions" / "realized PnL track record" →
smartmoney trader-positions-history --authorId <id>(paginated).
Signal analysis:
- "BTC 聪明钱信号" / "smart money signal for BTC" →
smartmoney signal-overview-by-filter --instCcyList BTC. See{baseDir}/references/signal-commands.md. - "BTC ETH SOL 这几个币的信号" / "signals for these specific coins" →
smartmoney signal-overview-by-filter --instCcyList BTC,ETH,SOL. - "这几个交易员看哪些币?" / "consensus among these specific traders" →
smartmoney signal-overview-by-trader --authorIds <id1,id2>(defaults to top-20 hottest among the group, or pass--instCcyList). - "聪明钱关注哪些币?" / "what are smart money trading right now?" →
smartmoney signal-overview-by-filter(defaults to--topInstruments=20). See{baseDir}/references/signal-commands.md. - "信号趋势" / "signal trend over time" →
smartmoney signal-trend-by-filter --instCcy <ccy> [--asOfTime <yyyyMMddHH>] [--limit 24](orsignal-trend-by-trader --authorIds <ids> --instCcy <ccy>for an authorIds-scoped trend).
Step 2 — Execute and present
All commands are READ-only — no confirmation needed. Always pass --json and render results as Markdown tables.
For multi-step workflows (recommend traders then drill down, signal analysis with context), read {baseDir}/references/workflows.md.
Global Notes
- Security: Never ask users to paste API keys or secrets into chat.
- Output: Always pass
--jsonto list/query commands and render results as a Markdown table — never paste raw terminal output. - Network errors: If commands fail with a connection error, prompt user to check VPN:
curl -I https://www.okx.com - Language: Always respond in the user's language.
- Time inputs:
signal-trend-by-{filter,trader}take an optional--asOfTime <yyyyMMddHH>anchor (10-digit UTC hour); omit to use the current UTC hour.--limitcontrols how many buckets are returned ending at that anchor.signal-overview-by-{filter,trader}takes no time input — handler always uses the current hour.
For number/time formatting and response structure conventions, read {baseDir}/references/templates.md.

