内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
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.positions", ...)
列出钱包的Meteora DLMM、Raydium CLMM与Orca Whirlpools仓位,给出区间、当前数量、价值与未领手续费。
exchange.IO(k)
exchange.IO(k, filter)
exchange.IO(k, filter, wallet)示例
-
列出本钱包的仓位,标出出了区间的。
javascriptfunction main() { var list = exchange.IO("lp.positions") if (!list) { Log("查询失败:", GetLastError()) return } if (list.length == 0) { Log("没有仓位") return } list.forEach(function(p) { Log(p.id, p.symbol, p.priceLower.toFixed(4), "-", p.priceUpper.toFixed(4), p.inRange ? "区间内" : "出区间", "价值", p.value.toFixed(2), "未领手续费", p.feesValue.toFixed(4)) }) } -
只读查看另一个钱包的SOL/USDC仓位。
javascriptvar WALLET = "" // 填要查看的Solana钱包地址 function main() { if (!WALLET) { Log("请先把WALLET设为一个钱包地址") return } var list = exchange.IO("lp.positions", "SOL_USDC", WALLET) if (!list) { Log("查询失败:", GetLastError()) return } list.forEach(function(p) { Log(p.protocol, p.id, p.inRange ? "区间内" : "出区间", "价值", p.value, "租金", p.rentSol) }) }
返回值
| 类型 | 描述 |
array / 空值 | 仓位数组,每项的通用字段为 |
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 固定为 |
filter | string | 否 | 交易对(如 |
wallet | string | 否 | 另一个钱包地址:只读查看那个钱包的仓位。不传为本交易所对象的钱包。 |
参考
Jupiter exchange.IO exchange.IO("lp.add") exchange.IO("lp.collect") exchange.IO("lp.decrease") exchange.IO("lp.remove") exchange.IO("lp.increase")
备注
通用字段
id为仓位ID,可以直接传给lp.increase、lp.decrease、lp.collect、lp.remove:DLMM为meteora:仓位账户地址,Raydium、Orca为raydium:仓位NFT的mint、orca:仓位NFT的mint。symbol、价格与数量的朝向:给了交易对按交易对;否则稳定币(其次SOL)作计价币。price为现价,priceLower、priceUpper为区间两端的价格,inRange为现价是否在区间内。amountBase、amountQuote为仓位现在的两种代币数量,value为按现价折成计价币的价值;feesBase、feesQuote、feesValue为未领的手续费;rewards为未领的farm奖励[{mint, symbol, amount}]。rentSol为仓位押的租金(关仓时退回);closed为true表示仓位已经没有流动性、手续费与奖励(只剩账户,可以用lp.remove关掉退租金)。
各协议的字段
| 协议 | 另有的字段 | 说明 |
|---|---|---|
| Meteora DLMM | lowerBinId、upperBinId、activeId、binStep、width、feeOwner | width为bin数;liquidity为各bin份额之和;feeOwner不为null的仓位手续费归另一个钱包,不支持操作 |
| Raydium CLMM | tickLower、tickUpper、tick、tickSpacing、nftMint、positionAccount、nftAccount | 未领手续费与奖励按区间内的增长算到当前(奖励按发放速率推到当前时间) |
| Orca Whirlpools | tickLower、tickUpper、tick、tickSpacing、nftMint、positionAccount、nftProgram | 数量按流动性在现价折算,未领手续费与奖励按链上增长估算;Position Bundle里的仓位带bundleMint、bundleIndex,id为orca:仓位账户地址 |
怎样找到仓位
- DLMM仓位用节点的
getProgramAccounts按主人查找;官方公共节点支持,有的节点不支持或限流,这时报错。频繁查询建议在「节点地址」里配置自己的节点。 - Raydium、Orca的仓位是NFT:用
getTokenAccountsByOwner找钱包里数量为1的NFT,再读它们的仓位账户(Orca另列出钱包持有的Position Bundle里的仓位)。NFT在谁的钱包里,仓位就归谁。 - 本进程
lp.add建的仓位与lp.track登记的仓位也一并查(每次按链上主人核对,转走的、已关掉的不列)。
监控与撤退由策略自己做:按inRange、value与feesValue决定调仓、领取或止损。