关于 derivatives-trading-portfolio-margin
用于处理 Binance Portfolio Margin API 任务的 Skill,涵盖账户数据、转账、杠杆设置、订单和历史记录,面向使用需认证组合保证金接口的 Agent,并返回 JSON。
主要功能
- 01查询账户与持仓
- 02操作保证金和期货订单
- 03设置杠杆与持仓模式
- 04转账、借款和还款
- 05查询交易与收入记录
适用场景
- 01检查组合保证金持仓
- 02提交或撤销期货及保证金订单
- 03查看账户交易和收入记录
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ binance/ binance-skills-hub --skill derivatives-trading-portfolio-margin安装后在 Claude Code 中输入/derivatives-trading-portfolio-margin确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CHANGELOG.mdLICENSE.mdreferences/authentication.md详细介绍
Binance 衍生品交易组合保证金 Skill
使用经过身份验证的 API 端点在 Binance 上提交衍生品交易组合保证金请求。某些端点需要 API key 和 secret key。以 JSON 格式返回结果。
快速参考
| 端点 | 描述 | 必需 | 可选 | 身份验证 |
|---|---|---|---|---|
/papi/v1/balance (GET) | 账户余额(USER_DATA) | 无 | asset, recvWindow | 是 |
/papi/v1/account (GET) | 账户信息(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/bnb-transfer (POST) | BNB 转账(TRADE) | amount, transferSide | recvWindow | 是 |
/papi/v1/cm/leverageBracket (GET) | CM 名义价值和杠杆档位(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/repay-futures-switch (POST) | 更改自动偿还期货状态(TRADE) | autoRepay | recvWindow | 是 |
/papi/v1/repay-futures-switch (GET) | 获取自动偿还期货状态(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/cm/leverage (POST) | 更改 CM 初始杠杆(TRADE) | symbol, leverage | recvWindow | 是 |
/papi/v1/cm/positionSide/dual (POST) | 更改 CM 持仓模式(TRADE) | dualSidePosition | recvWindow | 是 |
/papi/v1/cm/positionSide/dual (GET) | 获取 CM 当前持仓模式(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/leverage (POST) | 更改 UM 初始杠杆(TRADE) | symbol, leverage | recvWindow | 是 |
/papi/v1/um/positionSide/dual (POST) | 更改 UM 持仓模式(TRADE) | dualSidePosition | recvWindow | 是 |
/papi/v1/um/positionSide/dual (GET) | 获取 UM 当前持仓模式(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/auto-collection (POST) | 资金自动归集(TRADE) | 无 | recvWindow | 是 |
/papi/v1/asset-collection (POST) | 按资产归集资金(TRADE) | asset | recvWindow | 是 |
/papi/v1/cm/account (GET) | 获取 CM 账户详情(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/cm/income (GET) | 获取 CM 收入历史(USER_DATA) | 无 | symbol, incomeType, startTime, endTime, page, limit, recvWindow | 是 |
/papi/v1/um/order/asyn (GET) | 获取 UM 期货订单历史的下载 ID(USER_DATA) | startTime, endTime | recvWindow | 是 |
/papi/v1/um/trade/asyn (GET) | 获取 UM 期货交易历史的下载 ID(USER_DATA) | startTime, endTime | recvWindow | 是 |
/papi/v1/um/income/asyn (GET) | 获取 UM 期货交易记录历史的下载 ID(USER_DATA) | startTime, endTime | recvWindow | 是 |
/papi/v1/margin/marginInterestHistory (GET) | 获取保证金借款/贷款利息历史(USER_DATA) | 无 | asset, startTime, endTime, current, size, archived, recvWindow | 是 |
/papi/v2/um/account (GET) | 获取 UM 账户详情 V2(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/account (GET) | 获取 UM 账户详情(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/accountConfig (GET) | UM 期货账户配置(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/order/asyn/id (GET) | 根据 ID 获取 UM 期货订单下载链接(USER_DATA) | downloadId | recvWindow | 是 |
/papi/v1/um/symbolConfig (GET) | UM 期货交易对配置(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/um/trade/asyn/id (GET) | 根据 ID 获取 UM 期货交易下载链接(USER_DATA) | downloadId | recvWindow | 是 |
/papi/v1/um/income/asyn/id (GET) | 根据 ID 获取 UM 期货交易记录下载链接(USER_DATA) | downloadId | recvWindow | 是 |
/papi/v1/um/income (GET) | 获取 UM 收入历史(USER_DATA) | 无 | symbol, incomeType, startTime, endTime, page, limit, recvWindow | 是 |
/papi/v1/cm/commissionRate (GET) | 获取用户 CM 佣金费率(USER_DATA) | symbol | recvWindow | 是 |
/papi/v1/um/commissionRate (GET) | 获取用户 UM 佣金费率(USER_DATA) | symbol | recvWindow | 是 |
/papi/v1/margin/maxBorrowable (GET) | 保证金最大可借额度(USER_DATA) | asset | recvWindow | 是 |
/papi/v1/um/apiTradingStatus (GET) | Portfolio Margin UM 交易量化规则指标(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/cm/positionRisk (GET) | 查询 CM 持仓信息(USER_DATA) | 无 | marginAsset, pair, recvWindow | 是 |
/papi/v1/margin/marginLoan (GET) | 查询保证金借款记录(USER_DATA) | asset | txId, startTime, endTime, current, size, archived, recvWindow | 是 |
/papi/v1/margin/maxWithdraw (GET) | 查询保证金最大可提取额度(USER_DATA) | asset | recvWindow | 是 |
/papi/v1/margin/repayLoan (GET) | 查询保证金还款记录(USER_DATA) | asset | txId, startTime, endTime, current, size, archived, recvWindow | 是 |
/papi/v1/portfolio/interest-history (GET) | 查询 Portfolio Margin 负余额利息历史(USER_DATA) | 无 | asset, startTime, endTime, size, recvWindow | 是 |
/papi/v1/um/positionRisk (GET) | 查询 UM 持仓信息(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/portfolio/negative-balance-exchange-record (GET) | 查询用户负余额自动兑换记录(USER_DATA) | startTime, endTime | recvWindow | 是 |
/papi/v1/rateLimit/order (GET) | 查询用户速率限制(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/repay-futures-negative-balance (POST) | 偿还期货负余额(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/leverageBracket (GET) | UM 名义价值和杠杆档位(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/ping (GET) | 测试连通性 | 无 | 无 | 否 |
/papi/v1/cm/userTrades (GET) | CM 账户交易列表(USER_DATA) | 无 | symbol, pair, startTime, endTime, fromId, limit, recvWindow | 是 |
/papi/v1/cm/adlQuantile (GET) | CM 持仓 ADL 分位数估算(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/cm/conditional/allOpenOrders (DELETE) | 取消所有 CM 未平仓条件订单(TRADE) | symbol | recvWindow | 是 |
/papi/v1/cm/allOpenOrders (DELETE) | 取消所有 CM 未平仓订单(TRADE) | symbol | recvWindow | 是 |
/papi/v1/um/conditional/allOpenOrders (DELETE) | 取消所有 UM 未平仓条件订单(TRADE) | symbol | recvWindow | 是 |
/papi/v1/um/allOpenOrders (DELETE) | 取消所有 UM 未平仓订单(TRADE) | symbol | recvWindow | 是 |
/papi/v1/cm/conditional/order (DELETE) | 取消 CM 条件订单(TRADE) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/cm/conditional/order (POST) | 新建 CM 条件订单(TRADE) | symbol, side, strategyType | positionSide, timeInForce, quantity, reduceOnly, price, workingType, priceProtect, newClientStrategyId, stopPrice, activationPrice, callbackRate, recvWindow | 是 |
/papi/v1/cm/order (DELETE) | 取消 CM 订单(TRADE) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/cm/order (PUT) | 修改 CM 订单(TRADE) | symbol, side, quantity, price | orderId, origClientOrderId, priceMatch, recvWindow | 是 |
/papi/v1/cm/order (POST) | 新建 CM 订单(TRADE) | symbol, side, type | positionSide, timeInForce, quantity, reduceOnly, price, priceMatch, newClientOrderId, newOrderRespType, recvWindow | 是 |
/papi/v1/cm/order (GET) | 查询 CM 订单(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/margin/allOpenOrders (DELETE) | 取消保证金账户某交易对的所有未平仓订单(TRADE) | symbol | recvWindow | 是 |
/papi/v1/margin/orderList (DELETE) | 取消保证金账户 OCO 订单(TRADE) | symbol | orderListId, listClientOrderId, newClientOrderId, recvWindow | 是 |
/papi/v1/margin/orderList (GET) | 查询保证金账户 OCO(USER_DATA) | 无 | orderListId, origClientOrderId, recvWindow | 是 |
/papi/v1/margin/order (DELETE) | 取消保证金账户订单(TRADE) | symbol | orderId, origClientOrderId, newClientOrderId, recvWindow | 是 |
/papi/v1/margin/order (POST) | 新建保证金订单(TRADE) | symbol, side, type | quantity, quoteOrderQty, price, stopPrice, newClientOrderId, newOrderRespType, icebergQty, sideEffectType, timeInForce, selfTradePreventionMode, autoRepayAtCancel, recvWindow | 是 |
/papi/v1/margin/order (GET) | 查询保证金账户订单(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/um/conditional/order (DELETE) | 取消 UM 条件订单(TRADE) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/um/conditional/order (POST) | 新建 UM 条件订单(TRADE) | symbol, side, strategyType | positionSide, timeInForce, quantity, reduceOnly, price, workingType, priceProtect, newClientStrategyId, stopPrice, activationPrice, callbackRate, priceMatch, selfTradePreventionMode, goodTillDate, recvWindow | 是 |
/papi/v1/um/order (DELETE) | 取消 UM 订单(TRADE) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/um/order (PUT) | 修改 UM 订单(TRADE) | symbol, side, quantity, price | orderId, origClientOrderId, priceMatch, recvWindow | 是 |
/papi/v1/um/order (POST) | 新建 UM 订单(TRADE) | symbol, side, type | positionSide, timeInForce, quantity, reduceOnly, price, newClientOrderId, newOrderRespType, priceMatch, selfTradePreventionMode, goodTillDate, recvWindow | 是 |
/papi/v1/um/order (GET) | 查询 UM 订单(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/um/feeBurn (GET) | 获取 UM 期货 BNB 销毁状态(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/um/feeBurn (POST) | 切换 UM 期货交易的 BNB 销毁功能(TRADE) | feeBurn | recvWindow | 是 |
/papi/v1/marginLoan (POST) | 保证金账户借款(MARGIN) | asset, amount | recvWindow | 是 |
/papi/v1/margin/order/oco (POST) | 保证金账户新建 OCO(TRADE) | symbol, side, quantity, price, stopPrice | listClientOrderId, limitClientOrderId, limitIcebergQty, stopClientOrderId, stopLimitPrice, stopIcebergQty, stopLimitTimeInForce, newOrderRespType, sideEffectType, recvWindow | 是 |
/papi/v1/margin/repay-debt (POST) | 保证金账户偿还债务(TRADE) | asset | amount, specifyRepayAssets, recvWindow | 是 |
/papi/v1/repayLoan (POST) | 保证金账户还款(MARGIN) | asset, amount | recvWindow | 是 |
/papi/v1/margin/myTrades (GET) | 保证金账户交易列表(USER_DATA) | symbol | orderId, startTime, endTime, fromId, limit, recvWindow | 是 |
/papi/v1/cm/conditional/allOrders (GET) | 查询所有 CM 条件订单(USER_DATA) | 无 | symbol, strategyId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/cm/allOrders (GET) | 查询所有 CM 订单(USER_DATA) | symbol | pair, orderId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/cm/conditional/openOrders (GET) | 查询当前所有 CM 未平仓条件订单(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/cm/openOrders (GET) | 查询当前所有 CM 未平仓订单(USER_DATA) | 无 | symbol, pair, recvWindow | 是 |
/papi/v1/um/conditional/openOrders (GET) | 查询当前所有 UM 未平仓条件订单(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/um/openOrders (GET) | 查询当前所有 UM 未平仓订单(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/margin/allOrders (GET) | 查询保证金账户的所有订单(USER_DATA) | symbol | orderId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/um/conditional/allOrders (GET) | 查询所有 UM 条件订单(USER_DATA) | 无 | symbol, strategyId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/um/allOrders (GET) | 查询所有 UM 订单(USER_DATA) | symbol | orderId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/cm/conditional/orderHistory (GET) | 查询 CM 条件订单历史(USER_DATA) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/cm/orderAmendment (GET) | 查询 CM 订单修改历史(TRADE) | symbol | orderId, origClientOrderId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/cm/conditional/openOrder (GET) | 查询当前 CM 未平仓条件订单(USER_DATA) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/cm/openOrder (GET) | 查询当前 CM 未平仓订单(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/margin/openOrders (GET) | 查询当前保证金账户未平仓订单(USER_DATA) | symbol | recvWindow | 是 |
/papi/v1/um/conditional/openOrder (GET) | 查询当前 UM 未平仓条件订单(USER_DATA) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/um/openOrder (GET) | 查询当前 UM 未平仓订单(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | 是 |
/papi/v1/margin/openOrderList (GET) | 查询保证金账户未平仓 OCO(USER_DATA) | 无 | recvWindow | 是 |
/papi/v1/margin/allOrderList (GET) | 查询保证金账户的所有 OCO(USER_DATA) | 无 | fromId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/um/conditional/orderHistory (GET) | 查询 UM 条件订单历史(USER_DATA) | symbol | strategyId, newClientStrategyId, recvWindow | 是 |
/papi/v1/um/orderAmendment (GET) | 查询 UM 订单修改历史(TRADE) | symbol | orderId, origClientOrderId, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/cm/forceOrders (GET) | 查询用户 CM 强平订单(USER_DATA) | 无 | symbol, autoCloseType, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/margin/forceOrders (GET) | 查询用户保证金强平订单(USER_DATA) | 无 | startTime, endTime, current, size, recvWindow | 是 |
/papi/v1/um/forceOrders (GET) | 查询用户 UM 强平订单(USER_DATA) | 无 | symbol, autoCloseType, startTime, endTime, limit, recvWindow | 是 |
/papi/v1/um/userTrades (GET) | UM 账户交易列表(USER_DATA) | symbol | startTime, endTime, fromId, limit, recvWindow | 是 |
/papi/v1/um/adlQuantile (GET) | UM 持仓 ADL 分位数估算(USER_DATA) | 无 | symbol, recvWindow | 是 |
/papi/v1/listenKey (DELETE) | 关闭用户数据流(USER_STREAM) | 无 | 无 | 否 |
/papi/v1/listenKey (PUT) | 保持用户数据流活跃(USER_STREAM) | 无 | 无 | 否 |
/papi/v1/listenKey (POST) | 启动用户数据流(USER_STREAM) | 无 | 无 | 否 |
参数
常用参数
- asset:
- recvWindow:(例如,5000)
- amount:(例如,1.0)
- transferSide:"TO_UM","FROM_UM"
- symbol:
- autoRepay:默认值:
true;设为false可关闭期货负余额自动还款功能(例如,true) - symbol:
- leverage:目标初始杠杆:1 到 125 之间的整数
- dualSidePosition:"true":对冲模式;"false":单向持仓模式
- asset:
- incomeType:TRANSFER、WELCOME_BONUS、REALIZED_PNL、FUNDING_FEE、COMMISSION、INSURANCE_CLEAR、REFERRAL_KICKBACK、COMMISSION_REBATE、API_REBATE、CONTEST_REWARD、CROSS_COLLATERAL_TRANSFER、OPTIONS_PREMIUM_FEE、OPTIONS_SETTLE_PROFIT、INTERNAL_TRANSFER、AUTO_EXCHANGE、DELIVERED_SETTELMENT、COIN_SWAP_DEPOSIT、COIN_SWAP_WITHDRAW、POSITION_LIMIT_INCREASE_FEE
- startTime:获取资金记录的起始时间戳(毫秒),包含该时间。(例如,1623319461670)
- endTime:获取资金记录的结束时间戳(毫秒),包含该时间。(例如,1641782889000)
- page:
- limit:默认值为 100;最大值为 1000(例如,100)
- startTime:(例如,1623319461670)
- endTime:(例如,1641782889000)
- current:当前查询页码。从 1 开始。默认值:1(例如,1)
- size:默认值:10,最大值:100(例如,10)
- archived:默认值:
false。设为true可获取 6 个月前的归档数据 - downloadId:通过 download id API 获取(例如,1)
- marginAsset:
- pair:
- txId:
POST/papi/v1/marginLoan中的tranId(例如,1) - fromId:获取交易记录的起始交易 ID。默认获取最近的交易记录。(例如,1)
- strategyId:(例如,1)
- newClientStrategyId:(例如,1)
- orderId:(例如,1)
- origClientOrderId:(例如,1)
- orderListId:必须提供
orderListId或listClientOrderId(例如,1) - listClientOrderId:必须提供
orderListId或listClientOrderId(例如,1) - newClientOrderId:用于唯一标识此次取消操作。默认自动生成(例如,1)
- quantity:订单数量(例如,1.0)
- limitClientOrderId:限价单的唯一 ID(例如,1)
- price:(例如,1.0)
- limitIcebergQty:(例如,1.0)
- stopClientOrderId:止损单/止损限价单部分的唯一 ID(例如,1)
- stopPrice:(例如,1.0)
- stopLimitPrice:如果提供此参数,则必须提供 stopLimitTimeInForce。(例如,1.0)
- stopIcebergQty:(例如,1.0)
- amount:
- specifyRepayAssets:用于偿还债务的指定资产列表;可批量添加,多个资产以逗号分隔
- quantity:(例如,1.0)
- reduceOnly:"true" 或 "false"。默认值为 "false"。对冲模式下不可发送。
- price:(例如,1.0)
- priceProtect:"TRUE" 或 "FALSE",默认值为 "FALSE"。用于
STOP/STOP_MARKET或TAKE_PROFIT/TAKE_PROFIT_MARKET订单 - stopPrice:用于
STOP/STOP_MARKET或TAKE_PROFIT/TAKE_PROFIT_MARKET订单。(例如,1.0) - activationPrice:用于
TRAILING_STOP_MARKET订单,默认值为标记价格(例如,1.0) - callbackRate:用于
TRAILING_STOP_MARKET订单,最小值为 0.1,最大值为 5,其中 1 表示 1%(例如,1.0) - quoteOrderQty:(例如,1.0)
- icebergQty:用于通过
LIMIT、STOP_LOSS_LIMIT和TAKE_PROFIT_LIMIT创建冰山订单(例如,1.0) - autoRepayAtCancel:仅当 MARGIN_BUY 或 AUTO_BORROW_REPAY 订单生效时适用。true 表示订单取消后需要偿还该订单产生的债务。默认值为 true(例如,true)
- goodTillDate:对于
GTD的 timeInForce,此参数表示订单取消时间;当timeInforce设为GTD时必须提供;订单时间戳仅保留秒级精度,毫秒部分将被忽略;goodTillDate 时间戳必须大于当前时间加 600 秒,且小于 253402300799000Mode。必须在对冲模式下发送。 - feeBurn:"true":开启手续费折扣;"false":关闭手续费折扣
枚举
- side:BUY | SELL
- stopLimitTimeInForce:GTC | IOC | FOK
- newOrderRespType:ACK | RESULT
- sideEffectType:NO_SIDE_EFFECT | MARGIN_BUY | AUTO_REPAY
- priceMatch:NONE | OPPONENT | OPPONENT_5 | OPPONENT_10 | OPPONENT_20 | QUEUE | QUEUE_5 | QUEUE_10 | QUEUE_20
- positionSide:BOTH | LONG | SHORT
- strategyType:STOP | STOP_MARKET | LIMIT_MAKER | TAKE_PROFIT | TAKE_PROFIT_MARKET | TRAILING_STOP_MARKET
- timeInForce:GTC | IOC | FOK | GTX
- workingType:MARK_PRICE
- type:LIMIT | MARKET
- selfTradePreventionMode:NONE | EXPIRE_TAKER | EXPIRE_BOTH | EXPIRE_MAKER
- autoCloseType:LIQUIDATION | ADL
身份验证
对于需要身份验证的端点,你需要提供 Binance API 凭据。 所需凭据:
- apiKey:你的 Binance API 密钥(用于请求头)
- secretKey:你的 Binance API 密钥(用于签名)
基础 URL:
安全
提供凭据
用户可以通过不同方式提供 Binance API 凭据。Agent 会优先尝试通过前两种方式自动获取凭据;用户也可以明确告知 Agent 已设置凭据或已将凭据存储在 .env 文件中,此时 Agent 应重新读取该文件。使用前两种方式发送 HTTP 请求时,Agent 也无需用户确认。
- 环境变量
仅搜索以下指定变量(绝不输出完整环境变量):
已授权的环境变量
- 主网:
BINANCE_API_KEY和BINANCE_SECRET_KEY - 测试网:
BINANCE_TESTNET_API_KEY和BINANCE_TESTNET_SECRET_KEY
在一次 exec 调用中读取并使用,确保原始密钥不会进入 Agent 的上下文:
KEY="$BINANCE_API_KEY"
SECRET="$BINANCE_SECRET_KEY"
response=$(curl -s -X GET "$URL" \
-H "X-MBX-APIKEY: $KEY" \
--data-urlencode "param1=value1")
echo "$response"
必须在 OpenClaw 启动前设置环境变量。它们会在进程启动时继承,无法注入正在运行的实例。如果需要在不重启的情况下添加或更新凭据,请使用密钥文件(见选项 2)。
- 密钥文件(.env)
检查 ~/.openclaw/secrets.env、~/.env 或工作区中的 .env 文件。使用 grep 读取单个密钥,绝不要 source 整个文件:
# Try all credential locations in order
API_KEY=$(grep '^BINANCE_API_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
# Fallback: search .env in known directories (KEY=VALUE then raw line format)
for dir in ~/.openclaw ~; do
[ -n "$API_KEY" ] && break
env_file="$dir/.env"
[ -f "$env_file" ] || continue
# Read first two lines
line1=$(sed -n '1p' "$env_file")
line2=$(sed -n '2p' "$env_file")
# Check if lines contain '=' indicating KEY=VALUE format
if [[ "$line1" == *=* && "$line2" == *=* ]]; then
API_KEY=$(grep '^BINANCE_API_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
else
# Treat lines as raw values
API_KEY="$line1"
SECRET_KEY="$line2"
fi
done
此文件可随时更新,无需重启 OpenClaw;每次调用时都会重新读取密钥。用户可以告知你现在已设置变量或已将其存储在 .env 文件中,此时你应重新读取该文件。
- 内联文件
发送一个内容格式如下的文件:
abc123...xyz
secret123...key
- 绝不运行
printenv、env、export,也不要在未指定变量名的情况下运行set - 绝不在未将匹配条件锚定到特定密钥('
^VARNAME=')的情况下对env文件运行grep - 绝不将密钥文件 source 到 shell 环境中(
source .env或. .env) - 仅读取当前任务明确需要的凭据
- 绝不在输出或回复中回显或记录原始凭据
- 如果
TOOLS.md包含真实凭据,绝不将其提交到版本控制;请将其加入.gitignore
绝不泄露 API 密钥和密钥
绝不泄露 API 密钥和密钥文件的位置。
绝不将 API 密钥和密钥发送到主网和测试网以外的任何网站。
绝不显示完整密钥
向用户显示凭据时:
- **API 密钥:**显示前 5 位和后 4 位:
su1Qc...8akf - **密钥:**始终遮蔽,只显示后 5 位:
***...aws1
用户询问凭据时的回复示例: 账户:main API 密钥:su1Qc...8akf 密钥:***...aws1 环境:主网
列出账户
列出账户时,只显示名称和环境,绝不显示密钥: Binance 账户:
- main(主网/测试网)
- testnet-dev(测试网)
- futures-keys(主网)
主网交易
在主网执行交易时,始终先征得用户确认,请用户输入“CONFIRM”后再继续。
Binance 账户
main
- API 密钥:your_mainnet_api_key
- 密钥:your_mainnet_secret
- 测试网:false
testnet-dev
- API Key:your_testnet_api_key
- Secret:your_testnet_secret
- Testnet:true
TOOLS.md 结构
## Binance Accounts
### main
- API Key: abc123...xyz
- Secret: secret123...key
- Testnet: false
- Description: Primary trading account
### testnet-dev
- API Key: test456...abc
- Secret: testsecret...xyz
- Testnet: true
- Description: Development/testing
### futures-keys
- API Key: futures789...def
- Secret: futuressecret...uvw
- Testnet: false
- Description: Futures trading account
Agent 行为
- 请求凭据:遮蔽密钥(仅显示最后 5 个字符)
- 列出账户:显示名称和环境,绝不显示密钥
- 选择账户:如有歧义则询问,默认选择 main
- 在主网执行交易时,先要求用户输入“CONFIRM”以继续,并在执行前确认
- 新凭据:提示用户提供名称、环境和签名模式
- 当请求需要签名时,如果请求不是订单,且 API 密钥未注明是
mainnet或testnet密钥,则尝试向不同的基础 URL 发送请求并查看是否成功,无需询问用户。如果成功,则将密钥与对应的环境一并存储。
添加新账户
当用户通过内联文件或消息提供新凭据时:
- 询问账户名称
- 询问:Mainnet、Testnet
- 将凭据存储在
TOOLS.md中,并确认显示已遮蔽的内容
签名请求
对于需要签名的交易端点:
- 先检测密钥类型,在签名前检查密钥的格式。
- 使用所有参数构建查询字符串,包括时间戳(Unix 毫秒)。
- 根据 RFC 3986,使用 UTF-8 对参数进行百分号编码。
- 使用 secretKey 对查询字符串进行签名,签名算法根据账户配置采用 HMAC SHA256、RSA 或 Ed25519。
- 将签名附加到查询字符串。
- 添加
X-MBX-APIKEY标头。
否则,不执行第 4–6 步。
新客户端订单 ID
对于包含 newClientOrderId 参数的端点,该值必须始终以 agent- 开头。如果未提供该参数,则会自动生成由 agent- 和 18 个随机字母数字字符组成的值。如果提供了值,则会为其添加 agent- 前缀。
示例:agent-1a2b3c4d5e6f7g8h9i
User Agent 标头
添加 User-Agent 标头,其值为以下字符串:binance-derivatives-trading-portfolio-margin/1.1.0 (Skill)
实现详情请参阅 references/authentication.md。