输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
Hyperliquid
Lighter
edgeX
Aster
Aevo
Pendle
WOOFi Pro
Uniswap / PancakeSwap
Aerodrome / Velodrome
KyberSwap
1inch
EVM DEX通用指令
Jupiter
OKX DEX
DEX策略示例
预测市场
证券与期货
链上与自定义接入

永续合约DEX(V2接口),合约以USDC计价。私有接口使用edgeX Perps V2的API Key、API Secret、API Passphrase做HMAC认证,下单另用交易签名私钥(SDK Signer)做EIP-712签名;配置交易所对象前需要在edgeX创建这两套凭据并记下账户ID。旧V1方式的配置(只有AccountID和StarkEx私钥Secret Key)不能再用,私有接口会报缺少V2凭据,需要在edgeX新建V2 API凭据后把五项都填上。

名称与配置

exchange.GetName():Futures_EdgeX(期货);别名:EdgeX。

配置项必填说明
AccountID是edgeX账户ID(数字)。
API Key是edgeX Perps V2的API Key,与API Secret、API Passphrase一起用于私有接口的HMAC认证。
API Secret是edgeX Perps V2的API Secret(HMAC密钥)。
API Passphrase是edgeX Perps V2的API Passphrase。
Trading Private Key是edgeX Perps V2 SDK Signer的私钥(十六进制),用于订单的EIP-712签名;IO指令calcOrderHashAndSign也用它做Stark签名。

交易对与合约代码

交易对示例:BTC_USDC、ETH_USDC

edgeX的永续合约都以USDC计价,交易对写作BTC_USDC等,完整代码形如BTC_USDC.swap;写成BTC_USDT、BTC_USD会报错symbol not found: BTCUSDT(或BTCUSD)。exchange.SetCurrency()保留设置时的大小写(exchange.GetCurrency()原样返回),查找合约时不区分大小写;订单、持仓等由交易所返回的数据中品种代码为大写,exchange.GetTicker()返回的Symbol沿用传入或当前设置的写法,建议统一用大写。

合约代码说明
swapUSDC永续合约(唯一的合约类型)。

edgeX只有永续合约,swap以外的合约代码会报错。

专属IO指令
指令参数说明返回值
calcOrderHashAndSignjson旧版(StarkEx)限价单签名,仅供旧策略继续调用:计算LIMIT_ORDER_WITH_FEES的Pedersen哈希,并用配置的TradingPrivateKey做Stark ECDSA签名。(详见表下)128个字符的小写十六进制字符串(r、s各64个字符,不带0x)。
apimethod, path[, params[, raw[, sign]]]直接调用edgeX接口。(详见表下)应答中的data;应答code不是SUCCESS时报错。

表中长说明的其余部分:

  • calcOrderHashAndSign:参数是含10个键的JSON字符串或对象,见注意事项。edgeX V2下单使用EIP-712签名,不接受这个签名,本交易所对象下单也不用它。
  • api:默认用API Key、API Secret、API Passphrase做HMAC签名(需要填写这三项V2凭据);sign传false(也可以直接作为第4个参数)时不签名,只能用于GET。GET的参数编入查询串,其它方法以JSON请求体发送。raw不是请求体而是参数表(JSON对象、JSON字符串或a=1&b=2),非空时整体替换params。不会替调用方对订单做EIP-712签名。

通用指令base、currency见exchange.IO。

常用用法
用api调用公开接口与签名的账户接口
javascript
function main() { // 公开接口:第4个参数传false,不签名(只能用于GET);返回应答中的data var meta = exchange.IO("api", "GET", "/api/v2/public/meta/getMetaData", {}, false) var c = null for (var i = 0; i < meta.contractList.length; i++) { if (meta.contractList[i].contractName == "BTCUSDC") { c = meta.contractList[i] } } var p = {contractId: c.contractId} var t = exchange.IO("api", "GET", "/api/v2/public/quote/getTicker", p, false) Log(c.contractName, "合约ID:", c.contractId, "最新价:", t[0].lastPrice) // 账户接口默认HMAC签名;accountId可以从GetAccount()的Info中取 var accountId = exchange.GetAccount().Info.account.id var params = {accountId: accountId, size: "50"} var orders = exchange.IO("api", "GET", "/api/v2/private/order/getActiveOrderPage", params) Log("挂单数:", orders.dataList.length) }
为旧策略计算旧版(StarkEx)限价单签名
javascript
function main() { // 恰好10个键;超出JavaScript整数精度的accountID写成十进制字符串 var sig = exchange.IO("calcOrderHashAndSign", JSON.stringify({ assetIdSynthetic: "0x4554482d3900000000000000000000", assetIdCollateral: "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5", assetIdFee: "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5", isBuyingSynthetic: true, amountSynthetic: 10000000, amountCollateral: 13020000, amountFee: 6250, nonce: 676432751, accountID: "601416704693633632", expirationTimestamp: 484831 })) // 128个十六进制字符:前64个是r,后64个是s Log("r:", sig.slice(0, 64), "s:", sig.slice(64)) }

函数支持差异

不支持(调用时报错并返回空值):exchange.GetTickers、exchange.GetTrades、exchange.ModifyOrder、exchange.ModifyConditionOrder、exchange.SetMarginLevel。

以回退方式支持:

  • exchange.GetRecords:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周、1月;其它60秒整数倍的周期由托管者用原生K线合成,其余周期(如秒级)不可用(交易所没有成交接口)。

保证金、账户与模拟盘

保证金模式:edgeX为全仓保证金,持仓的MarginLevel为交易所返回的当前杠杆。不支持exchange.SetMarginLevel(),杠杆需要在edgeX上自行设置。

持仓模式:单向(净)持仓。

账户:账户、持仓、订单都按配置的「AccountID」查询。exchange.GetAssets()按币种列出抵押资产,exchange.GetAccount()取当前交易对计价币(USDC)那一行。

注意事项
函数Futures_EdgeX的行为
exchange.GetTicker()行情接口不含买一、卖一,每次调用另取一次盘口填写(共两次请求),盘口请求失败时整个调用失败。Time为盘口应答的服务器时间(exchange.GetDepth()的Time同此),不是行情接口的endTime(24小时统计窗口的结束时间,按15分钟刻度更新),endTime仍可在Info中读取
exchange.GetTickers()不支持:edgeX没有一次返回全部合约行情的接口(行情接口不传合约ID时返回空列表),调用时报错并返回空值。需要多个合约的行情请逐个调用exchange.GetTicker(symbol)(如exchange.GetTicker("BTC_USDC.swap"))
exchange.GetFundings()传入品种(如BTC_USDC.swap)返回该合约一条;不传参数时查询当前计价币的全部可交易永续(如USDC.swap,也可直接传这类范围)。edgeX没有批量资金费率接口,范围查询每个合约发一次请求,一百多个合约耗时十几秒,频繁调用请传具体品种。Rate为交易所的预测费率(下一期),Time为下一次结算时间
exchange.CreateOrder()下单数量以币为单位(1张=1个币)。限价单支持GTC、IOC、FOK和只做Maker;市价单默认为IOC,不能设为只做Maker,并按预言机价格限定成交价格:买单不高于其1.2倍,卖单不低于其0.8倍
exchange.CreateConditionOrder()只支持止盈、止损,不支持OCO(止盈、止损分两张下),按最新成交价触发;委托价为-1(市价)时触发后按市价成交,价格界限按创建时的预言机价格计算。修改条件单需要先撤销再重新创建
exchange.GetOrders()、exchange.GetConditionOrders()不传品种时返回所有合约的挂单。条件单与普通单在同一张订单表里,未触发的条件单也会出现在exchange.GetOrders()的结果中
exchange.GetHistoryOrders()不传limit时最多返回100条;结果中包含已结束的条件单
exchange.GetHistoryConditionOrders()第三个参数沿用旧版语义,不表示条数:大于1e12时视为截止时间(毫秒时间戳),否则忽略;返回条数不受限制。不传since时会翻遍该合约的全部历史订单,超过约1万条时报错,建议传入since

exchange.IO("calcOrderHashAndSign", json)的参数必须恰好包含10个键:assetIdSynthetic、assetIdCollateral、assetIdFee(十六进制)、isBuyingSynthetic(布尔)、amountSynthetic、amountCollateral、amountFee、nonce、accountID、expirationTimestamp(整数,也可以写成十进制字符串;超出JavaScript整数精度的accountID要写成字符串)。缺键或值格式错误报argument X error,多出键报argument error。签名私钥是配置的TradingPrivateKey(按Stark私钥解释),不是旧版账户的Stark私钥;签名随机数是确定性的(RFC 6979),同一输入每次签名相同,与旧托管者签出的值不同但同样有效。