Home>Blog>Your Copy Trading Bot Will Break. Here's How to Build One That Doesn't.
Your Copy Trading Bot Will Break. Here's How to Build One That Doesn't.

Your Copy Trading Bot Will Break. Here's How to Build One That Doesn't.

By @CoinMarketMan - 08-Jul-2026

你的跟单机器人会崩溃。以下是构建一个不会崩溃的方法。

在 Hyperliquid 上构建跟单机器人只需一个下午。轮询循环大概 50 行 Python 代码:获取某个钱包的持仓,与本地状态对比,镜像差值。GitHub 上几乎所有开源实现都遵循大致相同的模式,大多数在测试的第一周运行良好。

然后其中一种情况发生了。目标钱包在你的轮询间隔之间平仓,你持着一个陈旧的仓位熬过了一次清算连锁反应。你跟单的钱包在另一个平台对冲,所以看起来像单边下注的操作,实际上是一个中性持仓的一条腿。又或者目标钱包的杠杆对 $3M 账户来说合情合理,但对你的 $10K 账户来说会导致爆仓,因为你的机器人复制了方向却没有调整仓位大小。

轮询循环不是难点。围绕它的风控层才是需要花数月时间搞对的部分,也是大多数教程完全略过的部分。

本指南涵盖了跟单机器人的四层架构,能够应对结构性故障模式,并提供了针对 Hyperliquid 链上基础设施和 HyperTracker 队列智能 API 的具体代码。如果你已经搭建了基础循环并看着它在生产环境中失败,这就是你缺失的那一层。

为什么 Hyperliquid 是跟单交易的最佳场所

跟单交易需要透明的持仓数据。在中心化交易所,你只有在交易所将其作为功能开发出来、筛选出"领先交易者"并通过专有系统授权你访问其持仓时,才能进行跟单。在 Hyperliquid 上,每笔持仓都在链上,默认可查询。你不需要交易所的许可就能看到任何钱包的操作。

Hyperliquid 的全链上中央限价订单簿每秒处理约 200,000 笔订单。 每笔成交、每次撤单、每次持仓变化都是可验证的链上事件。对于跟单交易而言,这意味着两点:你可以轮询任何钱包的持仓,无需交易所的 API 密钥;你可以验证机器人的执行确实发生在链上,而不是信任一个链下撮合引擎。

Hyperliquid 的最低订单规模为 $10 名义价值。 这一点很关键,因为小账户的比例仓位可能产生低于此下限的交易规模。你的机器人需要优雅地处理这种情况:跳过该交易,记录日志,继续运行。

四层架构

一个能在实盘交易中存活的跟单机器人有四个独立的层。每一层都可以独立失败,这意味着每一层都需要自己的错误处理和日志记录。

Copy Bot Architecture

第一层:钱包发现

跟单系统的质量完全取决于钱包的选择。一个无懈可击的执行引擎跟着一个差钱包,会以完美的保真度亏损。发现层将整个 Hyperliquid 生态系统过滤到少数几个值得跟随的钱包。

从排行榜开始。HyperTracker 的 /leaderboards/perp-pnl 端点按累计永续合约盈亏对钱包进行排名,涵盖全时段、月、周、日维度。全时段盈亏是最可靠的筛选指标,因为它捕捉了多个市场周期的表现,能将持续的优势与幸运的一周区分开来。

然后按队列筛选。HyperTracker 将 Hyperliquid 上的每个钱包分类为 16 个行为队列之一:8 个按账户规模(Shrimp 到 Leviathan),8 个按全时段盈亏(Giga-Rekt 到 Money Printer)。对于跟单交易,Money Printer 队列(全时段盈亏超过 $1M,segment ID 8)和 Smart Money 队列($100K 到 $1M,segment ID 9)是最有可能反映真实交易能力而非运气的两个群体。

import requests

API_BASE = "https://ht-api.coinmarketman.com/api/external"
headers = {"Authorization": "Bearer YOUR_JWT_TOKEN"}

# Smart Money 钱包中有持仓的,按盈亏降序排列
response = requests.get(
    f"{API_BASE}/wallets",
    headers=headers,
    params={
        "segmentIds": 9,
        "hasOpenPositions": True,
        "orderBy": "perpPnl",
        "order": "desc",
        "limit": 20,
    },
)
candidates = response.json()

拉取候选钱包后,检查交易频率。一个每月只交易一次的钱包产生的信号太少,没有价值。一个每天开几十个仓位的钱包产生太多噪音,执行成本会吃掉所有优势。跟单交易的有效范围是每周进行几次仓位操作、有清晰入场点和明确持仓周期的钱包。

第二层:持仓监控

监控层定期轮询每个目标钱包的持仓并检测变化。五分钟是非高频跟单交易的标准节奏。更快的轮询能更早捕捉入场信号,但会增加 API 成本,并增加来自未完成部分成交的噪音。更慢的轮询会错过短暂仓位,增加出场时机偏差。

Polling Loop Flow

差值引擎是这一层的核心。每次轮询,它将远程钱包的当前持仓与本地快照进行对比,生成一组事件:OPEN(出现新仓位)、INCREASE(现有仓位增加)、REDUCE(现有仓位减少)和 CLOSE(仓位消失)。每种事件类型在执行层中需要不同的处理方式。

def diff_positions(local_state, remote_positions):
    events = []
    remote_map = {p["coin"]: p for p in remote_positions}
    local_map = {p["coin"]: p for p in local_state}

    for coin, pos in remote_map.items():
        if coin not in local_map:
            events.append({"type": "OPEN", "coin": coin, "position": pos})
        elif abs(float(pos["szi"]) - float(local_map[coin]["szi"])) > 0.001:
            if abs(float(pos["szi"])) > abs(float(local_map[coin]["szi"])):
                events.append({"type": "INCREASE", "coin": coin, "position": pos})
            else:
                events.append({"type": "REDUCE", "coin": coin, "position": pos})

    for coin in local_map:
        if coin not in remote_map:
            events.append({"type": "CLOSE", "coin": coin, "position": local_map[coin]})

    return events

第三层:风控门

这是大多数教程跳过的层,也是决定你的机器人能否在实盘交易中存活的层。风控门位于监控层和执行层之间。它接收交易信号,然后批准、修改或完全否决。

比例仓位管理。 最常见的跟单失败是仓位不匹配。如果目标钱包有 $3M 的权益并开了一个价值 $300K 的仓位,对他们来说是合理的仓位配置。如果你的机器人在 $10K 账户上镜像相同的美元金额,你在一笔交易上就有了 30 倍杠杆。比例仓位管理按你账户的权益比例缩放持仓:

def calculate_copy_size(lead_size, lead_equity, my_equity):
    ratio = my_equity / lead_equity
    scaled = lead_size * ratio
    # Hyperliquid 最低名义价值为 $10
    if scaled * current_price < 10:
        return None  # 跳过:低于最低限额
    return scaled

杠杆上限。 即使使用比例仓位管理,目标钱包使用的杠杆也可能超过你的风险承受能力。你的机器人应该独立于目标钱包设置每个资产的杠杆上限。如果信号要求 20 倍杠杆但你的上限是 5 倍,风控门会相应缩减仓位或跳过该交易。

敞口限制。 单笔仓位不应消耗你的全部账户。设置每笔交易占权益的最大百分比。当风控门收到会超过此限制的信号时,它要么按比例缩减,要么否决。

熔断器。 如果你的账户权益在单次交易中跌破某个阈值,机器人应停止开新仓位。这是防止连续亏损滚雪球变成清算的终止开关。它不会平掉现有仓位(那会在临时回撤中锁定亏损),只是暂停新的入场,直到你手动审查。

第四层:执行

执行层使用官方 Python SDK 将批准的信号转化为 Hyperliquid 上的订单。核心函数是 exchange.order(),它接受资产、方向、规模、价格和订单类型。

from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants

info = Info(constants.MAINNET_API_URL, skip_ws=True)
exchange = Exchange(wallet, constants.MAINNET_API_URL)

# 对 ETH 下市价买入订单
result = exchange.order(
    coin="ETH",
    is_buy=True,
    sz=0.5,
    px=None,  # 市价单
    order_type={"limit": {"tif": "Ioc"}},  # IOC 实现类市价执行
)

执行后,机器人需要验证成交情况。SDK 返回一个状态对象,包含 resting(订单已挂单)或 filled(立即成交并附带均价)。对于跟单交易,大多数情况下你需要 IOC(即时成交或取消)订单,因为重点是现在就匹配目标钱包的持仓,而不是等待特定价格。

记录每次执行的日志:目标钱包的入场价、你的入场价、从检测到成交的时间差,以及滑点。这份日志将成为后续调优系统的诊断工具。

五种失败模式(及应对方法)

Failure Modes

每个从基础轮询循环构建的跟单机器人都容易遭受相同的五种结构性失败。这些不是 bug,而是需要架构层面解决方案的设计局限。

隐性对冲。 目标钱包在 Hyperliquid 开了一个 ETH 多头,同时在另一个平台开了等量 ETH 空头。他们的净敞口为零,你的跟单却是裸多头。当 ETH 下跌时,他们毫发无损,你损失惨重。仅凭链上数据无法检测到这一点,因为对冲存在于不同的链或中心化交易所。缓解方法是使用队列级信号而非单一钱包。当整个 Smart Money 队列在 ETH 上整体转为净多头,这是来自数百个钱包的共识信号。不可能所有人都在同时对冲。

信号衰减。 随着一个钱包变得受欢迎,越来越多的机器人涌入同一信号。目标钱包在 $3,500 入场。等你的机器人检测并执行时,价格已因其他跟单机器人买入而涨至 $3,512。这种滑点在每笔交易中累积,逐渐侵蚀优势。监控你的入场价与目标钱包成交价之间的差值。如果滑点持续超过某个阈值,说明该钱包太拥挤,跟单已无利可图。

仓位不匹配。 已在风控门部分说明。比例仓位管理和独立杠杆上限是核心防御手段。

出场时机偏差。 目标钱包在你的轮询间隔之间平仓。你错过了出场信号,持着一个陈旧的仓位。如果仓位在这段空白期反转,你承受了目标钱包已经规避的亏损。对有活跃持仓的钱包缩短轮询间隔(当有被跟单的仓位在持有时每分钟轮询,空仓时每五分钟轮询)。在你自己的仓位上设置独立的移动止损作为后备。

幸存者偏差。 排行榜展示的是当前盈利的钱包,不显示数千个采用类似策略然后爆仓的钱包。一个全时段盈利 $2M 的钱包可能是通过激进杠杆实现的,而这终将均值回归。按交易次数筛选(至少数百笔),查看相对于总盈亏的最大回撤。一个高盈亏但有巨大回撤的钱包,是比一个中等盈亏但权益曲线平滑的钱包更差的跟单对象。

以队列信号作为更安全的替代方案

单钱包跟单的样本量为一。你在赌某一个地址具有持续优势、没有在别处对冲,并且会继续以你的机器人能够跟随的模式交易。这个逻辑链中的每个假设都可能失效。

队列级信号将具有相同盈利能力特征的数百个钱包的持仓聚合在一起。当我们的数据显示 Money Printer 队列在 BTC 上整体转为净多头,而 Giga-Rekt 队列(全时段盈亏低于 -$1M,segment ID 15)在同一资产上做净空头时,这种背离是一个统计意义上有价值的信号。单个钱包可能出错或正在对冲,但整个盈利能力队列协同行动,那是另一种层次的信息。

HyperTracker 的 /cohort-metrics 端点提供按队列汇总的持仓数据,每 5 分钟刷新一次。你可以构建一个监控队列偏向而非单个钱包的系统,从而消除隐性对冲问题,减少信号衰减(没有单一地址可供拥挤),并提供多元化的信号来源。

# 获取 BTC 的 Smart Money 队列指标
cohort_data = requests.get(
    f"{API_BASE}/cohort-metrics",
    headers=headers,
    params={"coin": "BTC", "segmentId": 9},
).json()

# 检查净偏向:Smart Money 钱包是净多头还是净空头?
net_bias = cohort_data.get("netBias")

取舍在于精度。队列信号告诉你聪明钱正在积累,但不会告诉你入场价格、杠杆或精确时机。你用队列信号判断方向偏向,通过技术位、限价单或定投管理自己的入场。

上线前进行模拟运行

在投入真实资金前,至少用实时数据和模拟执行运行两周。模拟运行能揭示回测无法发现的问题:生产负载下的 API 速率限制、Hyperliquid 上线新资产时差值引擎的边界情况,以及成交模拟的准确性。

记录每笔模拟交易的日志,包括检测时的价格、模拟成交时的价格(可以用中间价作为代理),以及如果实际执行后的结果。追踪整个模拟运行期间的胜率、平均滑点和最大回撤。如果模拟结果与你的回测假设的偏差超出合理范围,差距通常出在执行上:滑点、时机,或回测未能捕捉到的仓位管理边界情况。

几个开源 Hyperliquid 跟单机器人开箱即支持模拟模式。基于 Python 的机器人通常将其实现为一个模拟余额追踪器,在不提交订单的情况下处理真实信号,让你在不冒资金风险的前提下验证从钱包发现、经风控门到执行逻辑的整个流水线。

用队列智能构建你的跟单系统

HyperTracker 的 API 为你提供排行榜数据、队列筛选和聚合持仓指标,为钱包发现和信号层提供支撑。从免费套餐开始(每天 100 次请求),准备好进入生产轮询节奏时升级到 Pulse($179/月)。

获取你的 API 密钥

架构比信号更重要

大多数跟单机器人指南聚焦于信号:跟哪个钱包,复制哪些交易。信号大概只占整个系统的 10%,围绕它的架构才是另外 90%。风控门、仓位管理逻辑、熔断器、出场时机处理器、滑点监控器、模拟运行框架——这些组件决定了机器人是撑过第一次回撤,还是在某个普通下午把你的账户给清算掉。

先构建风控层。用极端输入测试它。然后在上面叠加信号。最好的跟单机器人,是那个知道什么时候什么都不做的机器人。