关于 revx-trading
revx-trading 是通过 `revx` 命令行在 Revolut X 下单、替换和取消订单的技能,支持市价、限价、条件单及止盈止损单;涉及资金的操作须先获用户确认。
主要功能
- 01提交市价单和限价单
- 02创建条件止损单
- 03设置止盈和止损触发价
- 04修改未完成订单
- 05取消未完成订单
适用场景
- 01提交市价或限价交易
- 02设置价格触发订单
- 03为持仓设置退出触发条件
- 04调整或取消现有订单
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ revolut-engineering/ revolut-x-api --skill revx-trading安装后在 Claude Code 中输入/revx-trading确认已加载。
详细介绍
交易(revx order place / revx order replace / revx order cancel)
下达市价单、限价单、条件单(止损单)和止盈/止损单,替换(修改)未成交订单,取消未成交订单。
需要身份验证。 运行这些命令前,请确保已安装并配置
revx。如果任何命令因身份验证问题而失败,例如出现Auth not configured、No private key found、Authentication failed (401)、Invalid signature、insecure permissions,或在~/.config/revolut-x/下缺少密钥/配置文件,请立即调用revx-auth技能并自行修复问题。 不要中断用户并要求他们运行设置。只有在需要用户亲自完成的步骤(粘贴 API 密钥、在 Revolut X 个人资料中注册公钥)时,才请用户协助。修复后,重试原始命令。
交易对使用带连字符的 BASE-QUOTE 格式:BTC-USD、ETH-EUR、SOL-USD。使用 revx market pairs 检查交易对限制(参见 revx-market 技能)。
order place 和 order replace 支持使用 --json 或 --output json 输出机器可读格式。
Claude 的行为说明
必须获得用户确认
没有用户明确确认,绝不执行 revx order place、revx order replace 或 revx order cancel。 这些命令会动用真实资金。
运行任何订单命令前,先向用户提供确认摘要:
待下达订单:
- 交易对:BTC-USD
- 方向:买入
- 类型:限价单 @ $95,000
- 数量:0.001 BTC
是否继续?
对于条件单和止盈/止损单,在摘要中包含触发详情:
待下达订单:
- 交易对:BTC-USD
- 方向:卖出
- 类型:条件单 — 价格达到 $100,000 时触发,随后以市价卖出 0.001 BTC
是否继续?
只有在用户明确同意后(例如“是”“继续”“执行”),才能执行。
对于 revx order cancel --all,请提醒用户这会取消所有未成交订单,并征得确认。
缺少参数时——务必询问,绝不猜测
所有必需参数都必须由用户提供。如果缺少任何参数,请先询问,再构建命令。
每种订单都需要以下参数:
- 交易对 — 哪个交易对?(例如,
BTC-USD) - 方向 — 买入还是卖出?
- 数量 — 下单多少?(基础货币使用
--qty,计价货币使用--quote;止盈/止损单仅接受--qty) - 订单类型 — 市价单(
--market)、限价单(--limit <price>)、条件单(--conditional)还是止盈/止损单(--tp/--sl)?
不同订单类型的额外要求:
- 条件单还需要触发价格。也可以指定触发限价。
- 止盈/止损单至少需要
--tp <price>/--sl <price>其中之一。触发方向会根据买卖方向自动确定——绝不要传入触发方向。
绝不要擅自假定这些参数的默认值。 如果用户说“买点 BTC”,请询问:
- 买多少?(以 BTC 数量或美元金额计)
- 下市价单还是限价单?(如果是限价单,价格是多少?)
除非用户提出要求,否则可以省略可选标志(--post-only)。
下单
# Market order (buy 0.001 BTC at best price)
revx order place BTC-USD buy --qty 0.001 --market
# Limit order (buy 0.001 BTC at $95,000 or better)
revx order place BTC-USD buy --qty 0.001 --limit 95000
# Post-only limit (maker only, cancelled if would take)
revx order place BTC-USD buy --qty 0.001 --limit 95000 --post-only
# Limit order with time in force (immediate-or-cancel)
revx order place BTC-USD buy --qty 0.001 --limit 95000 --time-in-force ioc
# Quote-sized order (buy $500 worth of BTC at market)
revx order place BTC-USD buy --quote 500 --market
参数: <symbol> <side>
symbol:采用BASE-QUOTE格式(例如,BTC-USD、ETH-EUR)side:buy或sell(不区分大小写)
标志:
| 标志 | 说明 |
|---|---|
--qty <amount> | 基础货币的数量(例如,BTC 为 0.001) |
--quote <amount> | 报价货币的数量(例如,USD 为 500) |
--market | 市价单(除非选择其他订单类型,否则必填) |
--limit <price> | 限价(除非选择其他订单类型,否则必填) |
--time-in-force <value> | gtc(默认值)或 ioc。仅限价单适用——下单时不接受 fok。 |
--post-only | 仅挂单执行(仅限价单适用) |
--client-order-id <uuid> | 为订单指定自定义 ID,避免重试时重复下单(若未指定则自动生成) |
必须指定 --qty 或 --quote 其中之一(不能同时指定)。
**读取结果:**交易所会返回订单状态,退出代码与该状态对应。使用 --json 时,对于交易所已响应的订单,会输出交易所返回的数据文档,并返回相同的退出代码;失败原因会输出到 stderr。若交易所直接拒绝请求,则仅将错误输出到 stderr。新订单需要几秒钟才会显示,因此请等待后再运行 revx order get 或 revx order fills。
| 状态 | 含义 | 退出代码 |
|---|---|---|
pending_new、new、partially_filled、filled | 已下单 | 0 |
cancelled,市价单或 IOC 订单 | 立即关闭。使用 revx order fills <id> 查看成交情况 | 0 |
cancelled,任何其他订单 | 交易所立即取消了订单。订单可能已部分成交,因此请先运行 revx order get <id> 检查,再重新下单 | 1 |
rejected | 未下单。使用 --post-only 时,通常是因为价格会立即成交 | 1 |
| 任何其他状态 | 已发送。使用 revx order get <id> 检查 | 0 |
**如果未收到回复:**每笔订单都会携带客户端订单 ID;除非通过 --client-order-id 指定,否则该 ID 会自动生成。如果订单可能已到达交易所后连接中断,或者交易所返回服务器错误,命令会以退出代码 1 退出,提示订单可能已下单,并将客户端订单 ID 输出到 stderr。stdout 会保持为空,即使使用 --json 也是如此,因此脚本应自行指定 --client-order-id(UUID)。在执行其他操作前,请先在 revx order open --json 中查找该 ID;如果订单已成交,则在 revx order history --json 中查找。市价单可能需要几分钟才会显示。若要重试,请使用 --client-order-id <that ID> 运行相同的命令:如果第一次下单已成功,交易所会以订单已下单为由拒绝重试,随后 CLI 会提示该 ID 对应的订单已存在,且未创建第二笔订单。切勿不带该 ID 重试,否则可能会创建第二笔订单。如果连接在发送前失败(例如连接被拒绝或 DNS 查询失败),命令会说明原因,且不会下单。对于订单替换,请使用 revx order get <original id> 查看是否已替换:如果原订单仍处于未平仓状态,则说明替换未成功。
价格步长:--limit 或 --price 的值必须是交易对价格步长的倍数(可通过 revx market pairs 查看)。否则 CLI 会在发送前拒绝该值,并给出最接近的有效价格。--qty、--quote、--limit 和 --price 必须为正数,且最多保留 18 位小数。
条件单(止损单)
等待市场价格穿越触发价,然后下达市价单(默认)或限价单(使用 --trigger-limit-price)。每条命令只能指定一种订单类型。
# Stop-market: sell 0.001 BTC when the $100,000 trigger fires
revx order place BTC-USD sell --qty 0.001 --conditional --trigger-price 100000
# Stop-limit: buy 0.001 BTC when the $90,000 trigger fires, then place a limit buy at $89,900
revx order place BTC-USD buy --qty 0.001 --conditional --trigger-price 90000 --trigger-limit-price 89900
# Quote-sized conditional (buy $500 worth of BTC at the $95,000 trigger)
revx order place BTC-USD buy --quote 500 --conditional --trigger-price 95000
标志:
| 标志 | 说明 |
|---|---|
--conditional | 条件单(止损单)类型 |
--trigger-price <price> | 激活订单的价格(必填) |
--trigger-limit-price <price> | 触发后下达的订单限价;省略时按市价执行 |
--qty <amount> / --quote <amount> | 数量 — 必须且只能指定其中一项 |
行为:
--time-in-force和--post-only是限价单标志,不能用于条件单。- 触发后,市价单部分会立即执行(ioc);限价单部分则以 gtc 限价单挂单。
- 触发或取消前,订单会以
conditional类型显示在revx order open中,条件为Trig ≥/≤ <price>。 - 按常规方式使用
revx order cancel <order-id>取消。
止盈 / 止损单
下达挂单,在市场价格达到止盈和/或止损触发价时平仓。必须至少指定 --tp 或 --sl;两者可以同时指定。触发方向根据交易方向自动确定 — 无需传入:
- 卖出止盈/止损(平多仓):价格上涨至或高于
--tp时触发止盈;价格下跌至或低于--sl时触发止损。 - 买入止盈/止损(平空仓):价格下跌至或低于
--tp时触发止盈;价格上涨至或高于--sl时触发止损。
# Sell 0.001 BTC: take profit at $110,000, stop loss at $90,000 (both market on trigger)
revx order place BTC-USD sell --qty 0.001 --tp 110000 --sl 90000
# Take profit only, with a limit price for the triggered leg
revx order place BTC-USD sell --qty 0.001 --tp 110000 --tp-limit 109900
# Stop loss only
revx order place BTC-USD sell --qty 0.001 --sl 90000
# Both legs with limit prices
revx order place BTC-USD sell --qty 0.001 --tp 110000 --tp-limit 109900 --sl 90000 --sl-limit 89900
标志:
| 标志 | 说明 |
|---|---|
--tp <price> | 止盈触发价(必须至少指定 --tp 或 --sl) |
--sl <price> | 止损触发价 |
--tp-limit <price> | 止盈部分的限价;省略时在触发后按市价执行 |
--sl-limit <price> | 止损部分的限价;省略时在触发后按市价执行 |
--qty <amount> | 基础货币数量 — 必填;TP/SL 订单不接受 --quote |
行为:
- TP/SL 订单不接受
--time-in-force和--post-only。 - 订单会以
tpsl类型显示在revx order open中;Conditions 列会显示TP <price>/SL <price>。 - 如果设置了两部分,则先触发的一方生效,另一方会被丢弃。
- 按常规方式使用
revx order cancel <order-id>取消。
替换(修改)订单
就地更新现有的未结订单。URL 与取消订单相同,但使用 PUT。适用于限价单、条件单(止损单)以及止盈/止损单。
# Change limit price
revx order replace <order-id> --price 96000
# Change quantity (amount is recalculated server-side)
revx order replace <order-id> --qty 0.002
# Change quote amount (qty is recalculated server-side)
revx order replace <order-id> --quote 150
# Explicitly allow taker execution (must be set explicitly)
revx order replace <order-id> --allow-taker
# Switch to post-only
revx order replace <order-id> --post-only
# Change time in force
revx order replace <order-id> --time-in-force ioc
# Combine — re-price and re-size
revx order replace <order-id> --price 96000 --qty 0.002
# Replace a conditional (stop) trigger — the whole trigger is replaced
revx order replace <order-id> --trigger-price 100000 --trigger-limit-price 99500
# Change only the trigger limit price → re-pass the whole trigger
revx order replace <order-id> --trigger-price 100000 --trigger-limit-price 99000
# Replace take-profit/stop-loss triggers, or re-size the order only
revx order replace <order-id> --tp 115000 --tp-limit 114900 --sl 90000
revx order replace <order-id> --qty 0.002
# Remove a trigger leg — pass `none` explicitly
revx order replace <order-id> --sl none
行为:
- 只有你传入的字段会更改;其他内容保持不变。
- 只更改
--price时,buy会保留报价金额(其数量会变化),而sell会保留数量。若要保留buy的数量,也要传入--qty <current qty>。如果更改数量,金额会重新计算(反之亦然)。 - 必须显式设置
--allow-taker,不会自动推断。 - 如果替换被拒绝,将不会留下任何订单。 交易所会先取消原订单,因此当替换结果为
rejected,或未使用--time-in-force ioc的替换结果为cancelled时,两个订单都不会处于未结状态,命令将以 1 退出。 - 触发条件会整体替换。 若要更改触发条件中的单个字段(例如仅更改限价),请再次传入整个触发条件。省略限价会将该触发分支切换为市价执行。
- 若要移除触发条件,必须显式传入
none,例如--tp none、--sl none或--trigger-price none。省略该标志则会保持触发条件不变。 --price/--time-in-force/--post-only/--allow-taker适用于限价单,--trigger-price适用于条件单,--tp/--sl适用于止盈/止损单——这些标志组不能混用。- 订单 ID 会更改。 替换后,原订单会关闭,并创建一个具有新
venue_order_id的新订单(响应中会返回该 ID)。原 ID 会作为previous_order_id保留在新订单中。后续取消、替换或查询操作请使用新 ID——旧 ID 将不再有效。
标志:
| 标志 | 说明 |
|---|---|
--price <price> | 新的限价 |
--qty <amount> | 新的基础货币数量 |
--quote <amount> | 新的计价货币数量 |
--client-order-id <uuid> | 替换订单使用的自定义 UUID(若省略则自动生成) |
--time-in-force <value> | gtc 或 ioc。替换时不接受 fok。 |
--post-only | 将执行方式设为 [post_only] |
--allow-taker | 显式将执行方式设为 [allow_taker] |
--trigger-price <price> | 新的条件触发价(none 会移除触发条件) |
--trigger-limit-price <price> | 条件触发的限价(仅与 --trigger-price 一起使用) |
--tp <price> | 新的止盈触发价(none 会移除该分支) |
--tp-limit <price> | 止盈触发的限价(仅与 --tp 一起使用) |
--sl <price> | 新的止损触发价(none 会移除该分支) |
--sl-limit <price> | 止损触发的限价(仅与 --sl 一起使用) |
必须至少指定以下一项:--price、--qty、--quote、--time-in-force、--post-only、--allow-taker、--trigger-price、--tp、--sl。
手续费
Revolut X 会从你收到的资产中扣除手续费,因此手续费所用的货币取决于订单方向:
| 订单 | 你支付 | 你收到 | 扣除手续费所用货币 | 影响 |
|---|---|---|---|---|
| 买入 | 计价货币(例如 USD) | 基础货币(例如 BTC) | 基础货币 | 你按买入数量支付(以计价货币计价的订单会支付全部金额),但实际到账的币会略少。 |
| 卖出 | 基础货币 | 计价货币 | 计价货币 | 全部币都会转出,实际到账的计价货币会略少。 |
- **费率:**挂单的 maker 费率为 0%;立即成交的 taker 费率为 0.09%(包括市价单和价格优于市场价的限价单)。手续费会向上舍入到该货币的最小单位。
- **真实示例,买入(2026 年 10 月 7 日):**以 10 USDC 市价买入 BTC,成交量为 0.00011904 BTC。手续费为 0.00000011 BTC,因此实际到账 0.00011893 BTC,且 10 USDC 全部花出。
- **真实示例,卖出:**卖出 BTC,价值 9.957938 USDC,支付了 0.008963 USDC 手续费,因此实际到账 9.948975 USDC。
- **查看位置:**每笔已成交订单都会报告
total_fee和fee_currency(revx order get <id> --json)。请使用这些值,而不要估算,因为费率可能会变化。
取消订单
revx order cancel <order-id> # Cancel a single order (market, limit, conditional, tpsl)
revx order cancel --all # Cancel all open orders
revx order cancel <order-id> --json # {"cancelled": "<order-id>"}, or {"cancelled": "all"} with --all
错误参考
| 错误 | 原因 | 修复方法 |
|---|---|---|
| 无效的订单参数,或无效的替换订单参数 | CLI 自身的检查在发送前发现了错误值,下方各行列出了每个字段 | 修正列出的字段,例如交易对格式 BTC-USD |
| 请求错误(400),附带交易所的消息 | 交易所拒绝了订单,例如订单数量超出交易对的限制 | 使用 revx market pairs 检查数量和步长 |
| 不是价格步长的倍数 | --limit 或 --price 的精度高于交易对的价格步长 | 使用消息建议的两个价格之一 |
| 余额不足(422) | 资金不足,无法下单 | 检查 revx account balances |
状态为 rejected 或 cancelled,退出码为 1 | 交易所拒绝或关闭了订单 | 几秒后运行 revx order get <id> |
| 未找到(404) | 订单 ID 无效 | 使用 revx order open 验证(参见 revx-account 技能) |
| 速率限制(429) | 请求过多 | 等待 retryAfter 指定的时长 |
相关技能
| 技能 | 用途 |
|---|---|
revx-account | 交易后检查余额、查看订单状态和成交记录 |
revx-market | 交易前检查价格和交易对限制 |
revx-auth | API 密钥设置和通行密钥配置 |
revx-strategy | 自动化网格交易机器人 |