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

Jupiter原生限价单的辅助指令:选择v1或V2接口、查看V2的托管vault、模拟挂单与撤单。

exchange.IO(k)
exchange.IO(k, mode)
exchange.IO(k, action)
exchange.IO(k, params)
exchange.IO(k, params, wallet)

示例

  • 查看接口模式,模拟一张高于现价的SOL卖单(只读)。

    javascript
    function main() { Log("接口模式:", exchange.IO("trigger.api")) var t = exchange.GetTicker("SOL_USDC") if (!t) { Log("行情失败:", GetLastError()) return } var sim = exchange.IO("trigger.simulate", {symbol: "SOL_USDC", side: "sell", price: _N(t.Last * 1.2, 2), amount: 0.5, expiry: Date.now() + 7 * 86400 * 1000}) if (!sim) { Log("参数不合要求:", GetLastError()) return } Log("模拟", sim.ok ? "成功" : "失败", sim.reason || "", "订单账户", sim.order, "付出", sim.makingAmount, "换回", sim.takingAmount) }
  • 模拟通过后挂限价单,查询并撤单。

    javascript
    function main() { var t = exchange.GetTicker("SOL_USDC") var px = _N(t.Last * 0.8, 2) var params = {symbol: "SOL_USDC", side: "buy", price: px, amount: 0.5} var sim = exchange.IO("trigger.simulate", params) if (!sim || !sim.ok) { Log("模拟未通过:", sim ? sim.reason : GetLastError()) return } var id = exchange.CreateOrder("SOL_USDC", "buy", px, 0.5, {tif: "gtc"}) if (!id) { Log("挂单失败:", GetLastError()) return } Log("限价单", id, exchange.GetOrder(id)) Sleep(60 * 1000) Log("撤单:", exchange.CancelOrder(id), GetLastError()) }
  • 配置了API Key时查看V2的vault,必要时先注册。

    javascript
    function main() { var v = exchange.IO("trigger.vault") if (!v) { Log("查询失败(需要API Key或trigger.api为v2):", GetLastError()) return } if (!v.registered) { v = exchange.IO("trigger.vault", "register") } Log("vault", v.vault, "SOL", v.sol) v.tokens.forEach(function(x) { Log(x.symbol || x.mint, x.amount) }) }

返回值

类型描述

string / object / 空值

trigger.api返回当前模式字符串;trigger.vault、trigger.simulate返回对象,字段见备注。需要API Key而没有配置、参数错误、请求失败时返回空值;trigger.simulate的模拟失败不算出错,看返回的ok。

参数

名称类型必填描述

k

string

是

指令名:trigger.api、trigger.vault或trigger.simulate。

mode

string

否

trigger.api的模式:auto、v1或v2;不传为查询。

action

string

否

trigger.vault传register时,钱包还没有vault就先注册一个;不传为查询。

params

object

否

trigger.simulate的挂单参数{symbol, side, price, amount, expiry, slippage},或{cancel: orderId}。

wallet

string

否

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

参考

备注

限价单在哪里

Jupiter的原生限价单(Trigger)不是条件单:用exchange.CreateOrder(symbol, side, price, amount, {tif: "gtc"})(或带同样选项的exchange.Buy、exchange.Sell)挂单,由Jupiter的keeper在价格到达后成交;用exchange.GetOrder()、exchange.GetOrders()、exchange.CancelOrder()、exchange.GetHistoryOrders()查询与撤单,V2单还可以用exchange.ModifyOrder()改价格。下单附加参数expiry为到期时间戳(毫秒),slippage为允许的滑点比例。

exchange.CreateConditionOrder()等条件单函数不支持(Jupiter没有可映射的止盈止损单);在jup.ag等处挂的V2止盈止损、OCO单的每一条腿会作为普通限价单出现在exchange.GetOrders()中,价格为它的美元触发价,方向见Info的triggerCondition。两套接口(v1、V2)的差别、费用与托管风险见Jupiter交易所页的「限价单」一节。

trigger.api

新挂的原生限价单与新建的定投用哪套接口:auto(缺省)为配置了API Key且计价币为USDC或USDT时用Trigger V2(资金存入Jupiter托管的vault),否则用v1(非托管,资金在链上订单账户);v1为一律用v1;v2为一律用V2,计价币不是USDC、USDT时下单报错,没有API Key也照用(Jupiter目前放行,但官方文档要求带Key)。只影响新单:已有订单按订单ID的形状(v1为账户地址,V2为UUID)走对应接口。返回设置后的模式。

trigger.vault

查询本钱包在Trigger V2的托管vault及其余额(需要API Key,或trigger.api为v2)。V2限价单与定投的资金都在这里:挂着的单、过期未取回的单、撤销未取回的单的钱。还没有vault时返回{wallet, registered: false};否则返回{wallet, registered: true, vault, sol, tokens, info},tokens为[{mint, symbol, amount, raw}](symbol只对代币表中的币给出),info为Jupiter的vault信息。

传register时,钱包还没有vault就先注册(只在Jupiter为钱包建托管账户,不发交易、不动钱;已有时原样返回)。第一次V2下单会自动注册,但trigger.simulate、dca.simulate不会,想在首单前模拟就先注册。

trigger.simulate

生成限价单的挂单交易,用节点的simulateTransaction执行(不签名、不广播)。params为{symbol, side, price, amount, expiry, slippage},含义同下单(amount为基础币数量,price为限价);写成{cancel: orderId}时模拟撤销这张v1限价单(订单ID可以带交易对前缀)。

  • v1返回{ok, err, reason, logs, unitsConsumed, wallet, order, makingAmount, takingAmount, priorityFeeLamports}:order为将要新建的订单账户地址,makingAmount、takingAmount为付出、换回的最小单位数量(字符串);失败时reason为原因(付款钱包一个SOL都没有时节点只回err为AccountNotFound,reason为AccountNotFound (the paying wallet has no SOL))。
  • V2模拟的是存入vault的交易,只能用本钱包,返回{ok, err, reason, logs, unitsConsumed, version, wallet, vault, inputMint, inputAmount, triggerPriceUsd, triggerCondition, expiresAt, priorityFeeLamports};钱包还没有vault时报错。V2限价单不能模拟撤销(撤销调用本身就会停止订单)。