Your Copy Trading Bot Will Break. Here's How to Build One That Doesn't.
By @CoinMarketMan - 08-Jul-2026
Ваш бот для копирования сделок сломается. Вот как построить такой, который не сломается.
Создать бот для копирования сделок на Hyperliquid можно за один вечер. Цикл опроса занимает около 50 строк на Python: получить позиции кошелька, сравнить их с локальным состоянием, зеркально отразить разницу. Большинство open-source реализаций на GitHub следуют примерно одному и тому же шаблону, и большинство из них нормально работают в первую неделю тестирования.
Затем происходит одно из пяти. Ведущий кошелёк закрывает позицию между интервалами опроса, и вы удерживаете устаревшую сделку через каскад ликвидаций. Кошелёк, который вы копируете, хеджируется на другой площадке, поэтому то, что выглядит как направленная ставка, на самом деле является одним плечом нейтральной позиции. Или плечо кошелька имеет смысл для счёта в $3M, но вызывает маржин-колл на вашем счёте в $10K, потому что ваш бот скопировал направление, не скорректировав размер.
Цикл опроса — не самая сложная часть. Слой управления рисками вокруг него — вот что требует месяцев на правильную реализацию, и именно эту часть большинство туториалов полностью пропускает.
Это руководство охватывает четырёхуровневую архитектуру бота для копирования сделок, которая справляется со структурными режимами отказа, с конкретным кодом для onchain-инфраструктуры Hyperliquid и API когортной аналитики HyperTracker. Если вы уже собрали базовый цикл и видели, как он падает в продакшне, — вот та самая недостающая часть.
Почему Hyperliquid — лучшая площадка для копирования сделок
Копирование сделок требует прозрачных данных о позициях. На централизованной бирже копирование сделок доступно только если биржа строит его как функцию, отбирает «ведущих трейдеров» и открывает доступ к их позициям через проприетарную систему. На Hyperliquid каждая позиция находится в блокчейне и доступна для запросов по умолчанию. Вам не нужно разрешение биржи, чтобы видеть, что делает любой кошелёк.
Полностью onchain-стакан лимитных заявок Hyperliquid обрабатывает около 200 000 заявок в секунду. Каждое исполнение, каждая отмена, каждое изменение позиции — это верифицируемое событие в цепи. Для копирования сделок это означает две вещи: вы можете опрашивать позиции любого кошелька без API-ключа биржи, и вы можете верифицировать, что исполнение вашего бота действительно произошло onchain, а не доверять офчейн-движку матчинга.
Минимальный размер ордера на Hyperliquid составляет $10 в нотиональном выражении. Это важно, потому что пропорциональное масштабирование на небольшом счёте может давать размеры сделок ниже этого порога. Ваш бот должен обрабатывать это корректно: пропустить сделку, залогировать её и продолжить.
Четырёхуровневая архитектура
Бот для копирования сделок, который выживает в живой торговле, имеет четыре отдельных уровня. Каждый из них может отказать независимо, а значит, каждый нуждается в собственной обработке ошибок и логировании.
Уровень 1: Поиск кошельков
Качество системы копирования сделок полностью зависит от выбора кошелька. Безупречный движок исполнения, зеркалящий плохой кошелёк, будет терять деньги с идеальной точностью. Уровень поиска фильтрует всю экосистему Hyperliquid до нескольких кошельков, заслуживающих внимания.
Начните с лидерборда. Эндпоинт /leaderboards/perp-pnl HyperTracker ранжирует кошельки по накопленному PnL по перпам за весь период, месяц, неделю и день. PnL за всё время — наиболее надёжный фильтр, поскольку отражает результаты в разных рыночных режимах и отделяет устойчивое преимущество от удачной недели.
Затем фильтруйте по когорте. HyperTracker классифицирует каждый кошелёк на Hyperliquid по одной из 16 поведенческих когорт: 8 по размеру счёта (от Shrimp до Leviathan) и 8 по PnL за всё время (от Giga-Rekt до Money Printer). Для копирования сделок когорта Money Printer (PnL за всё время выше $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 wallets with open positions, sorted by PnL
response = requests.get(
f"{API_BASE}/wallets",
headers=headers,
params={
"segmentIds": 9,
"hasOpenPositions": True,
"orderBy": "perpPnl",
"order": "desc",
"limit": 20,
},
)
candidates = response.json()
После получения кандидатов проверьте частоту активности. Кошелёк, совершающий одну сделку в месяц, генерирует слишком мало сигналов, чтобы быть полезным. Кошелёк, открывающий десятки позиций ежедневно, генерирует слишком много шума, и комиссии съедят любое преимущество. Оптимальный диапазон для копирования — кошельки, открывающие несколько позиций в неделю с чёткими входами и определёнными периодами удержания.
Уровень 2: Мониторинг позиций
Уровень мониторинга с заданным интервалом опрашивает позиции каждого целевого кошелька и фиксирует изменения. Пять минут — стандартный интервал для копирования сделок не в режиме HFT. Более частый опрос позволяет раньше поймать входы, но увеличивает расходы на API и добавляет шум от частичных исполнений, которые ещё не устоялись. Более редкий опрос пропускает краткосрочные позиции и увеличивает дрейф тайминга выхода.
Движок сравнения — ядро этого уровня. В каждом цикле опроса он сравнивает текущие позиции удалённого кошелька с вашим локальным снимком состояния и генерирует набор событий: 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
Уровень 3: Шлюз управления рисками
Именно этот уровень большинство туториалов пропускает, и именно он определяет, выживет ли ваш бот в живой торговле. Шлюз управления рисками находится между уровнем мониторинга и уровнем исполнения. Он получает торговые сигналы и либо одобряет их, либо модифицирует, либо полностью блокирует.
Пропорциональное масштабирование. Самая распространённая ошибка при копировании сделок — несоответствие размера позиции. Если ведущий кошелёк имеет $3M в капитале и открывает позицию на $300K, для него это взвешенная аллокация. Если ваш бот зеркалит ту же долларовую сумму на счёте в $10K, вы берёте плечо 30x на одной сделке. Пропорциональное масштабирование приводит позицию в соответствие с соотношением капиталов вашего счёта:
def calculate_copy_size(lead_size, lead_equity, my_equity):
ratio = my_equity / lead_equity
scaled = lead_size * ratio
# Hyperliquid minimum notional is $10
if scaled * current_price < 10:
return None # Skip: below minimum
return scaled
Ограничение плеча. Даже при пропорциональном масштабировании ведущий кошелёк может использовать плечо, которое превышает ваш риск-аппетит. Ваш бот должен независимо устанавливать потолок плеча на каждый актив, вне зависимости от того, что использует ведущий кошелёк. Если сигнал требует плечо 20x, а ваш лимит — 5x, шлюз рисков соответственно уменьшает размер или пропускает сделку.
Лимит экспозиции. Одна позиция не должна потреблять весь ваш счёт. Установите максимальный процент капитала на одну сделку. Когда шлюз рисков получает сигнал, который превысит этот лимит, он либо уменьшает размер, либо блокирует сделку.
Автоматический выключатель. Если капитал вашего счёта падает ниже порогового значения за одну сессию, бот должен прекратить открывать новые позиции. Это аварийный стоп, который предотвращает нарастание убытков до ликвидации. Он не закрывает существующие позиции (это зафиксировало бы убытки во время временной просадки). Он просто ставит новые входы на паузу до тех пор, пока вы вручную не проведёте анализ.
Уровень 4: Исполнение
Уровень исполнения преобразует одобренные сигналы в ордера на Hyperliquid с помощью официального Python SDK. Ключевая функция — 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)
# Place a market buy order for ETH
result = exchange.order(
coin="ETH",
is_buy=True,
sz=0.5,
px=None, # market order
order_type={"limit": {"tif": "Ioc"}}, # IOC for market-like execution
)
После исполнения боту нужно верифицировать исполнение ордера. SDK возвращает объект статуса со значением resting (ордер выставлен в стакан) или filled (немедленное исполнение со средней ценой). Для копирования сделок в большинстве случаев нужны IOC (immediate-or-cancel) ордера, поскольку цель — соответствовать позиции ведущего кошелька прямо сейчас, а не ждать конкретной цены.
Логируйте каждое исполнение с ценой входа ведущего кошелька, вашей ценой входа, временной разницей между обнаружением и исполнением, и проскальзыванием. Этот лог станет диагностическим инструментом для последующей настройки системы.
Пять режимов отказа (и как справляться с каждым)
Каждый бот для копирования сделок, собранный на основе базового цикла опроса, уязвим к одним и тем же пяти структурным сбоям. Это не баги. Это архитектурные ограничения, требующие системных решений.
Скрытое хеджирование. Ведущий кошелёк открывает лонг по ETH на Hyperliquid и шорт на ту же сумму на другой площадке. Его нетто-экспозиция равна нулю. Ваша копия — голый лонг. Когда ETH падает, они ничего не теряют, а вы теряете всё. Невозможно обнаружить это по onchain-данным, потому что хедж существует на другой цепи или централизованной бирже. Защита — использовать сигналы на уровне когорт, а не отдельных кошельков. Когда вся когорта Smart Money одновременно уходит в нетто-лонг по ETH, это консенсусный сигнал от сотен кошельков. Они не могут все одновременно хеджироваться.
Затухание сигнала. По мере того как кошелёк становится популярным для копирования, всё больше ботов подхватывают тот же сигнал. Ведущий кошелёк входит по $3 500. К тому моменту, как ваш бот обнаруживает и исполняет, цена уже $3 512 — другие копировщики уже купили раньше. Это проскальзывание накапливается на каждой сделке и постепенно уничтожает преимущество. Отслеживайте вашу цену входа относительно цены исполнения ведущего кошелька. Если проскальзывание стабильно превышает порог, кошелёк слишком «перегружен» для прибыльного копирования.
Несоответствие размера. Уже рассмотрено в разделе о шлюзе рисков. Пропорциональное масштабирование и независимый лимит плеча — основная защита.
Дрейф тайминга выхода. Ведущий кошелёк закрывает позицию между интервалами опроса. Вы пропускаете сигнал выхода и удерживаете устаревшую позицию. Если позиция разворачивается в этот промежуток, вы несёте убыток, которого ведущий кошелёк избежал. Сокращайте интервал опроса для кошельков с активными позициями (опрашивайте каждую минуту, пока скопированная позиция открыта, и каждые пять минут в режиме ожидания). Устанавливайте независимые трейлинг-стопы на своих позициях как страховочный инструмент.
Ошибка выжившего. Лидерборд показывает кошельки, которые прибыльны прямо сейчас. Он не показывает тысячи кошельков, которые следовали схожим стратегиям и обнулились. Кошелёк с $2M совокупной прибыли мог заработать её через агрессивное плечо, которое в итоге вернётся к среднему. Фильтруйте по количеству сделок (минимум сотни сделок) и анализируйте просадку относительно совокупного PnL. Кошелёк с высоким PnL и огромными просадками — худший объект для копирования, чем кошелёк с умеренным PnL и плавной кривой капитала.
Когортные сигналы как более безопасная альтернатива
Копирование сделок одного кошелька — это выборка из одного элемента. Вы делаете ставку на то, что один адрес обладает устойчивым преимуществом, не хеджируется в других местах и продолжит торговать по шаблону, которому ваш бот может следовать. Каждое допущение в этой цепочке может оборваться.
Сигналы на уровне когорт агрегируют позиционирование сотен кошельков с одинаковым профилем прибыльности. Когда наши данные показывают, что когорта Money Printer уходит в нетто-лонг по BTC, а когорта Giga-Rekt (PnL за всё время ниже -$1M, segment ID 15) открывает нетто-шорт по тому же активу, это расхождение является статистически значимым сигналом. Один кошелёк может ошибаться или хеджироваться. Целая когорта по прибыльности, действующая согласованно, — это информация иного рода.
Эндпоинт /cohort-metrics HyperTracker предоставляет агрегированное позиционирование по сегментам с обновлением каждые 5 минут. Вы можете построить систему, которая отслеживает когортный bias, а не отдельные кошельки. Это устраняет проблему скрытого хеджирования, снижает затухание сигнала (нет единого адреса для «перегрузки») и обеспечивает диверсифицированный источник сигналов.
# Fetch Smart Money cohort metrics for BTC
cohort_data = requests.get(
f"{API_BASE}/cohort-metrics",
headers=headers,
params={"coin": "BTC", "segmentId": 9},
).json()
# Check net bias: are Smart Money wallets net long or short?
net_bias = cohort_data.get("netBias")
Компромисс — в точности. Когортные сигналы говорят вам, что Smart Money накапливает позицию, но не сообщают цену входа, плечо или точный тайминг. Вы используете когортные сигналы для определения направленного bias, а конкретные входы управляете самостоятельно через технические уровни, лимитные ордера или DCA.
Дайте боту проработать вхолостую перед запуском
Запустите бота с реальными данными и симулированным исполнением минимум на две недели, прежде чем рисковать капиталом. Этот «холостой» прогон выявляет проблемы, которые бэктест не может обнаружить: лимиты API под продакшн-нагрузкой, граничные случаи в движке сравнения при листинге нового актива на Hyperliquid, и точность симуляции исполнения.
Логируйте каждую симулированную сделку с ценой на момент обнаружения, ценой на момент симулированного исполнения (в качестве прокси можно использовать mid-цену) и исходом, если бы сделка была реальной. Отслеживайте процент выигрышных сделок, среднее проскальзывание и максимальную просадку за период холостого прогона. Если симулированные результаты не соответствуют допущениям вашего бэктеста в разумных пределах, разрыв обычно кроется в исполнении: проскальзывание, тайминг или граничные случаи размера позиции, которые бэктест не учёл.
Несколько open-source ботов для копирования сделок на Hyperliquid поддерживают режим dry run из коробки. Python-боты обычно реализуют это как симулированный трекер баланса, который обрабатывает реальные сигналы без отправки ордеров. Это позволяет валидировать весь пайплайн от поиска кошельков через шлюз рисков до логики исполнения без риска для капитала.
Постройте систему копирования сделок с когортной аналитикой
API HyperTracker предоставляет данные лидерборда, когортную фильтрацию и метрики агрегированного позиционирования, которые лежат в основе уровней поиска кошельков и генерации сигналов. Начните с бесплатного тарифа (100 запросов в день) и переходите на Pulse ($179/мес), когда будете готовы к продакшн-интервалам опроса.
Архитектура важнее сигнала
Большинство руководств по ботам для копирования сделок сосредоточены на сигнале: какой кошелёк отслеживать, какие сделки копировать. Сигнал — это от силы 10% системы. Архитектура вокруг него — остальные 90%. Шлюз рисков, логика масштабирования позиций, автоматический выключатель, обработчик тайминга выхода, монитор проскальзывания, фреймворк холостого прогона. Именно эти компоненты определяют, переживёт ли бот свою первую просадку или ликвидирует ваш счёт в один прекрасный вторник.
Сначала постройте уровень управления рисками. Протестируйте его на экстремальных входных данных. Затем добавьте поверх него сигнал. Лучший бот для копирования сделок — тот, который знает, когда не делать ничего.