Pendle
Pendle(现货):交易Pendle的PT(本金代币)和YT(收益代币)。一个交易所对象对应一条链上的一个钱包:市价单通过Pendle的兑换接口生成交易,限价单挂在Pendle的限价单簿上,交易与订单都由托管者用配置的私钥签名。支持Ethereum、Arbitrum、Base、BNB Chain、HyperEVM、Plasma、Robinhood、Monad、X Layer。
Futures_Boros(期货):交易Pendle Boros的资金费率互换(收益率单位YU):在Arbitrum上的链上订单簿里按固定年化利率买卖各永续交易所(Hyperliquid、Binance、OKX、Gate、KuCoin、Bybit、Lighter等)的资金费率,到期前每小时结算一次。一个交易所对象对应一个钱包的一个Boros子账户(全仓)。下单不花钱包的ETH:托管者用钱包私钥派生一个代理密钥,第一次下单时由钱包签名授权它,之后每笔订单由代理签名、经Pendle中继上链,中继费用从Boros账户的gas余额扣除。
名称与配置
exchange.GetName() | 类型 | 别名 |
|---|---|---|
Pendle | 现货 | Pendle Finance、PT、YT |
Futures_Boros | 期货 | Boros、Pendle Boros、Futures_Boros |
✓ 表示该交易所对象有这个配置项。
| 配置项 | Pendle | Futures_Boros | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| 链 | ✓ | 是 | Ethereum | 钱包和交易所在的链,同时决定默认节点与原生币名称。可选:Ethereum、Arbitrum、Base、BNB Chain、HyperEVM、Plasma、Robinhood、Monad、X Layer | |
| 钱包私钥 | ✓ | 是 | — | EVM钱包私钥(十六进制)。 | |
| 节点地址 | ✓ | 否 | https://ethereum-rpc.publicnode.com,https://eth.drpc.org | RPC节点,多个用逗号分隔,某个节点出错时自动换下一个。选择链时自动填入该链的默认节点。 | |
| 节点认证 | ✓ | 否 | — | 可选。RPC节点需要认证时填写:Header-Name: value形式的请求头,或Basic认证的值。 | |
| 钱包私钥 | ✓ | 是 | — | EVM钱包私钥(十六进制)。托管者用它派生交易代理并签一次授权,充值、提现也用它签名。 | |
| 子账户 | ✓ | 否 | 0 | Boros子账户编号,0为主账户(只有主账户能充值、提现),范围0到254。 | |
| API地址 | ✓ | 否 | https://api-boros.pendle.finance/apis | Boros API地址,一般不用改。 | |
| 节点地址 | ✓ | 否 | https://arb1.arbitrum.io/rpc,https://arbitrum-one-rpc.publicnode.com | Arbitrum RPC节点(充值、提现与读链上nonce用),多个用逗号分隔,某个节点出错时自动换下一个。 |
交易对与合约代码
Pendle(现货)
交易对示例:PT-apyUSD-5NOV2026_apyUSD、YT-apyUSD-5NOV2026_USDC
前半段是PT或YT的名称(含到期日,取自Pendle资产表,见exchange.GetMarkets()),后半段是计价币。价格是1个PT/YT值多少计价币。计价币可以是市场的底层资产、计价资产,或本链上Pendle能兑换的其它代币(市价单经聚合器),也可以写代币合约地址。交易对不转大写,按原样书写。
Futures_Boros(期货)
交易对示例:BTC_USDT、ETH_ETH、BTC_BTC
交易对为标的_保证金币:标的是被交易资金费率的资产,保证金币是市场使用的抵押币(WBTC写作BTC、WETH写作ETH、USD₮0写作USDT,另有BNB、HYPE)。同一个市场名可以有不同保证金币的两个市场(如USDT保证金和BTC保证金的Hyperliquid BTC),用保证金币区分。价格是年化利率的小数(0.065即6.5%),可以为负;数量是YU,以保证金币计(USDT保证金的市场里1个YU = 1 USDT名义本金的资金费)。
合约代码是Boros的市场名换成下划线:资金费率来源_品种_到期日,如HYPERLIQUID_BTC_30OCT2026、BINANCE_ETHUSDT_25DEC2026,完整品种代码如BTC_USDT.HYPERLIQUID_BTC_30OCT2026;Boros原名(HYPERLIQUID-BTC-30OCT2026)也认。可用的市场见exchange.GetMarkets()(只列未到期的)。也可以写Boros的数字市场编号(如206)。
专属IO指令
Pendle(现货)
| 指令 | 参数 | 说明 | 返回值 |
|---|---|---|---|
market | symbol | 查询交易对所在市场:到期时间、距到期年数、当前隐含年化、PT/YT/SY与底层资产、计价资产地址,以及1个计价币值多少计价资产(限价单换算用)。 | {symbol, market, name, kind, expiry, yearsToExpiry, impliedApy, pt, yt, sy, underlying, accounting, accountingPerQuote, chainId}:kind为PT或YT,expiry为毫秒时间戳,各地址为合约地址;计价币不能经SY换算(如经聚合器兑换的USDC)时accountingPerQuote为空值。 |
apy | symbol, price | 把PT/YT价格换算成隐含年化(与限价单同一换算):计价币按SY汇率换成计价资产,PT价格 = (1+年化)^(−距到期年数),YT价格 = 1 − PT价格。计价币须是SY能换算的代币(同限价单),否则报错。 | 隐含年化(0.16即16%);价格无法对应年化(PT不低于1个计价资产、YT不在0到1之间)或市场已到期时报错并返回空值。 |
price | symbol, apy | apy的反向换算:隐含年化换算成以计价币计的价格,计价币的要求同apy。 | 价格。 |
slippage | [ratio] | 市价单的滑点保护比例,范围[0, 0.5),默认0.005(0.5%),写进兑换交易。下单附加参数slippage覆盖本单。不传参数时查询。 | 当前滑点比例。 |
orderExpiry | [seconds] | 限价单默认有效期(秒),范围60到31536000(1年),默认604800(7天),不超过市场到期时间。(详见表下) | 当前有效期(秒)。 |
cancelWait | [seconds] | 撤单时等待撤单交易上链的最长时间,默认30,范围0到600。等待超时exchange.CancelOrder()仍返回true,表示撤单已提交。不传参数时查询。 | 当前等待时间(秒)。 |
approve | [mode] | 授权额度:max无限授权,exact只授权本次所需(默认)。兑换授权给Pendle Router,限价单授权给Pendle限价单合约。不传参数时查询。 | 当前模式。 |
gasMultiplier | [x] | gasLimit = 估算的gas × x,范围1到5,默认1.2。不传参数时查询。 | 当前倍数。 |
receipt | txHash[, waitMs] | 查询交易回执:状态、区块、gas与手续费;可等待到上链(最多10分钟)。查询兑换订单时传订单ID中逗号后面的交易哈希。 | {txHash, status, blockNumber, gasUsed, fee},status为success、reverted或pending;还没上链(pending)时只有txHash和status。 |
base | [url] | 不传参数时返回当前RPC节点地址;传入地址时切换节点(多个用逗号分隔),换节点后第一次请求会核对节点所在的链。 | 切换前的地址。 |
address | — | 钱包地址。 | — |
表中长说明的其余部分:
orderExpiry:下单附加参数expiry单独指定一笔订单的到期时间:秒或毫秒时间戳(是时间点,不是时长),已经过去的报错,晚于市场到期的按市场到期前1分钟。不传参数时查询。
通用指令currency见exchange.IO。
不支持通用指令api(调用时报错并返回空值)。
Futures_Boros(期货)
| 指令 | 参数 | 说明 | 返回值 |
|---|---|---|---|
address | — | 钱包地址(即Boros账户的根地址)。 | — |
agent | — | 查询交易代理:代理地址、子账户、授权到期时间(Unix秒,0为未授权)。只读;第一次下单时自动授权,授权剩不到1天时自动续期。 | {agent, accountId, expiry, approved} |
approveAgent | — | 立即由钱包签名(重新)授权交易代理,有效30天。授权经Pendle中继上链,不花钱包的ETH。代理只能下单、撤单和付gas,不能提现。 | {agent, expiry} |
gasBalance | — | Boros中继的gas余额(美元)。每笔下单、撤单约0.02到0.04美元,余额低于下限时中继拒绝提交。 | 余额(美元),可能为负(欠费)。 |
topUpGas | usd[, currency] | 从全仓账户的现金付gas余额,usd为美元金额(不超过100),currency为用哪种保证金币付,默认USDT。 | {txHash, usd, paid, currency} |
autoTopUp | [enabled[, usd]] | 自动付gas:开启时(默认),gas余额低于0.3美元则下单前在同一批调用里先从该市场保证金币的全仓现金付usd美元(默认1,大于0且不超过20,另加欠费)。enabled须为布尔值(true/false),其它值不改开关。不传参数时查询。 | {enabled, usd} |
slippage | [rate] | 市价单相对标记利率的最大偏离(小数利率,默认0.01即1个百分点),范围0到0.5。下单附加参数slippage覆盖本单。不传参数时查询。 | 当前值。 |
base | [url] | 查询或切换Boros API地址(默认https://api-boros.pendle.finance/apis)。 | 切换前的地址。 |
rpc | [url] | 查询或切换Arbitrum RPC节点(充值、提现与读链上nonce用),多个用逗号分隔。 | 切换前的地址。 |
market | symbol | 市场的原始数据:费率、保证金参数、标记利率、底层资金费率、到期时间等。symbol要写完整品种代码(如BTC_USDT.HYPERLIQUID_BTC_27NOV2026),tick、isolatedTransfer同。 | Boros /v1/markets/by-ids的应答{results, ...}:results[0]是该市场,marketId、imData(symbol、maturity、tickStep、isIsolatedOnly等)、data(markApr、floatingApr、bestBid、bestAsk、nextSettlementTime等,时间为Unix秒)。 |
tick | symbol, rate[, side] | 利率换算成限价tick:做多(buy,默认)取不高于该利率的最近一档,做空(sell)取不低于它的最近一档,与下单的取整相同。 | {market, marketId, tick, rate, tickStep},rate为该tick的实际利率。 |
deposit | currency, amount | 钱包交易:把钱包里的保证金币充进Boros全仓账户(先授权给Boros Router),花钱包的ETH gas,等上链后返回。 | {txHash, currency, amount, accountId} |
withdraw | currency, amount | 钱包交易:申请从全仓账户提现到钱包,只能从主账户(子账户0)提。冷却期(目前约15分钟)后由Boros自动到账;冷却中再申请会叠加数量并重新计时。 | {txHash, currency, amount, note} |
cancelWithdraw | currency | 钱包交易:取消未完成的提现申请。 | {txHash, currency} |
isolatedTransfer | symbol, amount | 在全仓账户与只能逐仓的市场的逐仓账户之间划现金:amount(保证金币)为正时从全仓划进逐仓,为负时划回全仓。经中继上链,扣gas余额。提现只能从全仓提,逐仓里的钱要先划回来。 | {txHash, symbol, amount, account} |
wallet | — | 钱包(不是Boros账户)在Arbitrum上的ETH与各保证金币余额,充值前查看用。 | [{currency, amount, token}],第一项是钱包的ETH(currency为ETH (gas),没有token)。 |
通用指令currency见exchange.IO。
不支持通用指令api(调用时报错并返回空值)。
常用用法
查看PT市场信息,并在价格与隐含年化之间换算(仅Pendle)
javascript
function main() {
var symbol = "PT-apyUSD-11FEB2027_apyUSD"
var m = exchange.IO("market", symbol)
if (!m) {
Log("查询市场失败:", GetLastError())
return
}
Log(m.kind, m.name, "到期:", _D(m.expiry), "距到期年数:", m.yearsToExpiry)
Log("当前隐含年化:", m.impliedApy, "1个计价币折合计价资产:", m.accountingPerQuote)
var t = exchange.GetTicker(symbol)
if (t) {
// 按卖一价买入锁定的年化
Log("卖一:", t.Sell, "隐含年化:", exchange.IO("apy", symbol, t.Sell))
}
// 比当前年化高1个百分点(PT价格更低)的买入价
var price = exchange.IO("price", symbol, m.impliedApy + 0.01)
Log("目标年化对应的价格:", price)
}
按目标年化挂PT限价买单,一段时间没成交就撤单(仅Pendle)
javascript
function main() {
var symbol = "PT-apyUSD-11FEB2027_apyUSD"
exchange.IO("orderExpiry", 86400) // 之后挂的限价单默认1天后过期
exchange.IO("approve", "max") // 付款代币一次授权足额(默认只授权本单所需)
exchange.IO("cancelWait", 60) // 撤单最多等60秒上链
var m = exchange.IO("market", symbol)
var apy = m.impliedApy + 0.01
var price = exchange.IO("price", symbol, apy)
var id = exchange.CreateOrder(symbol, "buy", price, 10) // 数量是PT个数
if (!id) {
Log("挂单失败:", GetLastError())
return
}
Log("限价单:", id, "价格:", price, "年化:", apy)
Sleep(10 * 60 * 1000)
var o = exchange.GetOrder(id)
if (o && o.Status == ORDER_STATE_PENDING) {
// 撤单是一笔链上交易,要花gas
Log("撤单:", exchange.CancelOrder(id), "已成交:", o.DealAmount)
}
}
市价买入PT,再查询交易回执(仅Pendle)
javascript
function main() {
var symbol = "PT-apyUSD-11FEB2027_USDC" // 计价币USDC,经聚合器兑换
exchange.IO("slippage", 0.003) // 滑点保护0.3%
var id = exchange.CreateOrder(symbol, "buy", -1, 20) // 市价买:花20 USDC
if (!id) {
Log("兑换失败:", GetLastError())
return
}
// 兑换的订单ID是“交易对,交易哈希”;最多等2分钟上链
var r = exchange.IO("receipt", id.split(",")[1], 120000)
Log("状态:", r.status, "区块:", r.blockNumber, "gas:", r.gasUsed, "手续费:", r.fee)
if (r.status == "success") {
var o = exchange.GetOrder(id)
Log("买到PT:", o.DealAmount, "均价:", o.AvgPrice)
}
}
检查交易代理与gas余额,余额低时手动补gas(仅Futures_Boros)
javascript
function main() {
Log("钱包:", exchange.IO("address"))
var a = exchange.IO("agent")
if (!a) {
Log("查询代理失败:", GetLastError())
return
}
Log("代理:", a.agent, "子账户:", a.accountId, "已授权:", a.approved)
// 授权剩不到3天时提前续期(钱包签名,经中继上链,不花ETH)
if (!a.approved || a.expiry - Date.now() / 1000 < 3 * 86400) {
var r = exchange.IO("approveAgent")
Log("代理授权到:", _D(r.expiry * 1000))
}
var gas = exchange.IO("gasBalance")
Log("gas余额(美元):", gas)
if (gas < 0.5) {
var t = exchange.IO("topUpGas", 2, "USDT") // 从USDT全仓现金付2美元
Log("已补gas:", t.paid, t.currency, t.txHash)
}
// 下单前自动补gas:保持开启,每次补3美元
Log(exchange.IO("autoTopUp", true, 3))
}
从钱包充值、给只能逐仓的市场划保证金,再申请提现(仅Futures_Boros)
javascript
function main() {
// 钱包(不是Boros账户)在Arbitrum上的余额
var w = exchange.IO("wallet")
for (var i = 0; i < w.length; i++) {
Log(w[i].currency, w[i].amount)
}
// 钱包交易:花钱包的ETH gas,上链后返回
var d = exchange.IO("deposit", "USDT", 50)
if (!d) {
Log("充值失败:", GetLastError())
return
}
Log("已充值", d.amount, d.currency, "到子账户", d.accountId, d.txHash)
// 只能逐仓的市场:正数从全仓划进它的逐仓账户,负数划回全仓
var iso = "BRENTOIL_USDT.HYPERLIQUID_XYZBRENTOIL_18NOV2026"
Log(exchange.IO("isolatedTransfer", iso, 20))
Log(exchange.IO("isolatedTransfer", iso, -20))
// 申请提现(只能从子账户0的全仓提),冷却期后自动到账
var r = exchange.IO("withdraw", "USDT", 30)
Log(r ? r.note : GetLastError())
// 冷却期内可以取消:exchange.IO("cancelWithdraw", "USDT")
}
读取市场的标记利率与底层资金费率,看目标利率会取整到哪一档(仅Futures_Boros)
javascript
function main() {
var symbol = "BTC_USDT.HYPERLIQUID_BTC_27NOV2026"
var r = exchange.IO("market", symbol)
if (!r) {
Log("查询失败:", GetLastError())
return
}
var m = r.results[0]
Log(m.imData.symbol, "市场编号:", m.marketId, "只能逐仓:", m.imData.isIsolatedOnly)
Log("标记利率:", m.data.markApr, "底层资金费率:", m.data.floatingApr,
"下次结算:", _D(m.data.nextSettlementTime * 1000))
// 比标记利率低0.5个百分点挂做多单,先看会取整到哪一档
var t = exchange.IO("tick", symbol, m.data.markApr - 0.005, "buy")
Log("tick:", t.tick, "实际利率:", t.rate, "tickStep:", t.tickStep)
}
函数支持差异
Pendle(现货)
不支持(调用时报错并返回空值):exchange.GetTickers、exchange.GetRecords、exchange.GetTrades、exchange.ModifyOrder、exchange.CreateConditionOrder、exchange.ModifyConditionOrder、exchange.CancelConditionOrder、exchange.GetConditionOrder、exchange.GetConditionOrders、exchange.GetHistoryConditionOrders。
Futures_Boros(期货)
不支持(调用时报错并返回空值):exchange.GetTickers、exchange.SetMarginLevel、exchange.ModifyConditionOrder。
保证金、账户与模拟盘
Futures_Boros(期货)
保证金模式:一般市场用全仓账户(每种保证金币一个,所有同币种市场共用);只能逐仓交易的市场(如部分商品资金费率市场)自动用它的逐仓账户,保证金要先用exchange.IO("isolatedTransfer", ...)划进去,或下单时用附加参数cashIn随单划入。Boros没有杠杆设置:初始保证金按持仓规模、利率与距到期时间计算。
持仓模式:单向持仓。Boros没有只减仓标志:平仓单(closebuy、closesell)是反向订单,数量夹到当前持仓(与持仓相差不到十亿分之一时按持仓的精确数量),没有对应方向的持仓时报错不下单。
账户:exchange.GetAccount()按当前交易对的保证金币取全仓账户(只能逐仓的市场取它的逐仓账户):Balance为可用初始保证金,FrozenBalance为已用初始保证金,Equity为账户净值(现金 + 持仓市值)。exchange.GetPositions()的Price为开仓的固定年化利率,Profit为未实现盈亏,Margin为该持仓占用的初始保证金(取自持仓所在账户,全仓或逐仓;都以保证金币计;已到期待结算的持仓为0)。
注意事项
Pendle(现货)
| 函数 | Pendle交易所的行为 |
|---|---|
| exchange.GetTicker() | 买一、卖一为Pendle实时的可成交兑换率(AMM与限价单撮合后,含手续费),实时兑换率缺失、或市场的SY换算不了计价币(经聚合器兑换的代币,如部分市场的USDC)时改按约1000美元规模询价(吃不下时缩小到100、10美元),Info.source为convert;Info中有impliedApy(隐含年化)和expiry(到期时间,毫秒)。没有24小时统计,High、Low、Open为当前价,Volume为0 |
| exchange.GetDepth() | Pendle订单簿(限价单与AMM合并),按隐含年化0.01%分档并换算成价格。市场的SY换算不了计价币时,整本订单簿按约1000美元的可成交询价缩放(中间价与exchange.GetTicker()一致,档位的相对结构不变;询价拿不到时按两者美元价近似),Info.approximate说明换算方式 |
| exchange.GetMarkets() | 各活跃市场的PT、YT分别对底层资产、计价资产的交易对;Info中有市场地址、到期时间、隐含年化、PT/YT/SY地址 |
| exchange.GetAssets() | 原生币和余额不为0的PT、YT、底层资产等 |
| exchange.CreateOrder() | 价格为-1时立即兑换:市价买入时amount为要花费的计价币数量,卖出为PT/YT数量,按滑点保护。价格大于0时在Pendle限价单簿上挂限价单,amount为PT/YT数量(买单付出amount×价格的计价币):价格按计价资产汇率与距到期年数换算成隐含年化(见exchange.IO("apy", ...))。附加参数放在最后一个对象参数里,如exchange.CreateOrder(symbol, "buy", price, amount, {expiry: 1793836800}):impliedApy直接按年化挂单(买单付出的计价币仍按amount×价格计算),expiry为限价单到期时间(秒或毫秒时间戳,见exchange.IO("orderExpiry", ...)),slippage为市价单本单滑点;参数值不是数字时报错 |
| exchange.GetOrder() | 兑换的订单ID为交易对,交易哈希,状态来自交易回执,本程序发出的兑换5分钟后节点仍查不到时为已撤销;限价单的订单ID为交易对,lo-订单哈希,状态、成交数量、成交均价来自Pendle(部分成交时状态仍为未完成)。Pendle要15到40秒才索引到链上的撤单与成交,在此之前按链上状态及时更新:本程序的撤单交易上链成功后立即显示已撤销;链上已全部成交或已被撤销、且成交数量能核对上时(本程序挂的单从链上成交记录核对)立即显示对应状态。Info.onChain为链上的剩余与已成交数量,Info.indexed为false表示Pendle还没索引到。不是本程序挂的限价单(例如程序重启后),价格按订单的隐含年化与当前汇率折算,为近似值 |
| exchange.GetOrders() | 本钱包挂着的限价单(链上已撤销或已成交的不再列出),以及本程序发出、尚未上链的兑换 |
| exchange.CancelOrder() | 限价单:发送一笔链上撤单交易并等待上链(见exchange.IO("cancelWait", ...))。订单在链上已撤销或已全部成交时直接报错说明是哪一种,不发撤单交易;上一笔撤单交易还在等待上链(5分钟内)时也报错,可用exchange.IO("receipt", ...)查询。兑换交易不能撤单 |
| exchange.GetHistoryOrders() | 本钱包已结束(全部成交、撤销、过期)的限价单,包括链上已结束、Pendle还没索引到的;兑换不在其中 |
限价单只能用Pendle的SY能接受的代币付款或收款(通常是底层资产、计价资产),用了其它计价币会报错并列出可用的代币。挂单前会自动把付出的代币授权给Pendle限价单合约;挂单本身不上链、不花gas,撤单是一笔链上交易。
Pendle接口按计算单位限流(每分钟200个单位:兑换报价每次至少5个、订单簿5个、实时价格1个)。行情查询请保持合理频率,被限流时连接器会等到下一分钟自动重试一次。
Futures_Boros(期货)
| 函数 | Boros交易所的行为 |
|---|---|
| exchange.GetTicker() | Last为最近成交利率,Buy、Sell为最优买卖利率,High、Low、Open取最近24根1小时K线,Volume为24小时成交量(YU);Info中有标记利率markApr、底层资金费率floatingApr、下次结算时间等 |
| exchange.GetDepth() | Boros订单簿(含AMM),按0.0001的利率分档 |
| exchange.GetTrades() | 市场最近的成交;Boros没有成交ID,Id由交易哈希、数量、利率合成 |
| exchange.GetRecords() | 原生周期为5分钟、1小时、1天、1周,其它周期由托管者合成;K线值为利率,无成交的时段沿用上一根收盘 |
| exchange.GetFundings() | 底层永续交易所当前的资金费率:Rate为年化floatingApr折到每个结算周期(1小时),Interval为结算周期。不指定交易对时返回各未到期市场,数据取自最多缓存10分钟的市场列表 |
| exchange.CreateOrder() | 限价单默认GTC(附加参数tif可选ioc、fok、postOnly),利率按对自己有利的方向取整到tick(做多不高于、做空不低于给定利率),并以给定利率作为平均成交利率保护;价格为-1时为市价单:在标记利率±滑点(见exchange.IO("slippage", ...))内IOC成交,没成交任何数量时报错。订单价值须大于10美元(全部平仓除外)。暂停的市场不能下单,只许平仓的市场只接受平仓单。第一次在某个市场下单时自动进入该市场(Boros收一次入场费)。只能逐仓的市场可用附加参数cashIn(保证金币数量)在下单前把现金划进逐仓账户 |
| exchange.GetOrder() | 订单ID为市场编号,订单号;立即全部成交、未挂上订单簿的市价单按本程序下单时记录的成交返回。AvgPrice为订单的tick利率(Boros订单记录不含成交均价),市价单为下单时的保护利率 |
| exchange.CancelOrder() | 经中继撤单,订单已不在挂单中(已成交或已撤销)时返回错误 |
| exchange.ModifyOrder() | 原子地撤旧单、下新单(Boros的idToStrictCancel),返回新订单ID;旧单已不在时整笔失败。新单为GTC限价单,不传价格时沿用旧单的利率,不传数量时取旧单未成交的数量 |
| exchange.CreateConditionOrder() | Boros止盈止损单:利率越过触发价(TpTriggerPrice或SlTriggerPrice,必须大于0)后按市价平仓,只减仓。方向写平仓方向(平多closebuy、平空closesell),数量不小于持仓时平全部持仓;委托价只能是-1(市价),不支持OCO。只用于主账户(子账户0)。止损单接口需要API签名密钥:连接器第一次用到时由交易代理签名自动申请一把(名为fmz-…,7天有效,快过期时换新;名额满时撤掉本代理申请过、最久没用的一把)。新密钥要过一会儿才在Boros的所有网关生效,申请后1分钟内的止损单请求被拒(401)时自动稍等重试,第一次调用可能要多等几秒 |
| exchange.GetConditionOrders() | 等待触发与执行中的止盈止损单;Price为-1,触发价在Condition里;平全部持仓的单Amount为0(数量按触发时的持仓) |
每笔下单、撤单经Pendle中继上链,从Boros账户的gas余额扣费(约0.02到0.04美元,见exchange.IO("gasBalance")),默认余额不足时自动从全仓现金补(见exchange.IO("autoTopUp", ...))。同一交易所对象的提交按顺序进行。
Boros API按计算单位限流:每个IP每分钟200个单位(下单、撤单各5个,市场列表、订单簿各2个,其余多为1个)。被限流时连接器会等到下一个窗口自动重试一次,行情查询请保持合理频率。
风险:资金费率互换的盈亏取决于底层资金费率与成交利率之差,以及隐含利率变动带来的持仓市值变化;保证金不足时会被强平。到期前每小时结算一次资金费。