网淘吧来吧,欢迎您!

Open-broker技能使用说明

2026-03-30 新闻来源:网淘吧 围观:14
电脑广告
手机广告

Open Broker - Hyperliquid 交易命令行工具

在 Hyperliquid DEX 上执行交易操作,支持构建者费用。

安装

npm install -g openbroker

快速开始

# 1. Setup (generates wallet, creates config, approves builder fee)
openbroker setup

# 2. Fund your wallet with USDC on Arbitrum, then deposit at https://app.hyperliquid.xyz/

# 3. Start trading
openbroker account
openbroker buy --coin ETH --size 0.1

重要提示:交易前查找资产

交易不熟悉的资产前,务必先进行搜索。Hyperliquid 上有主流永续合约(ETH、BTC、SOL...)、HIP-3 永续合约(xyz:CL、xyz:GOLD、km:USOIL...)和现货市场。请使用搜索功能来发现正确的交易代码:

Open-broker

openbroker search --query GOLD              # Find all GOLD markets across all providers
openbroker search --query oil               # Find oil-related assets (CL, BRENTOIL, USOIL...)
openbroker search --query BTC --type perp   # BTC perps only
openbroker search --query NATGAS --type hip3  # HIP-3 only

或者使用ob_search插件工具:{ "query": "gold" }{ "query": "oil", "type": "hip3" }

HIP-3 资产使用dex:COIN格式——例如,xyz:CL而不仅仅是CL。如果您遇到类似“未找到市场数据”的错误,请搜索该资产以找到正确的前缀交易代码。常见的 HIP-3 DEX:xyz,flx,km,hyna,vntl,cash.

故障排除:CLI 回退方案

如果ob_*插件工具返回意外错误、空结果或崩溃,请回退到通过 Bash 使用等效的 CLI 命令。CLI 和插件工具共享相同的核心代码,但 CLI 具有更成熟的错误处理和输出功能。

插件工具CLI 等效命令
ob_accountopenbroker account --json
ob_positionsopenbroker positions --json
ob_fundingopenbroker funding --json --include-hip3
ob_marketsopenbroker markets --json --include-hip3
ob_searchopenbroker search --query <查询内容>
ob_buyopenbroker buy --coin <币种> --size <数量>
ob_sellopenbroker sell --coin <币种> --size <数量>
ob_limitopenbroker limit --coin <币种> --side <方向> --size <数量> --price <价格>
ob_tpslopenbroker tpsl --coin <币种> --tp <价格> --sl <价格>
ob_cancelopenbroker cancel --all--coin <币种>
ob_fillsopenbroker fills --json
ob_ordersopenbroker orders --json
ob_funding_scanopenbroker funding-scan --json
ob_candlesopenbroker candles --coin <币种> --json
ob_auto_runopenbroker auto run <脚本> [--dry]
ob_auto_stop(使用命令行界面时通过发送 SIGINT 信号来停止)
ob_auto_listopenbroker auto list

何时使用命令行界面回退:

  • 插件工具返回空值、空数据或抛出错误
  • 你需要插件工具未暴露的数据(例如,--verbose调试输出)
  • 长时间运行的操作(策略)——命令行界面能更好地处理超时和进度

在任何交易命令行界面命令中添加--dry参数可以预览而不实际执行。在信息类命令中添加--json参数可以获得结构化输出。

命令参考

设置

openbroker setup              # One-command setup (wallet + config + builder approval)
openbroker approve-builder --check  # Check builder fee status (for troubleshooting)

设置命令提供三种模式:生成全新钱包

  1. (推荐用于智能体)——创建一个专用的交易钱包,并自动批准构建者费用。无需浏览器操作步骤——只需存入USDC即可开始交易。导入现有密钥
  2. ——使用您已有的私钥生成API钱包
  3. ——创建一个受限钱包,可以交易但无法提款。需要主钱包通过浏览器进行批准。对于选项1和2,设置过程会自动保存配置并批准构建者费用。 对于选项3(API钱包),请参阅下方的API钱包设置部分。

全新钱包设置(推荐用于智能体)

这是为智能体设置的最简单方式。生成一个全新钱包,自动批准构建者费用,智能体在资金到位后即可立即开始交易。

流程:

运行

  1. openbroker setup并选择选项1("生成全新钱包")CLI将生成钱包,保存配置,并自动批准构建者费用
  2. The CLI generates a wallet, saves the config, and approves the builder fee automatically
  3. 通过从您的Hyperliquid账户向代理的钱包地址发送USDC来为该钱包注资,使用发送功能,位于https://app.hyperliquid.xyz/注资应仅在Hyperliquid L1上进行。
  4. 开始交易

API钱包设置(替代方案)

API钱包可以代表主账户进行交易,但无法提取资金。如果您希望将资金保留在现有钱包中,仅委托交易权限,请使用此方法。

流程:

  1. 运行openbroker setup并选择选项3(“生成API钱包”)
  2. CLI将生成一个密钥对并打印一个批准URL(例如https://openbroker.dev/approve?agent=0xABC...
  3. 代理所有者需在浏览器中打开该URL并连接其主钱包(如MetaMask等)
  4. 主钱包将签署两笔交易:ApproveAgent(授权API钱包)以及ApproveBuilderFee(批准1个基点的费用)
  5. CLI会自动检测授权并保存配置

设置完成后,配置文件将包含:

HYPERLIQUID_PRIVATE_KEY=0x...        # API wallet private key
HYPERLIQUID_ACCOUNT_ADDRESS=0x...    # Master account address
HYPERLIQUID_NETWORK=mainnet

对代理程序很重要:使用API钱包时,请将授权URL传递给代理程序所有者(即控制主钱包的人员)。所有者必须在浏览器中完成授权,代理程序才能进行交易。CLI会等待授权,最长等待时间为10分钟。如果超时,请重新运行openbroker setup

账户信息

openbroker account            # Balance, equity, margin
openbroker account --orders   # Include open orders
openbroker positions          # Open positions with PnL
openbroker positions --coin ETH  # Specific coin

资金费率

openbroker funding --top 20   # Top 20 by funding rate
openbroker funding --coin ETH # Specific coin

市场列表

openbroker markets --top 30   # Top 30 main perps
openbroker markets --coin BTC # Specific coin

所有市场(永续合约 + 现货 + HIP-3)

openbroker all-markets                 # Show all markets
openbroker all-markets --type perp     # Main perps only
openbroker all-markets --type hip3     # HIP-3 perps only
openbroker all-markets --type spot     # Spot markets only
openbroker all-markets --top 20        # Top 20 by volume

搜索市场(跨提供商查找资产)

openbroker search --query GOLD    # Find all GOLD markets
openbroker search --query BTC     # Find BTC across all providers
openbroker search --query ETH --type perp  # ETH perps only

现货市场

openbroker spot                   # Show all spot markets
openbroker spot --coin PURR       # Show PURR market info
openbroker spot --balances        # Show your spot balances
openbroker spot --top 20          # Top 20 by volume

交易成交记录

openbroker fills                          # Recent fills
openbroker fills --coin ETH               # ETH fills only
openbroker fills --coin BTC --side buy --top 50

订单历史

openbroker orders                         # Recent orders (all statuses)
openbroker orders --open                  # Currently open orders only
openbroker orders --open --coin ETH       # Open orders for a specific coin
openbroker orders --coin ETH --status filled
openbroker orders --top 50

订单状态

openbroker order-status --oid 123456789   # Check specific order
openbroker order-status --oid 0x1234...   # By client order ID

费用表

openbroker fees                           # Fee tier, rates, and volume

K线数据(OHLCV)

openbroker candles --coin ETH                           # 24 hourly candles
openbroker candles --coin BTC --interval 4h --bars 48   # 48 four-hour bars
openbroker candles --coin SOL --interval 1d --bars 30   # 30 daily bars

融资历史

openbroker funding-history --coin ETH              # Last 24h
openbroker funding-history --coin BTC --hours 168  # Last 7 days

近期交易(行情记录)

openbroker trades --coin ETH              # Last 30 trades
openbroker trades --coin BTC --top 50     # Last 50 trades

速率限制

openbroker rate-limit                     # API usage and capacity

资金费率扫描器(跨交易所)

openbroker funding-scan                          # Scan all dexes, >25% threshold
openbroker funding-scan --threshold 50 --pairs   # Show opposing funding pairs
openbroker funding-scan --hip3-only --top 20     # HIP-3 only
openbroker funding-scan --watch --interval 120   # Re-scan every 2 minutes

交易指令

HIP-3 永续合约交易

所有交易指令均支持使用dex:COIN语法来交易 HIP-3 资产:

openbroker buy --coin xyz:CL --size 1              # Buy crude oil on xyz dex
openbroker sell --coin xyz:BRENTOIL --size 1        # Sell brent oil
openbroker limit --coin xyz:GOLD --side buy --size 0.1 --price 2500

市价单(快速)

openbroker buy --coin ETH --size 0.1
openbroker sell --coin BTC --size 0.01
openbroker buy --coin SOL --size 5 --slippage 100  # Custom slippage (bps)

市价单(完整)

openbroker market --coin ETH --side buy --size 0.1
openbroker market --coin BTC --side sell --size 0.01 --slippage 100

限价单

openbroker limit --coin ETH --side buy --size 1 --price 3000
openbroker limit --coin SOL --side sell --size 10 --price 200 --tif ALO

为现有持仓设置止盈/止损

# Set take profit at $40, stop loss at $30
openbroker tpsl --coin HYPE --tp 40 --sl 30

# Set TP at +10% from entry, SL at entry (breakeven)
openbroker tpsl --coin HYPE --tp +10% --sl entry

# Set only stop loss at -5% from entry
openbroker tpsl --coin ETH --sl -5%

# Partial position TP/SL
openbroker tpsl --coin ETH --tp 4000 --sl 3500 --size 0.5

触发单(独立止盈/止损)

# Take profit: sell when price rises to $40
openbroker trigger --coin HYPE --side sell --size 0.5 --trigger 40 --type tp

# Stop loss: sell when price drops to $30
openbroker trigger --coin HYPE --side sell --size 0.5 --trigger 30 --type sl

取消订单

openbroker cancel --all           # Cancel all orders
openbroker cancel --coin ETH      # Cancel ETH orders only
openbroker cancel --oid 123456    # Cancel specific order

高级执行

时间加权平均价格(原生交易所订单)

# Buy 1 ETH over 30 minutes (exchange handles slicing)
openbroker twap --coin ETH --side buy --size 1 --duration 30

# Sell 0.5 BTC over 2 hours without randomized timing
openbroker twap --coin BTC --side sell --size 0.5 --duration 120 --randomize false

# Cancel a running TWAP
openbroker twap-cancel --coin ETH --twap-id 77738308

# Check TWAP status
openbroker twap-status --active

分批建仓/平仓(网格订单)

# Place 5 buy orders ranging 2% below current price
openbroker scale --coin ETH --side buy --size 1 --levels 5 --range 2

# Scale out with exponential distribution
openbroker scale --coin BTC --side sell --size 0.5 --levels 4 --range 3 --distribution exponential --reduce

条件单(入场 + 止盈 + 止损)

# Long ETH with 3% take profit and 1.5% stop loss
openbroker bracket --coin ETH --side buy --size 0.5 --tp 3 --sl 1.5

# Short with limit entry
openbroker bracket --coin BTC --side sell --size 0.1 --entry limit --price 100000 --tp 5 --sl 2

追踪订单(跟随价格)

# Chase buy with ALO orders until filled
openbroker chase --coin ETH --side buy --size 0.5 --timeout 300

# Aggressive chase with tight offset
openbroker chase --coin SOL --side buy --size 10 --offset 2 --timeout 60

订单类型

限价单 vs 触发单

限价单(openbroker limit):

  • 达到价格立即执行
  • 挂单直至成交或取消
  • 低于市价的限价卖单会立即成交(吃单)
  • 不适用于止损

触发订单(openbroker trigger,openbroker tpsl):

  • 保持休眠直到触发价格被触及
  • 仅当价格达到触发水平时激活
  • 设置止损和止盈的正确方式
  • 不会过早成交

何时使用每种订单

场景命令
以低于市价的特定价格买入openbroker limit
以高于市价的特定价格卖出开仓限价单
止损(价格下跌时退出)openbroker trigger --type sl
止盈(在目标价位退出)openbroker trigger --type tp
为现有持仓添加止盈/止损openbroker tpsl

通用参数

所有命令都支持--dry用于模拟运行(预览而不实际执行)。

参数描述
--coin资产代码(ETH、BTC、SOL、HYPE 等)
--side订单方向:买入卖出
--size订单大小(以基础资产计)
--price限价
--dry预览而不执行
--help显示命令帮助

订单参数

参数描述
--trigger触发价格(针对触发订单)
--type触发类型:tpsl
--slippage滑点容差,单位为基点(针对市价订单)
--tif有效时间:GTC、IOC、ALO
--reduce仅减仓订单

止盈/止损价格格式

格式示例描述
绝对价格--tp 40价格为40美元
百分比上涨--tp +10%高于入场价 10%
百分比下跌--sl -5%低于入场价 5%
入场价格--sl 入场价盈亏平衡止损

配置

配置按以下优先级顺序加载:

  1. 环境变量
  2. .env在当前目录中
  3. ~/.openbroker/.env(全局配置)

运行openbroker setup以交互方式创建全局配置。

变量必需描述
HYPERLIQUID_PRIVATE_KEY钱包私钥 (0x...)
HYPERLIQUID_NETWORK主网(默认)或测试网
HYPERLIQUID_ACCOUNT_ADDRESS主账户地址(API钱包必需)

构建者费用(1个基点/0.01%)是硬编码的,不可配置。

OpenClaw插件(可选)

此技能可通过Bash独立运行——上述每个命令都通过openbroker命令行界面执行。如需增强功能,同一个openbrokernpm包也提供为OpenClaw插件,您可以与此技能同时启用。

插件新增功能

  • 结构化智能体工具ob_accountob_buy ob_limit等)——使用具有正确输入模式的类型化工具调用,而非Bash字符串。代理会收到结构化的JSON响应。后台持仓监视器
  • ——每30秒轮询一次您的Hyperliquid账户,并在持仓开仓/平仓、盈亏发生显著变动或保证金使用达到危险水平时发送Webhook警报。自动化工具
  • ob_auto_runob_auto_stopob_auto_list)——可在代理内部启动、停止和管理自定义交易自动化。CLI命令
  • ——openclaw ob statusopenclaw ob watch用于检查监视器状态。启用插件

该插件与

openbroker捆绑在同一包中。npm 包。要在您的 OpenClaw 配置中启用它:

plugins:
  entries:
    openbroker:
      enabled: true
      config:
        hooksToken: "your-hooks-secret"   # Required for watcher alerts
        watcher:
          enabled: true
          pollIntervalMs: 30000
          pnlChangeThresholdPct: 5
          marginUsageWarningPct: 80

该插件从~/.openbroker/.env(通过openbroker setup命令设置)读取钱包凭证,因此您无需在插件配置中重复privateKey,除非您想要覆盖它。

用于监听器警报的 Webhook 设置

为了让仓位警报能够到达代理,请在您的网关配置中启用钩子:

hooks:
  enabled: true
  token: "your-hooks-secret"   # Must match hooksToken above

如果没有钩子,监听器仍会运行并跟踪状态(可通过ob_watcher_status访问),但它无法唤醒代理。

使用或不使用插件

  • 仅使用技能(无插件):使用 Bash 命令(例如openbroker buy --coin ETH --size 0.1)。无后台监控。
  • 技能 + 插件:代理优先使用ob_*在工具可用时使用工具(结构化数据),对于工具未涵盖的命令(策略、规模)则回退到Bash。后台监视器会自动发送警报。

交易自动化

自动化功能允许您编写自定义的事件驱动交易逻辑,作为TypeScript脚本。您可以精确编写所需的逻辑,OpenBroker会处理轮询、事件检测和SDK访问。

重要提示:捆绑的示例仅供参考,并非现成的策略

OpenBroker随附了捆绑的自动化示例(dcagridfunding-arbmm-spreadmm-maker),这些示例展示了常见模式。这些示例旨在供阅读和学习,而非直接作为生产策略运行。当用户请求一个策略时(例如,"在HYPE上运行DCA"),您应该:

  1. 阅读相关的捆绑示例源代码,以理解自动化API模式
  2. 编写一个自定义自动化程序,根据用户的具体要求(币种、规模、阈值、风险参数、止盈/止损逻辑等)量身定制。
  3. 将其保存到~/.openbroker/automations/并使用openbroker auto run

运行它。请勿直接运行openbroker auto run --example dca --set coin=HYPE

。示例使用通用默认值,缺乏真实策略所需的精细风险管理、仓位规模控制和止盈/止损逻辑。请务必编写一个专为特定目的构建的自动化程序。

openbroker auto examples    # List examples with config fields

要查看捆绑的示例及其配置模式:可用示例:dca(定投)、grid(网格)、funding-arb(资金费率套利)、mm-spread(做市价差)、

mm-maker

自动化是一个.ts文件,它导出一个默认函数。该函数接收一个AutomationAPI,其中包含完整的Hyperliquid客户端、类型化事件订阅、持久化状态和日志记录器。运行时会每10秒(可配置)轮询Hyperliquid,并在检测到变化时分发事件。

编写自动化

~/.openbroker/automations/(或任何路径)中创建一个.ts文件:

// ~/.openbroker/automations/funding-scalp.ts
export default function(api) {
  const COIN = 'ETH';

  api.on('funding_update', async ({ coin, annualized }) => {
    if (coin !== COIN) return;

    if (annualized > 0.5 && !api.state.get('isShort')) {
      api.log.info('High positive funding — going short');
      await api.client.marketOrder(COIN, false, 0.1);
      api.state.set('isShort', true);
    } else if (annualized < -0.1 && api.state.get('isShort')) {
      api.log.info('Funding normalized — closing short');
      await api.client.marketOrder(COIN, true, 0.1);
      api.state.set('isShort', false);
    }
  });

  api.onStop(async () => {
    if (api.state.get('isShort')) {
      api.log.warn('Closing short on shutdown');
      await api.client.marketOrder('ETH', true, 0.1);
      api.state.set('isShort', false);
    }
  });
}

AutomationAPI 参考

属性 / 方法描述
api.client完整的 HyperliquidClient —marketOrder()limitOrder()triggerOrder()cancelAll(),getUserStateAll(),getAllMids(),updateLeverage(), 以及其他35个以上的方法
api.on(event, handler)订阅一个市场/账户事件(参见下方的事件列表)
api.every(ms, handler)以循环间隔运行一个处理程序(与轮询循环对齐)
api.onStart(handler)在所有处理程序注册后、首次轮询前调用
api.onStop(handler)在关闭时调用(SIGINT)。用于清理——平仓、取消订单
api.onError(handler)当处理程序抛出错误时调用。错误已记录——用于恢复逻辑
api.state.get(key)获取一个持久化的值(在重启后仍然存在,存储在~/.openbroker/state/中)
api.state.set(key, value)设置一个持久化值
api.state.delete(key)删除一个持久化值
api.state.clear()清除所有状态
api.publish(message, options?)通过webhook向OpenClaw智能体发送消息。触发智能体回合——智能体接收消息并可以通知用户、采取行动等。如果送达则返回true。选项:{ name?, wakeMode?, deliver?, channel? }
api.log.info/warn/error/debug(msg)结构化日志记录器
api.utilsroundPriceroundSizesleepnormalizeCoinformatUsd年化资金费率api.id
自动化ID(文件名或--id标志)api.dryRun
true如果运行时带有--dry(写入方法被拦截)事件

事件

载荷触发时机tick
{ 时间戳, 轮询次数 }每个轮询周期(默认:10秒)price_change
{ 币种, 旧价格, 新价格, 变化百分比 }轮询间中间价变动 > 0.01%funding_update
{ 币种, 资金费率, 年化率, 溢价 }每次轮询所有资产时position_opened
position_opened{ 币种, 方向, 数量, 入场价格 }检测到新持仓
持仓已平仓{ 币种, 先前数量, 入场价格 }持仓不再存在
持仓已变更{ 币种, 旧数量, 新数量, 入场价格 }持仓数量已变更
盈亏阈值{ 币种, 未实现盈亏, 变化百分比, 持仓价值 }盈亏变动 > 持仓价值的5%
保证金警告{ 已用保证金百分比, 权益, 已用保证金 }保证金使用率 > 80%

事件详情 — 选择合适的事件

tick— 通用的心跳事件

触发每一个轮询周期(默认:10秒),无论市场状况如何。当您需要在每次轮询时检查某些内容时使用此事件 — 例如绝对价格阈值、自定义条件、定期账户检查。这是最可靠的事件,因为它总是会触发。

有效载荷: { 时间戳: 数字, 轮询计数: 数字 }

使用场景:

  • 检查价格是否超过/低于绝对阈值(例如:"当 ETH < 3000 美元时提醒我")
  • 不适合其他事件的自定义条件(例如:"如果我没有持仓且资金费率很高,则入场")
  • 需要每次轮询都运行的周期性任务(尽管api.every()对于更长的时间间隔更合适)

示例 —— 绝对价格警报:

api.on('tick', async () => {
  const mids = await api.client.getAllMids();
  const price = parseFloat(mids['HYPE']);
  if (price < 38 && !api.state.get('alerted')) {
    api.state.set('alerted', true);
    await api.publish(`HYPE dropped below $38 — now at $${price.toFixed(3)}`);
  }
});

注意: tick事件的有效载荷中不包含价格数据 —— 你必须通过api.client.getAllMids()自行获取。这是因为 tick 事件在任何其他事件处理之前触发。如果你只关心价格变动,请改用price_change事件。

price_change—— 相对价格变动

当某个币种的中价变动≥ 0.01% 时触发与前一次轮询相比。这种方法可以过滤掉四舍五入的噪音,同时捕捉到几乎所有的真实价格变动。比较是在连续轮询之间进行的(而非基于固定基准),因此能够检测到增量变化。

载荷: { coin: 字符串, oldPrice: 数字, newPrice: 数字, changePct: 数字 }

使用场景:

  • 响应价格变动(突破、动量、均值回归)
  • 监控特定代币的波动性
  • 构建价格触发的入场/出场逻辑

不适用场景:

  • 检查价格是否高于/低于固定阈值——请改用tick事件,因为price_change事件仅在两次轮询间出现相对变动时触发。在缓慢波动期间(例如价格以$0.001/秒的速度缓慢下跌),任何两次10秒轮询间的变化可能小于0.01%,因此即使价格已超过阈值,该事件也不会触发。

示例——动量检测器:

api.on('price_change', async ({ coin, changePct, newPrice }) => {
  if (coin !== 'ETH') return;
  if (changePct > 0.5) {
    api.log.info(`ETH surging +${changePct.toFixed(2)}% — price $${newPrice}`);
    // Enter long on strong upward momentum
  }
});

funding_update——资金费率数据

触发频率每次轮询对于每一个拥有资金费率数据的资产。这是高频的——如果有150个永续合约资产,每次轮询会触发150次。在你的处理程序中根据币种进行过滤。

数据载荷: { coin: 字符串, fundingRate: 数字, annualized: 数字, premium: 数字 }

  • fundingRate— 原始的小时资金费率(例如,0.0001 = 0.01%/小时)
  • annualized— 年化利率(fundingRate × 8760 × 100,以百分比表示)
  • premium— 溢价成分

使用场景:

  • 资金费率套利策略
  • 监控极端资金费率(入场/出场信号)
  • 扫描所有资产中的最高/最低资金费率

示例——资金费率短线交易:

api.on('funding_update', async ({ coin, annualized }) => {
  if (coin !== 'ETH') return;
  if (annualized > 50 && !api.state.get('isShort')) {
    api.log.info(`ETH funding at ${annualized.toFixed(1)}% annualized — shorting`);
    await api.client.marketOrder('ETH', false, 0.1);
    api.state.set('isShort', true);
  }
});

position_opened— 检测到新持仓

当出现一个在上次轮询中不存在的持仓时触发。适用于跟踪其他系统建立的持仓,或确认自己的订单已成交。

载荷: { coin: 字符串, side: 'long' | 'short', size: 数字, entryPrice: 数字 }

使用时机:

  • 为新仓位自动设置止盈/止损
  • 当仓位开立时(由您或另一系统执行)进行记录/告警
  • 启动针对特定仓位的监控

示例 — 为新仓位自动设置止盈/止损:

api.on('position_opened', async ({ coin, side, size, entryPrice }) => {
  const tpPrice = side === 'long' ? entryPrice * 1.05 : entryPrice * 0.95;
  const slPrice = side === 'long' ? entryPrice * 0.97 : entryPrice * 1.03;
  await api.client.takeProfit(coin, side !== 'long', size, tpPrice);
  await api.client.stopLoss(coin, side !== 'long', size, slPrice);
  api.log.info(`Set TP at ${tpPrice} / SL at ${slPrice} for ${coin}`);
});

仓位已关闭— 仓位已消失

当先前轮询中存在的仓位不再出现时触发。仓位可能是由您手动关闭、被强制平仓,或是因止盈/止损而平仓。

载荷: { coin: 字符串, previousSize: 数字, entryPrice: 数字 }

使用时机:

  • 当仓位关闭时进行记录/告警
  • 清理相关订单或状态
  • 仓位关闭后的重新入场逻辑

示例:

api.on('position_closed', async ({ coin, previousSize, entryPrice }) => {
  api.log.info(`${coin} position closed (was ${previousSize} @ ${entryPrice})`);
  api.state.delete(`${coin}_tp`);
  await api.publish(`Position closed: ${coin} (entry: $${entryPrice})`);
});

仓位已变更— 仓位规模或方向发生变化

当现有持仓的规模发生变化时触发(例如部分平仓、加仓或反转方向)。当新开仓或现有持仓完全平仓时不会触发——请使用position_openedposition_closed来处理这些情况。

载荷: { coin: 字符串, oldSize: 数字, newSize: 数字, entryPrice: 数字 }

  • oldSize/newSize为有符号数值:正数 = 多头,负数 = 空头

使用场景:

  • 检测部分平仓或仓位规模调整
  • 当持仓规模变化时调整止盈/止损
  • 跟踪分批建仓操作

示例:

api.on('position_changed', async ({ coin, oldSize, newSize }) => {
  if (Math.abs(newSize) > Math.abs(oldSize)) {
    api.log.info(`${coin} position increased: ${oldSize} → ${newSize}`);
  } else {
    api.log.info(`${coin} position reduced: ${oldSize} → ${newSize}`);
  }
});

pnl_threshold——显著盈亏变动

当未实现盈亏变动达到≥ 5% 的持仓价值时触发在连续两次轮询之间。这是一个大幅波动检测器——适用于风险管理警报,而非日常监控。

载荷: { coin: string, unrealizedPnl: number, changePct: number, positionValue: number }

  • changePct—— 盈亏变化占持仓总价值的百分比(而非盈亏本身的百分比)

使用场景:

  • 针对大幅盈亏波动的风险警报
  • 在市场突发不利波动时自动平仓或减仓
  • 通过以下方式向用户发送升级警报api.publish()

示例:

api.on('pnl_threshold', async ({ coin, unrealizedPnl, changePct }) => {
  if (unrealizedPnl < 0) {
    await api.publish(
      `⚠️ ${coin} PnL dropped sharply: $${unrealizedPnl.toFixed(2)} (${changePct.toFixed(1)}% of position)`,
      { name: 'pnl-alert' },
    );
  }
});

保证金警告—— 高保证金使用率

当保证金使用率超过80%净资产时触发。首次触发后,仅当保证金使用率再增加5个百分点时才会再次触发(防止警报轰炸)。当保证金使用率回落至80%以下时重置。

载荷: { marginUsedPct: number, equity: number, marginUsed: number }

使用场景:

  • 自动降低风险(关闭最小仓位以释放保证金)
  • 在清算风险前提醒用户
  • 保证金高时暂停新开仓

示例:

api.on('margin_warning', async ({ marginUsedPct, equity }) => {
  await api.publish(
    `🚨 Margin at ${marginUsedPct.toFixed(1)}% — equity: $${equity.toFixed(2)}. Consider reducing exposure.`,
    { name: 'margin-alert' },
  );
});

选择正确的事件 — 快速指南

使用场景最佳事件原因
价格突破固定水平时提醒tick(行情更新)每次轮询都会触发 — 无最小变化阈值
响应价格动量/波动性price_change(价格变化)提供轮询间的相对变化数据
资金费率策略funding_update(资金费率更新)直接提供年化费率
新开仓位的自动止盈/止损position_opened(仓位已开)新仓位出现时精确触发
记录仓位平仓position_closed(仓位已平)当仓位消失时触发
追踪仓位规模变化仓位变动事件仅在规模变化时触发
风险管理 — 盈亏大幅波动盈亏阈值仅在大幅波动时触发(≥仓位价值的5%)
风险管理 — 保证金保证金警告在保证金使用率达80%以上时触发
周期性任务(定投、再平衡)api.every(毫秒, 函数)对于较长间隔优于逐笔触发

可用的客户端方法

api.client对象公开完整的HyperliquidClient。所有币种参数均接受HIP-3前缀代码(例如xyz:CL)。可选用户参数默认使用配置的钱包地址。

交易

方法描述
marketOrder(coin, isBuy, size, slippageBps?, leverage?)通过中间价 ± 滑点设置IOC限价单进行市价交易。返回OrderResponse
limitOrder(coin, isBuy, size, price, tif?, reduceOnly?, leverage?)限价订单。tif'Gtc'(默认)、'Ioc''Alo'。返回OrderResponse
triggerOrder(coin, isBuy, size, triggerPrice, limitPrice, tpsl, reduceOnly?, leverage?)触发(条件)订单。tpsl'tp''sl'当价格达到触发价格时激活,然后以限价执行。返回OrderResponse
stopLoss(coin, isBuy, size, triggerPrice, slippageBps?)止损快捷方式。设置带有滑点缓冲(默认 100 bps / 1%)的限价以确保成交。reduceOnly始终为 true。返回OrderResponse
takeProfit(coin, isBuy, size, triggerPrice)止盈快捷方式。限价 = 触发价格(有利方向)。reduceOnly始终为 true。返回OrderResponse
cancel(coin, oid)通过数字 OID 取消单个订单。返回CancelResponse
cancelAll(coin?)取消所有未成交订单。如果币种若提供币种参数,则仅取消该资产的订单。返回CancelResponse[](取消响应数组)
order(币种, 买入方向, 数量, 价格, 订单类型, 仅减仓?, 包含构建器?, 杠杆?)底层订单提交接口。订单类型:`{ limit: { tif: 'Gtc'(限价:时间条件为“Good till cancel”)

市场数据

方法返回
getAllMids()(获取所有中间价)Record<string, string>(记录<字符串, 字符串>)—— 所有资产(主流+HIP-3)的中间价格。键 = 币种名称,值 = 价格字符串
getMetaAndAssetCtxs()(获取元数据与资产上下文)MetaAndAssetCtxs(元数据与资产上下文)—— 市场元数据(包含数量精度最大杠杆等参数的资产集合)与资产上下文(资金费率、未平仓量、交易量、标记/预言机价格)
getL2Book(币种)(获取二级订单簿){ 买单队列, 卖单队列, 最优买价, 最优卖价, 中间价, 买卖价差, 基点价差 }— 包含计算价差的L2订单簿
获取最近交易记录(币种)数组<{ 币种, 方向, 价格, 数量, 时间, 哈希, 交易ID }>— 最新交易记录。方向'B'(买)或'A'(卖)
获取K线快照(币种,间隔,开始时间,结束时间?)数组<{ 时间戳, 收盘时间, 币种, 间隔, 开盘价, 收盘价, 最高价, 最低价, 成交量, 交易笔数 }>— OHLCV K线。间隔'1分钟''5分钟''15分钟''1小时''4小时''1天'. 时间为Unix毫秒
getFundingHistory(coin, startTime, endTime?)数组<{ coin, fundingRate, premium, time }>— 历史每小时资金费率
getPredictedFundings()数组<[coin, Array<[venue, { fundingRate, nextFundingTime }]>]>— 所有交易场所的预测资金费率
getPerpDexs()`数组<{ name, fullName, deployer }
getAllPerpMetas()数组<{ dexName, meta, assetCtxs }>— 每个永续合约DEX的元数据+上下文(主网 + 所有HIP-3)
getSpotMeta(){ tokens, universe }— 现货市场元数据(代币信息,交易对)
getSpotMetaAndAssetCtxs(){ meta, assetCtxs }— 现货元数据 + 价格/成交量上下文
getTokenDetails(tokenId)代币详情:供应量,部署者,价格。返回null如果未找到

账户

方法返回
获取用户所有状态(用户?)清算所状态— 跨所有去中心化交易所的完整账户状态:保证金摘要(账户价值,总保证金使用量,可提取金额),交叉保证金摘要,以及资产持仓数组[](每个包含持仓.币种.持仓数量.入场价格.未实现盈亏.持仓价值.杠杆率.已用保证金,.liquidationPx)
getUserState(user?, dex?)ClearinghouseState— 单一交易所的账户状态(对于主要永续合约,省略dex参数)
getOpenOrders(user?)OpenOrder[]— 所有交易所的所有未平仓订单。每条记录包含:{ coin, side, limitPx, sz, oid, timestamp, orderType }
getUserFills(user?, aggregateByTime?)Array<{ coin, px, sz, side, time, closedPnl, fee, oid, tid, crossed, builderFee }>— 交易成交历史。side:'B'(买入)或'A'(卖出)
getHistoricalOrders(user?)数组<{ 订单: { 币种, 方向, 限价, 数量, 原始数量, 订单标识, 时间戳, 订单类型, 有效时间, 触发条件, 触发价格, 是否已触发, 是否为持仓止盈止损, 仅减仓 }, 状态, 状态时间戳 }>— 所有订单(已成交、已取消等)
获取订单状态(订单标识, 用户?){ 状态, 订单? }— 通过数字订单标识或字符串客户端订单标识查询特定订单的状态
获取用户资金费率(用户?, 开始时间?, 结束时间?)数组<{ 时间, 哈希值, 变动: { 币种, 美元稳定币, 持仓数量, 资金费率 } }>— 收取/支付的资金费用
获取用户费用(用户?){ 每日用户交易量, 费用表, 用户交叉费率, 用户附加费率, 活跃推荐折扣, 活跃质押折扣 }— 费用等级、费率及交易量
获取用户速率限制(用户?){ 累计交易量, 已使用请求数, 请求容量, 剩余请求数 }— API 速率限制状态
获取现货余额(用户?){ 余额: 数组<{ 币种, 代币, 冻结额, 总额, 入场净值 }> }— 现货代币余额
获取子账户(用户?)数组<{ 子账户用户, 名称 }>— 主钱包的子账户
获取账户模式(用户?)字符串— 账户抽象模式:'标准''统一''投资组合''去中心化交易所抽象'
是否为统一账户(用户?)布尔值如果是统一账户或投资组合保证金(在去中心化交易所间共享USDC)

杠杆与配置

方法描述
更新杠杆(币种, 杠杆, 是否全仓?)设置杠杆。是否全仓默认为(交叉保证金)。HIP-3资产被强制隔离并限制在其最大杠杆率
approveBuilderFee(maxFeeRate?, builder?)批准构建者费用(必须从主钱包调用,而非API钱包)。默认费率:'0.1%'
getMaxBuilderFee(user?, builder?)检查已批准的构建者费用。返回费用字符串(例如:'0.01%')或null若未批准

实用属性

属性 / 方法描述
getAssetIndex(coin)获取币种的数字资产索引(内部用于订单传输)
getSzDecimals(coin)获取币种的数量小数精度
isHip3(coin)检查币种是否为HIP-3资产
getCoinDex(coin)获取币种的交易所名称(null(针对主要永续合约)
getAllAssetNames()获取所有已知资产名称(主要资产 + HIP-3资产)
getHip3AssetNames()仅获取HIP-3资产名称
invalidateMetaCache()强制在下一次调用时刷新市场元数据

实用函数 (api.utils)

函数描述
roundPrice(price, szDecimals, isSpot?)将价格四舍五入至5位有效数字(永续合约最多6位小数,现货最多8位)
roundSize(size, szDecimals)将数量按资产特定小数精度四舍五入
sleep(ms)基于Promise的延迟函数
normalizeCoin(coin)标准化币种名称(大写,去除空格)
formatUsd(amount)将数字格式化为USD字符串(例如:$1,234.56)
annualizeFundingRate(hourlyRate)将小时资金费率转换为年化百分比

示例:价格突破

// ~/.openbroker/automations/breakout.ts
export default function(api) {
  const COIN = 'ETH';
  const BREAKOUT_PCT = 2;  // 2% move triggers entry
  const SIZE = 0.5;
  let basePrice = null;

  api.onStart(async () => {
    const mids = await api.client.getAllMids();
    basePrice = parseFloat(mids[COIN]);
    api.log.info(`Watching ${COIN} from $${basePrice} for ${BREAKOUT_PCT}% breakout`);
  });

  api.on('price_change', async ({ coin, newPrice }) => {
    if (coin !== COIN || !basePrice) return;
    const totalChange = ((newPrice - basePrice) / basePrice) * 100;

    if (Math.abs(totalChange) >= BREAKOUT_PCT && !api.state.get('inPosition')) {
      const side = totalChange > 0;  // true = long, false = short
      api.log.info(`Breakout! ${totalChange.toFixed(2)}% — entering ${side ? 'long' : 'short'}`);
      await api.client.marketOrder(COIN, side, SIZE);
      api.state.set('inPosition', true);
    }
  });
}

示例:计划定投

// ~/.openbroker/automations/hourly-dca.ts
export default function(api) {
  const COIN = 'ETH';
  const USD_PER_BUY = 100;

  // Buy $100 of ETH every hour
  api.every(60 * 60 * 1000, async () => {
    const mids = await api.client.getAllMids();
    const price = parseFloat(mids[COIN]);
    const size = parseFloat(api.utils.roundSize(USD_PER_BUY / price, 4));
    await api.client.marketOrder(COIN, true, size);
    const count = (api.state.get('buyCount') || 0) + 1;
    api.state.set('buyCount', count);
    api.log.info(`DCA #${count}: bought ${size} ${COIN} at $${price}`);
  });
}

示例:保证金守护者

// ~/.openbroker/automations/margin-guard.ts
export default function(api) {
  api.on('margin_warning', async ({ marginUsedPct, equity }) => {
    api.log.warn(`Margin at ${marginUsedPct.toFixed(1)}% — reducing positions`);

    // Close the smallest position to free margin
    const state = await api.client.getUserStateAll();
    const positions = state.assetPositions
      .filter(p => parseFloat(p.position.szi) !== 0)
      .sort((a, b) => Math.abs(parseFloat(a.position.positionValue)) - Math.abs(parseFloat(b.position.positionValue)));

    if (positions.length > 0) {
      const pos = positions[0].position;
      const size = Math.abs(parseFloat(pos.szi));
      const isBuy = parseFloat(pos.szi) < 0; // Close short = buy, close long = sell
      api.log.info(`Closing smallest position: ${pos.coin} (${pos.szi})`);
      await api.client.marketOrder(pos.coin, isBuy, size);
    }
  });
}

向代理发布消息(Webhooks)

使用api.publish()向 OpenClaw 代理发送消息。这会触发一个代理回合——代理接收消息,并可以通过用户偏好的渠道通知用户、执行交易操作或记录事件。

// Simple notification
await api.publish(`ETH broke above $4000 — current price: $${price}`);

// With options
await api.publish(`Margin at ${pct}% — positions at risk`, {
  name: 'margin-alert',           // appears in logs
  wakeMode: 'now',                // 'now' (default) or 'next-heartbeat'
  channel: 'slack',               // target channel (optional)
});

api.publish()返回true如果消息成功送达,返回false如果 Webhooks 未配置(无钩子令牌)。它要求OPENCLAW_HOOKS_TOKEN已设置(在作为 OpenClaw 插件运行时自动配置)。

示例:使用 publish 的价格警报自动化

// ~/.openbroker/automations/price-alert.ts
export default function(api) {
  const COIN = 'ETH';
  const THRESHOLD = 4000;

  api.on('price_change', async ({ coin, newPrice, changePct }) => {
    if (coin !== COIN) return;

    const crossed = api.state.get<boolean>('crossed', false);
    if (!crossed && newPrice >= THRESHOLD) {
      api.state.set('crossed', true);
      await api.publish(
        `${COIN} crossed above $${THRESHOLD}! Price: $${newPrice.toFixed(2)} (+${changePct.toFixed(2)}%)`,
      );
    } else if (crossed && newPrice < THRESHOLD) {
      api.state.set('crossed', false);
    }
  });
}

运行自动化

CLI:

openbroker auto run my-strategy --dry       # Test without trading
openbroker auto run ./funding-scalp.ts      # Run from path
openbroker auto run my-strategy --poll 5000 # Poll every 5s
openbroker auto run --example dca --set coin=HYPE --set amount=50 --dry  # Run bundled example
openbroker auto examples                    # List bundled examples with config
openbroker auto list                        # Show available scripts
openbroker auto status                      # Show running automations

插件工具(适用于OpenClaw代理):

  • ob_auto_run{ "script": "funding-scalp", "dry": true }— 启动一个自动化流程
  • ob_auto_run{ "example": "dca", "config": { "coin": "HYPE", "amount": 50 }, "dry": true }— 运行一个捆绑的示例
  • ob_auto_stop{ "id": "funding-scalp" }— 停止一个正在运行的自动化流程
  • ob_auto_list{}— 列出可用的自动化流程、带有配置模式的捆绑示例,以及正在运行的自动化流程

选项:

标志描述默认值
--dry拦截写入方法 — 不进行真实交易false
--verbose显示调试输出false
--id <名称>自定义自动化ID文件名
--poll <毫秒>轮询间隔(毫秒)10000
--example <名称>运行一个捆绑的示例自动化-
--set 键=值设置配置值(可重复)-

代理编写自动化指南:

风险与安全(强制要求):

  • 始终为每个未平仓头寸附加一个强平监控自动化。订阅保证金警告盈亏阈值事件,使用户永远不会因强平风险而措手不及。如果没有保证金/强平自动化已在运行,请在交易前创建一个。
  • 使用api.publish()来通知用户重要事件——仓位开仓/平仓、止盈/止损触发、大幅盈亏波动、保证金警告、错误,以及任何需要人工关注的情况。切勿对关键事件进行静默处理。
  • 务必注册一个api.onStop()处理程序以进行清理——在关闭时取消未成交订单并平仓(或至少提醒用户)。切勿遗留未处理订单或未管理仓位。
  • 除非用户明确要求,否则不要使用--dry模式。自动化程序默认应以实盘模式运行。
  • 在下单前务必验证是否有足够的保证金。在确定订单规模前检查账户状态。
  • 根据账户净值限制仓位规模。除非用户明确指定规模,否则单笔交易的风险不应超过净值的合理百分比。
  • 务必为新仓位设置止盈/止损——无论是在自动化程序内部设置,还是确认用户已设置。未受保护的仓位是一种风险。

状态与可靠性:

  • 使用api.state为跟踪仓位状态、入场价格和标志位,确保它们能在重启后持续存在。切勿仅依赖内存变量——自动化程序会在网关重启后持续存在并自动重启。
  • 使用幂等性防护措施(api.state.get/set)以防止重复下单。同一条件在多次轮询中可能触发多次事件——下单前务必检查状态。
  • 运行时会按处理器捕获错误——一个处理器的故障不会导致其他处理器崩溃,但务必在处理器内优雅地处理预期错误(例如订单被拒、保证金不足)。

通信:

  • 使用api.publish()将警报/事件发送回OpenClaw代理——请勿手动构建webhook请求。
  • 在以下情况发布:仓位开立/关闭、止盈/止损触发、盈亏超过阈值、保证金警告、自动化错误以及任何自动化交易执行。用户应始终了解自动化程序做了什么及其原因。
  • 在发布消息中包含可操作的上下文——币种、价格、数量、盈亏以及发生了什么——以便用户无需检查终端即可做出明智决策。

通用原则:

  • 脚本从~/.openbroker/automations/按名称加载,或从任何绝对路径加载。
  • 所有交易命令均支持 HIP-3 资产(api.client.marketOrder('xyz:CL', true, 1))。
  • 自动化脚本在网关重启后仍会持续运行——网关恢复时会自动重启它们。
  • 对于间隔时间超过轮询周期的周期性任务,建议使用api.every(ms, fn)而非tick

风险警告

  • 请务必先使用--dry模式预览订单
  • 在测试网(HYPERLIQUID_NETWORK=testnet)上从小仓位开始
  • 监控仓位和强平价格
  • 使用--reduce仅用于平仓

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第349371名访客 今日有175篇新文章/评论