mcpField
A
aicoin-trading

aicoin-trading

github.com/aicoincom其他57542 次安装9 周前更新
代码仓库

关于 aicoin-trading

aicoin-trading 是面向交易操作的 AiCoin skill,通过脚本处理现货和合约订单、平仓及止盈止损,并要求关键操作先展示预览、取得确认。

主要功能

  1. 01脚本执行现货与合约下单
  2. 02订单及平仓须经确认
  3. 03设置杠杆前须取得确认
  4. 04按持仓设置止盈止损
  5. 05支持 8 家交易所

适用场景

  1. 01在支持的交易所提交现货或合约订单
  2. 02查看订单预览后确认执行
  3. 03为已有仓位设置止盈止损
  4. 04查询合约市场信息

MCP 相关

这是供 Agent 使用的 skill,通过命令行脚本操作交易所;输入未说明它提供或管理 MCP 服务。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aicoincom/coinos-skills --skill aicoin-trading

安装后在 Claude Code 中输入/aicoin-trading确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

package.json
lib/
cli.mjs
defaults.json
env-loader.mjs
scripts/
api-key-info.mjs
auto-trade.mjs
exchange.mjs
register.mjs
trade.mjs
verify-order-matrix.mjs

详细介绍

运行脚本:在 SKILL.md 所在目录运行 node scripts/exchange.mjs <action>。三引擎(OpenClaw / Hermes / Claude Code)容器会自动加载 skill,直接 cd 到 skill 目录即可。

AiCoin Trading — 专用于下单

⛔ 铁律(违反任何一条都是严重错误)

  1. 禁止编写代码下单。 不准编写 import ccxt、new ccxt.okx()、fetch("https://...") 或任何自定义代码来下单。所有订单只能通过 node scripts/exchange.mjs create_order 执行。
  2. 禁止自动确认。 create_order / close_position 第一次调用会返回预览(含风险提示),你必须将预览完整展示给用户,等用户回复“确认”或“yes”后,才能第二次调用并添加 "confirmed":"true" 执行。
  3. 禁止修改用户参数。 余额不足就告知用户,不准自动调整数量或杠杆。
  4. 禁止主动平仓。 除非用户明确要求。
  5. 平仓必须使用 close_position。 禁止用 create_order 构建平仓单(容易开出反向单)。
  6. 修改杠杆 / 保证金模式必须先确认。 set_trading_params 和 set_leverage 不是只读操作——它们会更改交易所账户的合约配置,直接影响后续所有订单的保证金占用、爆仓价和强平距离。100x 杠杆和 5x 杠杆的爆仓距离相差 20 倍,用户未明确要求修改前,不准静默设置。调用前必须:用自然语言告知用户你准备将哪个交易所、哪个交易对的杠杆 / margin_mode 从什么改成什么,以及会产生什么影响;等待用户回复“确认”或“yes”后才能执行。

反例 ❌:用户说“开 100x 多 BTC”,你不确认杠杆是否写错,就直接 set_trading_params leverage=100 然后下单——用户可能是口误,想说的是 10x;静默设置 100x 风险极高。 正确 ✅:先回复“100x 杠杆的爆仓距离只有约 0.95%(不计手续费),BTC 一根 5 分钟 K 线就能扫掉。确认是 100x,还是想说 10x?”,等待用户明确回答后再设置。

下单流程(两步,不可跳过)

步骤1: node scripts/exchange.mjs create_order '{"exchange":"okx","symbol":"BTC/USDT:USDT","type":"market","side":"buy","amount":1,"market_type":"swap"}'
→ 返回预览(交易对、方向、数量、价格、杠杆、保证金、风险提示)
→ 你必须把所有字段展示给用户

步骤2: 用户确认后
node scripts/exchange.mjs create_order '{"exchange":"okx","symbol":"BTC/USDT:USDT","type":"market","side":"buy","amount":1,"market_type":"swap","confirmed":"true"}'
→ 实际下单

平仓流程(两步,不可跳过)

平仓必须使用 close_position,禁止用 create_order 手动构建平仓单(容易开出反向单)。

步骤1: node scripts/exchange.mjs close_position '{"exchange":"okx","market_type":"swap"}'
→ 返回所有持仓预览(交易对、方向、张数、盈亏)
→ 展示给用户

步骤2: 用户确认后
node scripts/exchange.mjs close_position '{"exchange":"okx","market_type":"swap","confirmed":"true"}'
→ 市价平掉所有持仓(自动 reduceOnly)

步骤3: 执行后必须验证 + 总结(不可省略)
node scripts/exchange.mjs positions '{"exchange":"okx","market_type":"swap"}'
→ 确认仓位已清空,然后用一句话告诉用户结果(平了什么、盈亏多少)

指定交易对仅平部分仓位:添加 "symbol":"BTC/USDT:USDT"

为什么有步骤 3:close_position 的返回结果有时会被 streaming 截断,用户看不到结果。再查询一次 positions,既能确认平仓成功,也能在最终消息中写明结果,让用户看到。

止盈止损 / 条件单流程(两步,不可跳过)

为已有仓位设置止损 / 止盈,必须使用 set_stop,禁止手动用 create_order 配合 STOP_MARKET 和原始 params。set_stop 会根据交易所的真实持仓自动推导方向、reduceOnly / posSide / positionSide(分别适配币安双向持仓、OKX、Bybit),并验证触发价位于现价的正确一侧——手动构建极易开出反向单或弄错方向。

步骤1: node scripts/exchange.mjs set_stop '{"exchange":"binance","symbol":"HYPE/USDT:USDT","market_type":"swap","stop_loss":63.5,"take_profit":66.5}'
→ 返回预览(持仓方向、触发价、触发后动作、平仓模式、方向校验结果)
→ 你必须把预览展示给用户

步骤2: 用户确认后
node scripts/exchange.mjs set_stop '{"exchange":"binance","symbol":"HYPE/USDT:USDT","market_type":"swap","stop_loss":63.5,"take_profit":66.5,"confirmed":"true"}'
→ 实际挂条件单

步骤3: 执行后复核(不可省略)
node scripts/exchange.mjs stop_orders '{"exchange":"binance","symbol":"HYPE/USDT:USDT","market_type":"swap"}'
→ 确认条件单已挂上,再把结论告诉用户
  • 参数:stop_loss(止损触发价)/ take_profit(止盈触发价)至少提供一个,也可同时提供;只提供单个 trigger_price 时,会根据方向自动归类为止损或止盈。amount 为可选参数,默认覆盖全仓,超过持仓数量时会自动 clamp。side(long/short):当同一交易对同时持有多空两个仓位(双向持仓)时,必须指定此参数,否则 set_stop 会报错并要求你选择方向,绝不会替你猜。
  • 多单:止损价 < 现价,止盈价 > 现价;空单则相反。方向设反会被 set_stop 拦截并报错(防止瞬间触发)。无法获取当前价时默认中止(无法验证方向);确需跳过验证,可传入 "force":true,风险自负。
  • 双向持仓(hedge mode)全自动适配:开仓时自动补充方向参数(币安 positionSide、OKX posSide、Bybit positionIdx),止损 / 止盈 / 平仓时根据真实持仓推导方向——币安 / OKX / Bybit / Bitget / HTX 双向账户均无需手动指定。其中,Bitget / HTX 平仓会由 ccxt 转换为 tradeSide:Close / offset:close(在它们的双向模式下,纯 reduceOnly 会被视为反向开仓,已专门处理);如果无法识别 Bitget 持仓模式,会中止并报错,不会冒险开出反向单。set_stop 设置的止损 / 止盈是交易所条件单 / 算法单(可通过 stop_orders 查询);平仓后可用 cancel_order 一并清除残留条件单。
  • 确认执行前,set_stop 会再次读取持仓,将数量校准为当前仓位;如果确认期间仓位已平掉或反手,会直接报告“持仓已不存在”,而不会挂出无效单。
  • 为什么有步骤 3:在部分交易所(如 OKX),条件单属于算法单 / 委托单,不会出现在普通 open_orders 列表中,只能通过 stop_orders 或交易所 APP 的“条件委托”栏查询。不要用 open_orders 误判“没挂上”。
  • 兜底:ccxt 对不同交易所的条件单细节支持不同(例如币安使用标记价 / 最新价触发、OKX 使用 algo 单)。如果 set_stop 的某项返回失败,如实告知用户失败原因,并建议用户前往交易所 APP 手动设置——不要谎称已经设置成功。
  • 条件单支持矩阵(ccxt 4.5.47 实测):止损 / 止盈 / 触发单在 Binance / OKX / Bybit / Bitget / Gate / HTX 六家 CEX 上全部受支持(分别映射到各交易所的原生条件单)。下单前设有安全网:如果触发价被某交易所静默丢弃(导致订单变为立即成交的市价单),placeOrder 会直接拒绝,不会误下单。每次升级 ccxt 后运行 npm run verify-orders(请求体黄金矩阵),确认行为没有变化。Hyperliquid 使用 trigger,属于边缘情况(USDC,多路由至 aicoin-onchain),以实盘为准。

下单前准备

步骤命令是否需要确认
设置杠杆和保证金模式node scripts/exchange.mjs set_trading_params '{"exchange":"okx","symbol":"BTC/USDT:USDT","leverage":10,"margin_mode":"isolated","market_type":"swap"}'需要(见铁律 #6)
单独设置杠杆node scripts/exchange.mjs set_leverage '{"exchange":"okx","symbol":"BTC/USDT:USDT","leverage":10,"market_type":"swap"}'需要(见铁律 #6)
查询合约信息node scripts/exchange.mjs markets '{"exchange":"okx","market_type":"swap","base":"BTC"}'不需要(只读)

杠杆 / 保证金确认模板(直接照抄并替换数字):

“我准备将 OKX BTC/USDT 永续合约的杠杆改为 {N}x,margin_mode = {isolated/cross}。这会影响此交易对后续所有订单的保证金占用和爆仓距离({N}x 杠杆下,不计手续费的爆仓距离约为 {1/N*100}%)。确认要修改吗?”

确认后再实际调用 set_trading_params / set_leverage。如果用户说“算了”“先别”“我再想想”,不要调用脚本。

其他命令

操作命令
平仓(全部或指定)node scripts/exchange.mjs close_position '{"exchange":"okx","market_type":"swap"}' — 加 "symbol":"BTC/USDT:USDT" 只平单个
止盈止损(给已有仓位挂保护单)node scripts/exchange.mjs set_stop '{"exchange":"binance","symbol":"HYPE/USDT:USDT","market_type":"swap","stop_loss":63.5,"take_profit":66.5}' — 两步确认,见上方「止盈止损流程」
查条件单/算法委托node scripts/exchange.mjs stop_orders '{"exchange":"binance","symbol":"HYPE/USDT:USDT","market_type":"swap"}' — 普通 open_orders 查不到的条件单用这个
取消订单node scripts/exchange.mjs cancel_order '{"exchange":"okx","symbol":"BTC/USDT","order_id":"xxx"}' — 也能取消条件单
存交易所 key(本地,用户在 chat 给了 key 时)node scripts/exchange.mjs save_key '{"exchange":"binance","api_key":"...","api_secret":"..."}' — 写进 ~/.coinos/.env、chmod 600、不回显 secret(OKX/Bitget 还要 "password":"...")。容器内引导用户去 web UI EnvSection,别在 chat 收 key

数量

合约自动换算: amount 一律是用户说的币数量(如 0.01 BTC、1000 DOGE),脚本统一按 amount / contractSize 自动换算成张数 —— 整数也按币数量算(旧版"整数=张数"的约定在 OKX/Gate 等 contractSize≠1 的所会把张数算错几个数量级,已废除)。确实要直接传张数时加 "amount_unit":"contracts"。 用 USDT 金额下单: 当用户说"用10U做多"或"花10 USDT开仓",传 cost=10(合约=USDT保证金金额,按价格+杠杆算张数;现货市价买入=花多少 USDT,按现价反算币数量),不要传 amount。 现货: amount = 币数量;或用 cost 按 USDT 金额买入。

格式: 现货 BTC/USDT,合约 BTC/USDT:USDT,Hyperliquid 用 USDC: BTC/USDC:USDC。

交易所: Binance, OKX, Bybit, Bitget, Gate.io, HTX, Pionex, Hyperliquid。

评论

支持 Markdown