内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
Hyperliquid
Lighter
edgeX
Aster
Aevo
Pendle
WOOFi Pro
Uniswap / PancakeSwap
Aerodrome / Velodrome
KyberSwap
1inch
EVM DEX通用指令
Jupiter
exchange.IO("route", ...)
exchange.IO("token", ...)
exchange.IO("transfer", ...)
exchange.IO("receipt", ...)
exchange.IO("slippage", ...)
exchange.IO("priorityFee", ...)
exchange.IO("dexes", ...)
exchange.IO("rps", ...)
exchange.IO("lp.pools", ...)
exchange.IO("lp.select", ...)
exchange.IO("lp.pool", ...)
exchange.IO("lp.ticks", ...)
exchange.IO("lp.plan", ...)
exchange.IO("lp.simulate", ...)
exchange.IO("lp.add", ...)
exchange.IO("lp.increase", ...)
exchange.IO("lp.decrease", ...)
exchange.IO("lp.collect", ...)
exchange.IO("lp.remove", ...)
exchange.IO("lp.positions", ...)
exchange.IO("pump.*", ...)
exchange.IO("dca.*", ...)
exchange.IO("trigger.*", ...)
exchange.IO("bridge.*", ...)
OKX DEX
DEX策略示例
预测市场
证券与期货
链上与自定义接入
exchange.IO("lp.ticks", ...)
查看池子在一段区间内的流动性分布,按bin或tick分段给出两种代币的数量。
exchange.IO(k, poolId)
exchange.IO(k, poolId, lower, upper)
exchange.IO(k, poolId, lower, upper, step)示例
-
找出Meteora池子现价附近流动性最厚的bin。
javascriptfunction main() { var pool = exchange.IO("lp.select", "SOL", 100, {quote: "USDC", protocol: "meteora"}) if (!pool) { Log("选池失败:", GetLastError()) return } var d = exchange.IO("lp.ticks", pool.id) if (!d) { Log("查询失败:", GetLastError()) return } var ranked = d.segments.map(function(s) { return {seg: s, value: s.amountX * d.price + s.amountY} }) ranked.sort(function(a, b) { return b.value - a.value }) var best = ranked[0] Log("active bin", d.activeId, "价格", d.price, "共", d.segments.length, "个bin") Log("最厚的bin", best.seg.binLower, "价格", best.seg.priceLower, "约", Math.round(best.value), d.symbolY) } -
把Raydium池子现价上下约10%按100个tick(约1%)一段汇总。
javascriptfunction main() { var pool = exchange.IO("lp.select", "SOL", 100, {quote: "USDC", protocol: "raydium"}) if (!pool) { Log("选池失败:", GetLastError()) return } var d = exchange.IO("lp.ticks", "raydium:" + pool.id, pool.tick - 1000, pool.tick + 1000, 100) if (!d) { Log("查询失败:", GetLastError()) return } d.segments.forEach(function(s) { Log(s.current ? "*" : " ", s.priceLower.toFixed(2), "-", s.priceUpper.toFixed(2), s.amountX.toFixed(2), d.symbolX, s.amountY.toFixed(2), d.symbolY) }) }
返回值
| 类型 | 描述 |
object / 空值 | DLMM池子为 |
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
poolId | string | 是 | 池子地址,写法同 |
lower | number | 否 | 区间下沿:DLMM为bin号,Raydium、Orca为tick。不传 |
upper | number | 否 | 区间上沿,单位同 |
step | number | 否 | 每段的宽度:DLMM为bin数(默认1),Raydium、Orca为tick数(默认一个tick间距)。 |
参考
备注
各协议的区间与分段
| 协议 | 不给区间时 | 上限 | segments的每一项 |
|---|---|---|---|
| Meteora DLMM | active bin上下各35个bin | 一次1400个bin | {binLower, binUpper, priceLower, priceUpper, amountX, amountY, current} |
| Raydium CLMM | 现价上下约10% | 连同现价一次读200个TickArray、2000段 | {tickLower, tickUpper, priceLower, priceUpper, liquidity, amountX, amountY, current} |
| Orca Whirlpools | 当前tick上下各35个tick间距 | 一次2000个tick间距 | 同Raydium |
- 价格为Y/X(池子自己的顺序,同
lp.pool);amountX、amountY为可读单位;current为true的段含有现价。 - DLMM:active bin里两种代币都有,往上的bin只有X,往下的只有Y;每段的数量是池子里这些bin的实际余额。
- Raydium:区间两端向外对齐到tick间距,按TickArray里已初始化的tick从现价流动性推出每段的流动性与两种代币数量,
liquidity为段内最大的流动性。tick间距为1的池子默认区间有近2000段,可以用step合并。 - Orca:区间两端向外对齐到tick间距,
step向上取整到tick间距;每段给出段首那一格的活跃流动性,以及这份流动性在整段上折算的两种代币数量。