输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所

用Jupiter的定投(DCA)分批买入或卖出:创建、列出、撤销与模拟。

exchange.IO(k)
exchange.IO(k, params)
exchange.IO(k, params, wallet)
exchange.IO(k, id)

示例

  • 创建前先模拟:每天买入100 USDC的SOL,共10天(只读)。

    javascript
    function main() { var params = {symbol: "SOL_USDC", side: "buy", total: 1000, numberOfOrders: 10, interval: 86400} var sim = exchange.IO("dca.simulate", params) if (!sim) { Log("参数不合要求:", GetLastError()) return } Log(sim.version, "模拟", sim.ok ? "成功" : "失败", sim.reason || "", "每份", sim.plan.perOrder, "共", sim.plan.numberOfOrders, "份") }
  • 创建定投,查看进度,再撤销。

    javascript
    function main() { var params = {symbol: "SOL_USDC", side: "buy", total: 200, perOrder: 100, interval: 3600, maxPrice: 300} var r = exchange.IO("dca.create", params) if (!r) { Log("创建失败:", GetLastError()) return } Log("已创建", r.version, r.id, "交易", r.signature) Sleep(5 * 60 * 1000) var list = exchange.IO("dca.list", {symbol: "SOL_USDC"}) || [] list.forEach(function(d) { Log(d.id, d.state, "已成交", d.ordersFilled, "/", d.numberOfOrders, "花出", d.spent, "换到", d.received, "均价", d.avgPrice) }) var c = exchange.IO("dca.cancel", r.id) Log("撤销:", c ? JSON.stringify(c) : GetLastError()) }

返回值

类型描述

object / array / 空值

dca.list返回数组,其余返回对象,字段见备注。参数不合要求、余额不足(创建时)、请求或交易失败时返回空值,GetLastError()中有原因;dca.simulate的模拟失败不算出错,看返回的ok。

参数

名称类型必填描述

k

string

是

指令名:dca.create、dca.list、dca.cancel或dca.simulate。

params

object

否

dca.create、dca.simulate的定投参数{symbol, side, total, perOrder, numberOfOrders, interval, minPrice, maxPrice, startAt},见备注;dca.simulate也可以写成{cancel: id}模拟撤销;dca.list为{status, symbol}。

id

string

否

dca.cancel要撤销的定投ID:v1为定投订单账户地址,V2为Jupiter的订单UUID。

wallet

string

否

dca.simulate以另一个钱包为下单人模拟(只读,只适用于v1)。

参考

备注

v1与V2
Recurring v1Trigger V2
何时使用(trigger.api为缺省的auto)没有配置API Key,或计价币不是USDC、USDT配置了API Key且计价币为USDC或USDT
资金存放链上定投订单账户(程序DCA265Vj8a9CEuX1eb1LWRnDT7uK6q1xMipnNyatn23M)Jupiter托管的vault(与V2限价单共用)
定投ID定投订单账户地址订单UUID
最低金额至少2份,每份至少值50美元至少2份,每份至少值10美元
间隔与开始时间任意整数秒60秒到1年;startAt最多30天后
价格区间区间外的一轮跳过按基础币的美元价判断,区间外的一轮顺延到下一个间隔
其它不支持Token-2022代币;Jupiter从换到的币中收0.1%手续费每个钱包最多10个进行中的定投;滑点由Jupiter自动设定;手续费已含在换到的数量中

exchange.IO("trigger.api")同样适用于定投:v1保持Recurring v1,v2强制V2。Jupiter已不再维护Recurring v1(仍可用)。定投不进exchange.GetOrders()等订单函数,只能用dca.list查看。

定投参数
键必填说明
symbol是交易对,如SOL_USDC
side是buy:用计价币分批买入基础币,total、perOrder按计价币计;sell:分批卖出基础币,按基础币计
total是总额,创建时一次存入
perOrder、numberOfOrders二选一每份金额或份数;都给时必须一致,只给perOrder时total必须是它的整数倍
interval是每份的间隔秒数(整数)
minPrice、maxPrice否价格区间(计价币/基础币),见上表
startAt否开始时间戳(毫秒,必须在将来),缺省立即开始

dca.create

返回{id, version, signature, symbol, side, total, perOrder, numberOfOrders, interval, minPrice, maxPrice, startAt, priorityFeeLamports},version为v1或v2。v1:总额存入新建的定投订单账户,signature为创建交易,只等广播、不等上链;下单前在本地检查份数、每份金额(按Jupiter价格接口折算美元)与Token-2022。V2:总额存入vault(存入交易由连接器签名,Jupiter在创建定投时上链,返回时已上链),id为订单UUID,另有vault。

dca.list

列出本钱包的定投(v1在前;配置了API Key或trigger.api为v2时再列V2)。参数{status, symbol}:status为active(缺省,进行中)或history(已结束),symbol只列这个交易对。每项为{id, version, symbol, side, state, total, perOrder, numberOfOrders, ordersFilled, interval, minPrice, maxPrice, spent, received, filledQty, avgPrice, fee, createdAt, updatedAt, openTx, closeTx, info}:

  • state为active、completed或canceled,V2另有pending(存入中)、canceling(已撤销、未取回)、failed(存入失败)。
  • spent为已花出的输入币,received为已换到的输出币,fee为其中被扣的手续费(输出币计;V2为null);filledQty、avgPrice为按基础币折算的成交量与均价;V2行另有nextFillAt;info为Jupiter的原始行。
  • Jupiter收录新建的v1定投有几分钟延迟:这期间本程序刚创建(10分钟内)、链上账户已存在的定投也列在active里,indexed为false,数字取自链上账户(ordersFilled、fee、updatedAt、closeTx为null)。

dca.cancel

撤销一笔进行中的定投,按id的形状分v1、V2(V2要配置API Key或trigger.api为v2)。已成交的轮次不退。

  • v1:剩余的输入币与未提取的输出币退回钱包,只等广播、不等上链;返回{id, version, signature, priorityFeeLamports}。Jupiter还没收录的v1定投(刚创建的几分钟内)只要链上账户属于本钱包也能撤:连接器按定投程序的close_dca指令自己构造撤销交易,先模拟再签名广播,返回另带indexed: false。
  • V2分两步:Jupiter先停止定投并生成取回交易,连接器核对、签名后交给Jupiter上链;返回{id, version, signature, refund, refundCurrency, roundsRemaining, info},signature为取回交易,refund为退回的输入币数量。第二步失败时定投停在canceling,再撤一次即可取回。

dca.simulate

按dca.create的参数生成交易,用节点的simulateTransaction执行(不签名、不广播),用来在下单前检查余额、最低金额等;params写成{cancel: id}时模拟撤销这笔定投。返回{ok, err, reason, logs, unitsConsumed, version, wallet, id, plan, priorityFeeLamports}:ok为模拟是否成功,失败时reason为原因(付款钱包一个SOL都没有时节点只回err为AccountNotFound,reason为AccountNotFound (the paying wallet has no SOL));id为将要新建的定投账户地址;plan为换算后的定投参数。

走V2时模拟的是存入vault的交易,只能用本钱包,结果另有vault、没有id;钱包还没有vault时报错,先用exchange.IO("trigger.vault", "register")注册(不动钱)。V2定投不能模拟撤销(撤销调用本身就会停止定投)。