欧易 · API 实操
怎么用欧易 API 创建、查询和停止网格策略
欧易的网格策略有自己的一组接口,路径都在 /api/v5/tradingBot/grid/ 下面,和普通下单的 /api/v5/trade/order 分开。创建网格发 POST /api/v5/tradingBot/grid/order-algo:algoOrdType 填 grid(现货网格)或 contract_grid(合约网格),再给区间最高价 maxPx、最低价 minPx、网格数量 gridNum 和投入数量。请求成功会拿回一个 algoId(策略订单 ID),后面查状态、改参数、停止,全靠这个 ID。
停止发 POST /api/v5/tradingBot/grid/stop-order-algo,stopType 必填:现货网格 1 是卖出交易币、2 是不卖;合约网格 1 是市价全平、2 是停止不平仓。网格是在启动中、运行中、等信号还是已经停了,看未完成列表、历史列表和详情这三个 GET 接口返回的 state。
欧易网格交易 API 有哪些接口,限速多少
这组接口在 API 文档左侧目录「撮合交易 → 网格交易」下。创建、查询、修改、停止要用到的是下表 13 个,限速都是 20 次/2s。创建和立即触发两个接口按「User ID + Instrument ID」计数,同一个账户换一个交易对就是新的一份额度;其余 11 个只按 User ID 计,账户里所有网格共用。目录里这一节往下还有「调整保证金计算」「调整保证金」「加仓」等接口。
| 接口 | 做什么 | 适用 | 限速规则 |
|---|---|---|---|
| POST /api/v5/tradingBot/grid/order-algo | 创建网格 | 现货、合约 | User ID + Instrument ID |
| POST /api/v5/tradingBot/grid/amend-algo-basic-param | 改区间和网格数 | 现货、合约 | User ID |
| POST /api/v5/tradingBot/grid/amend-order-algo | 改止盈止损、停止条件 | 现货、合约 | User ID |
| POST /api/v5/tradingBot/grid/stop-order-algo | 停止网格,每次最多 10 个 | 现货、合约 | User ID |
| POST /api/v5/tradingBot/grid/close-position | 给已停止未平仓的网格平仓 | 合约 | User ID |
| POST /api/v5/tradingBot/grid/cancel-close-order | 撤销网格平仓单 | 合约 | User ID |
| POST /api/v5/tradingBot/grid/order-instant-trigger | 网格策略立即触发 | 现货、合约 | User ID + Instrument ID |
| GET /api/v5/tradingBot/grid/orders-algo-pending | 未完成网格列表 | 现货、合约 | User ID |
| GET /api/v5/tradingBot/grid/orders-algo-history | 历史网格列表 | 现货、合约 | User ID |
| GET /api/v5/tradingBot/grid/orders-algo-details | 单个网格详情 | 现货、合约 | User ID |
| GET /api/v5/tradingBot/grid/sub-orders | 网格挂出的子订单 | 现货、合约 | User ID |
| GET /api/v5/tradingBot/grid/positions | 网格持仓 | 合约 | User ID |
| POST /api/v5/tradingBot/grid/withdraw-income | 提取利润 | 现货 | User ID |
这些都是要带 API Key 签名的私有接口,请求头怎么拼按官方 API 文档的签名说明来。还没用 API 下过一笔普通单的,从 欧易 API 量化入门:创建模拟盘 Key、下单与撤单核验 开始;脚本里同时还有普通下单在跑的,那部分额度见 欧易 API 限速是多少?下单频率怎么算、报 50061 怎么办。
创建网格策略的请求参数怎么填
现货网格和合约网格共用下面这些参数:
| 参数 | 必填 | 含义与取值 |
|---|---|---|
| instId | 是 | 产品 ID,文档的现货示例用 BTC-USDT,合约示例用 BTC-USDT-SWAP |
| algoOrdType | 是 | grid:现货网格;contract_grid:合约网格 |
| maxPx / minPx | 是 | 区间最高价 / 区间最低价 |
| gridNum | 是 | 网格数量 |
| runType | 否 | 网格类型,1:等差,2:等比;不传按等差 |
| tpTriggerPx / slTriggerPx | 否 | 止盈触发价 / 止损触发价 |
| algoClOrdId | 否 | 自定义策略 ID,字母与数字组合,区分大小写,长度 1 到 32 位 |
| tag | 否 | 订单标签 |
| triggerParams | 否 | 启动、停止条件,下一节单独讲 |
现货、合约再各自多出几项:
| 参数 | 用在 | 含义与取值 |
|---|---|---|
| quoteSz | 现货 | 计价币投入数量,和 baseSz 至少给一个 |
| baseSz | 现货 | 交易币投入数量,和 quoteSz 至少给一个 |
| tradeQuoteCcy | 现货 | 用于交易的计价币种,不填就用 instId 的计价币 |
| sz | 合约,必填 | 投入保证金,单位 USDT |
| direction | 合约,必填 | long:做多;short:做空;neutral:中性 |
| lever | 合约,必填 | 杠杆倍数 |
| basePos | 合约 | 是否开底仓,默认 false,中性网格忽略这一项 |
| tpRatio / slRatio | 合约 | 止盈比率 / 止损比率,0.1 代表 10% |
文档给这些参数标的类型,除了 basePos 是 Boolean、triggerParams 是对象数组,其余全是 String。所以请求体里写的是 "gridNum": "10",价格、数量、杠杆也一样加引号。带单员另有一个 profitSharingRatio(分润比例),只能填 0、0.1、0.2、0.3。
把文档的现货示例去掉触发条件,就是一笔最简单的现货网格:
POST /api/v5/tradingBot/grid/order-algo
{
"instId": "BTC-USDT",
"algoOrdType": "grid",
"maxPx": "5000",
"minPx": "400",
"gridNum": "10",
"runType": "1",
"quoteSz": "25"
}
合约网格把 quoteSz 换成 sz,再补上方向和杠杆两个必填项。下面同样照文档示例改写:
POST /api/v5/tradingBot/grid/order-algo
{
"instId": "BTC-USDT-SWAP",
"algoOrdType": "contract_grid",
"maxPx": "5000",
"minPx": "400",
"gridNum": "10",
"runType": "1",
"sz": "200",
"direction": "long",
"lever": "2"
}
两个示例的 runType 都照文档传 1,也就是等差网格。5000、400、25、200 都是文档里的演示值,不是参数建议,真发请求前换成你按当前行情定的区间和金额。区间、网格数怎么定,见 欧易网格机器人怎么设置:区间、格数、每格资金怎么定。
拿到响应,外层 code 看完再看 data 里每一项的 sCode:0 代表成功,同一项里的 algoId 就是这个网格的策略订单 ID,马上存下来;sCode 不是 0,失败原因写在 sMsg。请求里传过 algoClOrdId 的,响应里有同名字段,可以拿它和本地记录对账。
triggerParams 怎么设置网格的启动和停止条件
triggerParams 是一个数组,每一项是一条条件。triggerAction 填 start(网格启动)或 stop(网格停止);triggerStrategy 填 instant(立即触发,默认值)、price(价格触发)或 rsi(RSI 指标触发)。每条都可以加 delaySeconds,单位秒,默认 0。
| triggerStrategy | 要一起传的字段 | 取值 |
|---|---|---|
| instant | 无 | — |
| price | triggerPx | 触发价格 |
| rsi | timeframe | K 线种类:3m、5m、15m、30m、1H、4H、1D |
| rsi | thold | 阈值,1 到 100 的整数 |
| rsi | triggerCond | cross_up 上穿、cross_down 下穿、above 上方、below 下方、cross 交叉 |
| rsi | timePeriod | 周期,文档给的取值是 14 |
停止条件里还能放 stopType,只在 triggerAction 为 stop 时生效:现货 1 卖出交易币、2 不卖出交易币;合约 1 停止平仓、2 停止不平仓。
文档的合约示例用了两条:一条 start,30 分钟 K 线、周期 14 的 RSI 与阈值 10 交叉时启动;一条 stop,价格到 1000 时停止,stopType 为 2,停下后不平仓。
"triggerParams":[
{
"triggerAction":"start",
"triggerStrategy":"rsi",
"timeframe":"30m",
"thold":"10",
"triggerCond":"cross",
"timePeriod":"14"
},
{
"triggerAction":"stop",
"triggerStrategy":"price",
"triggerPx":"1000",
"stopType":"2"
}
]
未完成列表的状态里专门有一档 pending_signal(等待触发)。要让策略立即触发,调 POST /api/v5/tradingBot/grid/order-instant-trigger,传 algoId 即可;现货网格还能顺带传 topUpAmt,增加投资额。
用 API 查网格策略的运行状态和停止原因
查状态用三个接口,algoOrdType 都是必填,一次只能查一种:grid 或 contract_grid。现货、合约网格都开着的账户,要各发一次。
- 未完成列表
GET /api/v5/tradingBot/grid/orders-algo-pending?algoOrdType=grid:能按algoId、instId、instType(SPOT、MARGIN、FUTURES、SWAP)过滤;limit最大 100,默认也是 100;翻页用after/before,传的是algoId。 - 历史列表
GET /api/v5/tradingBot/grid/orders-algo-history:参数同上,返回的state只有stopped。 - 详情
GET /api/v5/tradingBot/grid/orders-algo-details?algoId=…&algoOrdType=grid:两个参数都必填,字段比列表多。
| state | 意思 | 出现在 |
|---|---|---|
| starting | 启动中 | 未完成列表、详情 |
| running | 运行中 | 未完成列表、详情 |
| stopping | 终止中 | 未完成列表、详情 |
| pending_signal | 等待触发 | 未完成列表 |
| no_close_position | 已停止未平仓,仅合约网格 | 未完成列表、详情 |
| stopped | 已停止 | 历史列表、详情 |
停掉的网格,原因看 cancelType:0 无,1 手动停止,2 止盈停止,3 止损停止,4 风控停止,5 交割停止,6 信号停止。现货网格另有 stopResult:0 默认,1 市价卖币成功,-1 市价卖币失败。App 里看到网格停了、想对照界面上的说法,读 欧易网格机器人自己停了,是不挂单还是策略终止?。
详情接口多出来的字段里,脚本用得上的有:runPx 启动时价格、singleAmt 单网格买卖量、activeOrdNum 子订单挂单数量、tradeNum 挂单成交次数。现货网格还有 curBaseSz / curQuoteSz(当前持有的交易币和计价币)与 profit(当前可提取利润,单位是计价币)。arbitrageNum 网格套利次数,以及合约网格的 liqPx 预估强平价格、actualLever 实际杠杆倍数、availEq 可用保证金,详情里有,列表接口里也有。时间字段 cTime、uTime 都是毫秒时间戳。未完成列表、历史列表和详情接口都会返回 runType,取值和创建时是同一套,查出来是 1 或 2 也照那张参数表读。
要看网格具体挂了哪些单,用 GET /api/v5/tradingBot/grid/sub-orders,algoId、algoOrdType 和 type 三个必填,type 传 live 查未成交、filled 查已成交,翻页传的是子订单的 ordId。合约网格的持仓用 GET /api/v5/tradingBot/grid/positions,algoOrdType 只能填 contract_grid。
停止网格策略时 stopType 该传 1 还是 2
停止接口的请求体是数组,一次最多停 10 个网格,每一项的 algoId、instId、algoOrdType、stopType 四个字段都必填。文档示例:
POST /api/v5/tradingBot/grid/stop-order-algo
[
{
"algoId":"448965992920907776",
"instId":"BTC-USDT",
"stopType":"1",
"algoOrdType":"grid"
}
]
| 网格类型 | stopType = 1 | stopType = 2 |
|---|---|---|
| 现货网格 grid | 卖出交易币 | 不卖出交易币 |
| 合约网格 contract_grid | 市价全平 | 停止不平仓 |
现货网格传 1,交易币按市价卖出,事后到历史列表或详情里看 stopResult。如果是 -1(市价卖币失败),去交易账户看交易币还在不在,再决定自己怎么卖。只想停掉挂单、币先留着,传 2。
合约网格传 2 要多走一步。两处说明对起来看,传 2 停下的合约网格就处在 no_close_position(已停止未平仓):它还会出现在未完成列表里,而 POST /api/v5/tradingBot/grid/close-position 也只接受这个状态的网格。平仓时 mktClose 传 true 是市价全平;传 false 是部分平仓,这时 sz(单位是张)和 px 都要传。部分平仓会返回一个平仓单 ordId(市价全平时为空),挂出去不想要了,用 POST /api/v5/tradingBot/grid/cancel-close-order 带上 algoId 和 ordId 撤掉。
《合约网格策略常见问答》里还写明,已经停止的策略无法重新运行,也无法加仓;想接着跑,平仓后重新创建一个。帮助中心的现货、合约两篇问答都提到,带单交易员手动停止时只能选按市价卖出(现货)或市价全平(合约)。
网格跑起来以后怎么改区间、加投资、提利润
改区间和网格数用 POST /api/v5/tradingBot/grid/amend-algo-basic-param,algoId、minPx、maxPx、gridNum 四项都必填,只想改网格数也得把区间原样再传一遍。合约网格可以另给 topupAmount;不填或填 "0",修改所需的追加投资会自动追加。返回里的 requiredTopupAmount 是这次修改要补的金额,合约网格还有 maxTopupAmount(最大追加投资金额)。
帮助中心现货、合约两篇问答对「运行中修改参数」的说明一致:修改核心参数后,策略撤掉现有挂单,按新参数和当前资产重新挂单,不用先停止,过程中可能按市价买卖;订单组重置,还没提取的网格利润会被再投资。合约网格修改时如果行情波动剧烈、策略里资产又少,单网格买卖量可能算成 0,策略会自动停止。
这个接口在文档里列了几个报错码:
| 错误码 | HTTP 状态 | 文档里的提示 |
|---|---|---|
| 51000 | 400 | {param} 参数错误 |
| 51346 | 400 | 最高价格应高于最低价格 |
| 55123 | 400 | 交易账户余额不足,向交易账户转入资金后再试 |
| 55124 | 200 | 由于行情波动,投入金额不足,修改后的参数无法生效 |
| 55186 | 200 | 由于行情波动,投入金额过大,修改后的参数无法生效 |
55124 和 55186 返回的 HTTP 状态是 200,脚本只判断状态码的话会当成改成功了,一定要读响应体里的 code。
止盈止损和停止条件用 POST /api/v5/tradingBot/grid/amend-order-algo 改,algoId、instId 必填。参数表写着 slTriggerPx、tpTriggerPx 至少传一个,传空字符串 "" 就是取消对应的触发价;tpRatio、slRatio 只对合约网格有效,传 "" 同样是取消。这个接口里还有 topUpAmt(增加的投资额),只适用于现货网格。要换停止条件,在同一个请求里带新的 triggerParams,写法和创建时一样。
现货网格的利润用 POST /api/v5/tradingBot/grid/withdraw-income 提取,只传 algoId,返回的 profit 是这次提出来的数。提之前可以先查详情接口的 profit(当前可提取利润)。《现货网格策略常见问答》说明,网格利润不一定全部能提:一部分可能已用在修改策略设置、追加投资或利润再投资上,或者之前已经手动提走;还有一部分可能预留给后续订单和不可提取的舍入差异。
stopType 该传 2 却传成 1,会按市价卖币或全平,已经成交的撤不回来。文中请求示例改写自欧易 API v5 中文文档「网格交易」一节,价格和数量都是文档演示值,不代表任何账户,也不是参数建议。参考页面:欧易 API v5 中文文档「网格交易」一节各接口说明,欧易帮助中心《现货网格策略常见问答》《合约网格策略常见问答》。本文不构成投资建议,请只用你能承受全部损失的闲钱,并自行对交易决策负责。