API Reference
DBot OfficialDBot DashboardPricing

编辑限价单任务(WS)

用于编辑某个限价单任务

FreePlusProEnterprise积分消耗
0

URL

wss://api-bot-v1.dbotx.com/trade/ws 

说明

为保证WebSocket连接的可用性和稳定性,需要至少每1分钟(建议每30-55秒)进行一次心跳订阅,否则系统会自动断开超时链接

请求示例

{
  "id": 1761291309, // 调用id,响应结果返回相同ID
  "method": "updateLimitOrder", // 调用编辑限价单任务方法
  "params": {
    "id": "mh378onq043aeu", // 限价单任务id 
    "enabled": true,  // "true"表示启用限价单任务
    "groupId": "m53gevri043ird", // 限价单分组id
    "triggerPriceUsd": "3.5", // 触发买入/卖出的价格(美元)
    "triggerDirection": "up", // "down"表示低于触发价格时执行买入/卖出,"up"表示高于触发价格时执行买入/卖出
    "customFeeAndTip": false, // "true"表示优先费 (priorityFee) 和贿赂费 (jitoTip) 两个字段均有效,系统将按填写的值执行交易 (null表示自动优先费/自动贿赂费),"false"表示高速模式下只有优先费 (priorityFee) 有效,防夹模式下只有贿赂费 (jitoTip) 有效,系统将自动进行分配
    "priorityFee": "0.00005", // 优先费 (SOL),对Solana有效,空字符串表示使用自动优先费
    "currencyAmountUI": 1, // 交易类型为buy时,填写买入金额(ETH/SOL/BNB/TRX),交易类型为sell时,填写卖出比例(0.00-1.00)
    "gasFeeDelta": 5, // 额外增加的gas (Gwei),对EVM链有效
    "maxFeePerGas": 100, // 基础gas超过此值时将不进行交易 (Gwei),对EVM链有效
    "jitoEnabled": true, // "true"表示启用防夹模式 (Solana & Ethereum & Bsc)
    "jitoTip": 0.0021, // 防夹模式使用的贿赂费 (Solana),"jitoEnabled"或"customFeeAndTip"为true时必填 (null表示自动优先费/自动贿赂费)
    "expireDelta": 360000000, // 任务有效时长,最大值为432000000 (毫秒)
    "expireExecute": false, // "true"表示任务过期仍未触发时,会按过期时的实时价格买入或卖出代币
    "useMidPrice": false, // "true"表示启用防插针模式,将使用1秒内的中间价格作为触发价,会尽可能但无法100%保证避免插针
    "maxSlippage": 0.1, // 最大滑点(0.00-1.00),买入时表示实际成交价格和期望价格之间的差距,卖出时表示期望价格和实际成交价格之间的差距,相差倍数=1/(1-滑点),0.5即最多接受2倍价差,1 即不限制价差
    "concurrentNodes": 2, // 并发节点数(1-3)
    "retries": 1 // 失败后的重试次数(0-10)
  }
}

响应数据

{
    "method": "rpcResponse", // rpc响应
    "id": 1761291309, // 调用id
    "result": {
        "err": false // 是否发生错误
    } 
}

以NodeJS为例

const WebSocket = require('ws')

function main() {
  const ws = new WebSocket('wss://api-data-v1.dbotx.com/trade/ws/', {
    headers: {
      'x-api-key': 'YOUR_API_KEY',
    },
  })

  ws.on('open', () => {
    ws.send(
      JSON.stringify({
        "id": 1761291309,
        "method": "updateLimitOrder",
        "params": {
          "id": "mh378onq043aeu",
          "enabled": true,
          "groupId": "m53gevri043ird",
          "triggerPriceUsd": "3.5",
          "triggerDirection": "up",
          "customFeeAndTip": false,
          "priorityFee": "0.00005",
          "currencyAmountUI": 1,
          "gasFeeDelta": 5,
          "maxFeePerGas": 100,
          "jitoEnabled": true,
          "jitoTip": 0.0021,
          "expireDelta": 360000000,
          "expireExecute": false,
          "useMidPrice": false,
          "maxSlippage": 0.1,
          "concurrentNodes": 2,
          "retries": 1
        }
      })
    )

    setInterval(() => {
      ws.ping()
    }, 30000)
  })

  ws.on('message', res => {
    console.log('res:', res.toString('utf-8'));
  })
}

main()

以Python为例

import asyncio
import websockets
import json

async def main():
    uri = "wss://api-data-v1.dbotx.com/trade/ws/"
    headers = {"x-api-key": "YOUR_API_KEY"}
    msg = {
        "id": 1761291309,
        "method": "updateLimitOrder",
        "params": {
            "id": "mh378onq043aeu",
            "enabled": true,
            "groupId": "m53gevri043ird",
            "triggerPriceUsd": "3.5",
            "triggerDirection": "up",
            "customFeeAndTip": false,
            "priorityFee": "0.00005",
            "currencyAmountUI": 1,
            "gasFeeDelta": 5,
            "maxFeePerGas": 100,
            "jitoEnabled": true,
            "jitoTip": 0.0021,
            "expireDelta": 360000000,
            "expireExecute": false,
            "useMidPrice": false,
            "maxSlippage": 0.1,
            "concurrentNodes": 2,
            "retries": 1
        }
    }

    async with websockets.connect(uri, additional_headers=headers) as ws:
        await ws.send(json.dumps(msg))

        async def keep_alive():
            while True:
                await ws.ping()
                await asyncio.sleep(30)

        async def listen_for_messages():
            async for message in ws:
                print(message)

        await asyncio.gather(keep_alive(), listen_for_messages())

if __name__ == "__main__":
    asyncio.run(main())

请求参数可视化参考