输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入

生成建仓计划(只读,不花钱):按预算、价格区间和形状算出各仓位的区间、流动性和两种代币的数量,以及钱包够不够、还要换多少币。

exchange.IO(k, params)

示例

  • 在选中的池子里规划一个现价±5%的区间仓位,看需要多少资金、钱包够不够。

    javascript
    function main() { var sel = exchange.IO("lp.select", "ETH", 100, {quote: "USDC"}) var params = {symbol: "ETH_USDC", budget: 100, pool: sel.id, range: {pct: [-5, 5]}} var plan = exchange.IO("lp.plan", params) if (!plan) { Log("计划失败:", GetLastError()) return } var p = plan.positions[0] Log("区间:", p.priceLower, "~", p.priceUpper, "现价:", plan.price) Log("需要:", plan.needBase, "ETH +", plan.needQuote, "USDC") Log("预估日手续费:", plan.estDailyFeesUsd, "美元") if (plan.swap) { Log("建仓前要先", plan.swap.side, plan.swap.amount, plan.swap.currency) } if (plan.shortfall) { Log("钱包不够:", plan.shortfall) } }
  • 三层curve形状:现价附近的仓位最厚。

    javascript
    function main() { var plan = exchange.IO("lp.plan", {symbol: "ETH_USDC", budget: 100, range: {pct: [-5, 5]}, shape: "curve", layers: 3}) plan.positions.forEach(function (p) { Log(p.priceLower, "~", p.priceUpper, "占预算:", p.share) }) if (plan.warning) { Log(plan.warning) } }
  • Aerodrome、Velodrome:不写range即为基础池子(volatile)计划。

    javascript
    function main() { var plan = exchange.IO("lp.plan", {symbol: "ETH_USDC", budget: 100, stable: false}) Log(plan.protocol, plan.pool, "存入:", plan.amountBase, "ETH +", plan.amountQuote, "USDC", "得到LP代币:", plan.lpTokens) }

返回值

类型描述

object / 空值

计划对象,字段说明见备注;可以原样传给lp.simulate、lp.add。参数错误、池子不存在或现价处没有流动性时返回空值并报错。钱包余额不够时照样返回计划,shortfall说明差额。

参数

名称类型必填描述

k

string

是

固定为lp.plan,用于生成建仓计划。

params

object

是

计划参数,如{symbol: "ETH_USDC", budget: 100, range: {pct: [-5, 5]}};symbol、budget必填,集中流动性池子还要range,各参数见备注。

参考

备注

params的各项:

参数说明
symbol交易对,如ETH_USDC;价格按计价币/基础币
budget预算,按计价币计
range价格区间,三种写法:{lower, upper}为价格;{pct: [-5, 5]}为相对现价的百分比;{ticks: [lo, hi]}为tick。都会对齐到池子的tick间距
shape形状:spot(默认)单一区间;curve多层嵌套、现价附近最厚;bidask两侧分段、越远越厚
layerscurve、bidask的层数,默认3,最多20
pool池子ID;不写时按lp.select的规则选池(用到下面的fee、tickSpacing)
fee选池时优先的费率(百万分之一)
slippage价格保护比例,默认0.01(1%),最大0.5
tickSpacing、protocolAerodrome、Velodrome选Slipstream池子时的筛选,protocol默认["slipstream", "slipstream2"]
stableAerodrome、Velodrome基础池子计划:true为stable池子,false为volatile池子,不写两种都看
stakeAerodrome、Velodrome:为true时lp.add建仓后直接质押进gauge

计划对象的字段:

字段说明
params计划参数原样回显
symbol、pool、protocol、fee、tickSpacing、tick、price选中的池子与现价
shape、layers、layersRequested形状、实际层数与请求的层数;实际层数少于请求时另有warning说明原因
budget、budgetUsd预算(计价币、美元)
positions各仓位{tickLower, tickUpper, priceLower, priceUpper, liquidity, amountBase, amountQuote, share},share为该仓位占预算的比例
needBase、needQuote建仓需要的两种代币数量
haveBase、haveQuote钱包里可用的数量
swap建仓前要换的币{side, amount, currency}(sell为卖出基础币,buy为买入基础币),不用换为null
payWith交易对写原生币时,包装币那一侧用哪种币付(如ETH或WETH),其它情况为null
shortfall钱包不够时的说明,够时为null;有它时lp.add报错。内容见下文「资金」
shareOfPool建仓后在现价处占池子流动性的比例
volume24hUsd、estDailyFeesUsd池子24小时成交额、按占池比例估算的日手续费(美元),只是按过去成交外推
slippageBps价格保护(万分之几)

资金:钱包里缺哪种代币就用另一种换(多换1%),swap给出要换的数量,lp.add执行时先下这笔市价单;两种代币加起来都不够预算时shortfall说明差额:计划存入的两种代币数量(与needBase、needQuote相同)、钱包现有数量(haveBase、haveQuote)及按池价折合的计价币价值,缺的那种要用另一种换时,付换币的那一种一共需要多少(存入量加换币成本,含1%余量)、还差多少。例如预算100 USDC、计划存入0.02 ETH + 50 USDC、钱包只有60 USDC时,说明里写买缺的0.02 ETH约需50.5 USDC,USDC一侧共需100.5 USDC(存入50 + 换币50.5),还差40.5 USDC。原生币按当前gas价留出约300万gas的手续费,其余才算可用。V3、Slipstream池子里原生币以包装币参与,交易对写原生币(如ETH_USDC)时,包装币那一侧要么整笔用原生币付、要么整笔用包装币付,不会拼着用:原生币够这一侧全额时用原生币,否则包装币够就用包装币,都不够时按余额多的那种计算,payWith为实际用的币。V4/Infinity CL池子里原生币池子与包装币池子是两种池子,各用各的币。

选池:不写pool时每次都按lp.select的规则重新选池,lp.simulate、lp.add收到计划后也是按其中的params重新计算(用最新池价),可能选到别的池子;要建在看过的那个池子里,就在params里写上pool。Uniswap、PancakeSwap用V4/Infinity CL池子时必须写pool(取自lp.select的{protocol: "v4"}或{protocol: "infinity"})。

区间与形状:区间在现价以上时整个仓位都是基础币,在现价以下时都是计价币,这时estDailyFeesUsd为0,价格回到区间才赚手续费。curve的各层都跨过现价、互不相同且对齐tick间距,优先逐层向内嵌套,排不下时用区间内其它跨现价的组合补齐;双边区间最多能放下「现价以下的合法下沿数×现价以上的合法上沿数」层,超过时给出能放下的最多层数。

Aerodrome、Velodrome:有range时用Slipstream池子;不写range(或pool是基础池子)时为基础池子计划:两种代币按储备比例存入,计划为{params, symbol, pool, protocol, stable, fee, price, budget, budgetUsd, needBase, needQuote, haveBase, haveQuote, amountBase, amountQuote, lpTokens, swap, shortfall, shareOfPool, volume24hUsd, estDailyFeesUsd, slippageBps},lpTokens为预计得到的LP代币数量。stake为true时建仓后直接质押(见exchange.IO("lp.stake"))。