[TOC]

Недавно друг спросил, возможно ли создать стратегию арбитража ставок финансирования. Например, часто наблюдается несоответствие ставок финансирования между центральными и децентрализованными биржами, и стратегия могла бы собирать арбитражные возможности и использовать ИИ для определения целесообразности открытия позиции. Однако всегда существовала проблема:Эффективных инструментов для выявления арбитражных возможностей не существует.。
По стечению обстоятельств, это порекомендовал один влиятельный человек.VarFundingЭта платформа собирает данные о ставках финансирования в режиме реального времени с множества бирж, включая Binance, Hyperliquid, Lightner и Bybit, все из которых представлены на платформе. Что еще более важно, сравнивая эти данные о ставках финансирования в режиме реального времени, она предоставляет оптимальные комбинации возможностей для арбитража.

Это как подушка, доставленная именно тогда, когда вы хотите спать! Сегодня я шаг за шагом проведу вас через разработку этой стратегии арбитража процентных ставок финансирования.
Прежде чем углубляться в стратегии, давайте проясним один вопрос:Что именно представляет собой арбитраж процентных ставок по кредитам?
В бессрочных контрактах используется механизм, называемыйСтавка финансированияРасчетный цикл различается на разных биржах; на одних он составляет 8 часов, на других — 4 часа, а на третьих — даже 1 час.
Разные биржи имеют разную структуру пользователей и ликвидность, что приводит к различному балансу сил между «быками» и «медведями». Поэтому ставки финансирования для одной и той же криптовалюты часто различаются на разных биржах.
Например, комиссия за транзакцию в BTC на бирже A составляет…+0.1%Обмен B —+0.05%。
На данном этапе мы можем:
Благодаря хеджированию позиций с обеих сторон, прибыль и убытки от колебаний цен компенсируют друг друга, но разница в комиссионных (0,05%) стабильно покрывается за счет компании.

В этом и заключается основная логика арбитража процентных ставок по кредитам: вы получаете прибыль от разницы в ставках, а не от колебаний цен.
Поняв принцип арбитража процентных ставок финансирования, следующий вопрос: как его реализовать на практике?
Традиционный подход заключается в написании полноценной программы, но на этот раз мы решили использовать…Рабочий процессЭто достигается за счет организации рабочего процесса. Организация рабочего процесса имеет ряд уникальных преимуществ:
Каждый узел отвечает за независимую функцию: сбор данных, фильтрация, оценка ИИ и выполнение. Каждый узел имеет свои обязанности, логика понятна, и его легко отлаживать и модифицировать.
Весь процесс реализации стратегии понятен с первого взгляда, и любую проблему на любом этапе можно быстро выявить.
Для изменения критериев фильтрации или оптимизации логики транзакций достаточно внести изменения только в соответствующий узел; другие части трогать не нужно.
Рабочие процессы естественным образом поддерживают вызов больших моделей, что значительно упрощает участие ИИ в принятии решений.
Для этой потребностиМножество источников данных, многоэтапная обработкаДля арбитражных стратегий метод реализации, основанный на использовании рабочих процессов, является очень подходящим способом.
Эта стратегия делится наДве основные линии:


Каждая из двух линий отвечает за свои задачи: линия исполнения занимается принятием решений и транзакциями, а линия сбора данных отвечает за сбор и визуализацию данных. Такая структура позволяет эффективно реализовывать стратегию, а также обеспечивает мониторинг ее операционного состояния в режиме реального времени.
Данная стратегия требует настройки нескольких ключевых параметров:
['binance', 'hyperliquid', 'lighter']['high', 'medium', 'low']Мы можем гибко устанавливать эти параметры в соответствии со своими потребностями.
Первый шаг в этой стратегии — получение данных об арбитражных возможностях. Это делается путем доступа к API VarFunding через HTTP-запрос с передачей предварительно настроенного списка бирж:
const url = `https://varfunding.xyz/api/funding?exchanges=${exchangeList.join(',')}`;
Платформа предоставляет данные о комиссиях по всем криптовалютам на различных биржах, а также рассчитанные ею оптимальные арбитражные комбинации. Однако из-за большого объема исходных данных не все из них могут быть использованы. Стратегия будет отфильтрована, останутся только те возможности, где на биржах, перечисленных в нашем списке конфигурации, доступны как длинные, так и короткие позиции:
const filteredMarkets = data.data.markets.filter(market => {
const bestExchange = market.bestRate?.exchange;
const worstExchange = market.worstRate?.exchange;
return exchangeList.includes(bestExchange) && exchangeList.includes(worstExchange);
});
Отфильтрованные данные будут преобразованы в краткий формат с сохранением только ключевой информации: торговая пара, биржа для покупки, биржа для продажи, спред комиссий, предполагаемая годовая доходность и уровень доверия. Эти данные будут сохранены для последующего анализа арбитражных возможностей.
Наличие лишь одной точки данных о скорости недостаточно, поскольку скорости могут временно колебаться. Поэтому стратегия предусматривает непрерывный сбор моментальных снимков данных, сохранение текущих данных о скорости каждую минуту и хранение только исторических данных за последние N часов.
После сбора достаточного количества данных стратегия проведет статистический анализ для расчета частоты встречаемости каждой валюты на разных уровнях доверия:
const stats = {};
for (const snapshot of savedData) {
for (const [baseAsset, info] of Object.entries(snapshot.data)) {
if (!stats[baseAsset]) {
stats[baseAsset] = { high: 0, medium: 0, low: 0, total: 0 };
}
stats[baseAsset].total++;
if (info.confidence === 'high') stats[baseAsset].high++;
// ... 统计其他置信度
}
}
Затем валюты классифицируются в соответствии с наиболее часто встречающимися уровнями достоверности, и рассчитывается взвешенный балл:
score = (high出现次数 × 3 + medium出现次数 × 2 + low出现次数) / 总次数
Этот рейтинг отражает стабильность арбитражных возможностей. Чем выше рейтинг, тем стабильнее результаты работы возможности в исторических данных и тем она заслуживает доверия.
После завершения анализа комиссий стратегия проверит существующие позиции, используя последний список арбитражных возможностей. Основная логика обнаружения закрытия позиции заключается в последовательном анализе всех бирж для определения текущего статуса позиции:
function scanAllPositions() {
const allPositions = {};
for (const [exName, exIndex] of Object.entries(EXCHANGE_MAP)) {
const positions = exchanges[exIndex].GetPositions();
for (const pos of positions) {
const baseAsset = pos.Symbol.match(/^([A-Z0-9]+)_/)[1];
const isLong = pos.Amount > 0;
// 记录多空仓位信息
}
}
return allPositions;
}
Затем определите, какие позиции необходимо закрыть. Возможны два сценария:
первый типВозможности арбитража исчезли. Если соответствующая валюта для конкретного актива больше не указана в последнем списке арбитражных возможностей, это означает, что разница в комиссиях сократилась, и вам следует закрыть позицию, чтобы зафиксировать прибыль.
второй типНаправление изменилось. Например, если ранее у вас была длинная позиция в точке А и короткая в точке В, но теперь позиции поменялись местами, вам сначала нужно закрыть старые позиции.
Закрытие одной позиции одновременно закроет обе позиции:
// 平多仓
exchanges[longExIndex].CreateOrder(symbol, "closebuy", -1, amount);
// 平空仓
exchanges[shortExIndex].CreateOrder(symbol, "closesell", -1, amount);
И необходимо очистить реестр вакансий, чтобы убедиться, что истекшие позиции урегулированы, прежде чем искать новые возможности.
После проверки закрытия позиции стратегия проведет торговлю в режиме реального времени для подтверждения выбранных арбитражных возможностей. Проверка включает два аспекта:
Рассчитайте историческую разницу цен, получив данные свечных графиков с обеих бирж:
// 获取240根K线
const recordsLong = EX_Long.GetRecords(symbol, PERIOD_M1, 240);
const recordsShort = EX_Short.GetRecords(symbol, PERIOD_M1, 240);
// 计算价差
const spreads = [];
for (const time of commonTimes) {
const midPrice = (priceMapLong[time] + priceMapShort[time]) / 2;
const spread = (priceMapLong[time] - priceMapShort[time]) / midPrice;
spreads.push(spread);
}
// 统计指标
const avgSpread = 平均值(spreads);
const range = 最大值(spreads) - 最小值(spreads);
const stdDev = 标准差(spreads);
Эти показатели отражают согласованность ценовых движений между двумя биржами. Значительные колебания цен указывают на более высокий риск.
Получайте рыночные данные в режиме реального времени и рассчитывайте транзакционные издержки:
const tickerLong = EX_Long.GetTicker(symbol);
const tickerShort = EX_Short.GetTicker(symbol);
// 买卖价差(反映深度)
const longSpread = (tickerLong.Sell - tickerLong.Buy) / tickerLong.Last;
const shortSpread = (tickerShort.Sell - tickerShort.Buy) / tickerShort.Last;
// 开仓成本(在Long所买入,Short所卖出)
const openCost = (tickerLong.Sell - tickerShort.Buy) / midPrice;
// 平仓成本(在Short所买入,Long所卖出)
const closeCost = (tickerShort.Sell - tickerLong.Buy) / midPrice;
// 往返总成本
const roundTripCost = openCost + closeCost;
Если стоимость открытия и закрытия позиций слишком высока, это снизит комиссионный доход, и такие возможности не стоит использовать.
После проверки, если в данных отсутствуют арбитражные возможности (dataЕсли объект пуст, процесс завершается немедленно. Если появляется новая возможность для входа, начинается этап оценки ИИ.
Шансы на успешную проверку будут предоставлены ИИ для всесторонней оценки. Мы использовали тщательно разработанную подсказку, чтобы заставить ИИ мыслить как профессиональный арбитражный аналитик.
Искусственный интеллект проанализирует несколько параметров:
Покрывает ли комиссионный доход риск колебаний ценовой разницы? Основная логика оценки такова:
如果 rateSpread(每8小时收益)> range × 0.3
说明即使价差波动到极端情况,1-2个结算周期就能覆盖风险
Если средний спред отрицательный, а длинная позиция открыта на бирже с более низкой ценой, то открытие позиции позволяет купить по более низкой цене, что является благоприятным условием для открытия позиции.
Достаточны ли объемы торгов на обеих биржах, и является ли спред между ценой покупки и ценой продажи разумным? Если объем торгов на любой из бирж за 24 часа составляет менее 100 000 долларов США или спред между ценой покупки и ценой продажи превышает 0,3%, ликвидность может оказаться недостаточной.
Можно ли покрыть расходы на открытие и закрытие позиций за счет комиссионного дохода в разумные сроки?
如果 roundTripCost < rateSpread × 2
意味着 2 个结算周期(16小时)就能覆盖交易成本
Искусственный интеллект оценит каждую возможность (от 0 до 100 баллов) и определит уровень риска (низкий/средний/высокий). Будут реализованы только те возможности, которые соответствуют оценке. Одновременно ИИ предложит подходящую сумму входа в зависимости от уровня риска.
Результатом работы ИИ является массив JSON, каждый элемент которого содержит: рекомендацию по открытию позиции, рейтинг, рекомендуемую сумму, уровень риска и обоснование решения.
После успешного прохождения оценки ИИ стратегия исполнит открытую позицию. Процесс исполнения очень строгий:
Рассчитайте, сколько контрактов необходимо открыть, исходя из предлагаемой суммы открытия и текущей цены:
const currentPrice = getCurrentPrice(ex, symbol);
const contractAmount = amountUSD / currentPrice / ctVal;
в ctValЭто номинальная стоимость контракта, которая может варьироваться на разных биржах.
Попробуйте установить целевое кредитное плечо (по умолчанию 10x), и если оно не поддерживается, уменьшайте его постепенно:
const leveragesToTry = [10, 5, 3, 2, 1];
for (let lev of leveragesToTry) {
const result = ex.SetMarginLevel(symbol, lev);
if (result === true) {
return lev; // 设置成功
}
}
После оформления заказа он не считается успешно выполненным немедленно; необходимо дождаться подтверждения заказа.
const orderId = ex.CreateOrder(symbol, 'buy', -1, contractAmount);
// 循环检查订单状态
for (let i = 0; i < 20; i++) {
const order = ex.GetOrder(orderId);
if (order.Status === ORDER_STATE_CLOSED) {
// 完全成交
break;
}
Sleep(500);
}
Даже если ордер отображается как исполненный, вам все равно необходимо еще раз проверить фактическое количество активов:
const position = getPosition(ex, symbol);
if (!position || Math.abs(position.Amount) === 0) {
// 订单成交但无持仓,开仓失败
return { success: false };
}
Если успешно открыта только одна позиция (например, успешно открыта длинная позиция, но короткая позиция не открыта), стратегия автоматически закроет открытые позиции:
if (!results.short.success && results.long.success) {
// 尝试平掉多仓
const pos = getPosition(longEx, longSymbol);
executeClose(longEx, longSymbol, true, pos.Amount, longExchange);
}
Это позволяет избежать одностороннего риска и обеспечивает хеджирующий характер арбитража.
После успешного открытия позиции стратегия сохранит информацию об арбитражной позиции, включая время открытия, цену и количество, для использования при последующих проверках закрытия.
В процессе выполнения стратегии вся информация отображается в режиме реального времени на панели мониторинга и разделена на пять таблиц: «Обзор счета» отображает баланс, замороженную сумму, общий капитал и сводку прибыли и убытков по каждой бирже; «Арбитражные сигналы» представляют обнаруженные арбитражные возможности, статус исполнения и причины неудач; «Подробности решения об открытии позиции» записывают оценку ИИ, уровень риска и обоснование решения по каждой возможности; «Арбитражные позиции в режиме реального времени» отображают текущий арбитражный портфель, прибыль и убытки по длинным/коротким позициям, а также продолжительность удержания; «Статистика арбитражной прибыли» суммирует арбитражную прибыль и доходность за сегодняшний день, за эту неделю, за этот месяц и в совокупности.

Эти панели позволяют отслеживать состояние стратегии в режиме реального времени, включая состояние счета, текущие возможности и всю ключевую информацию, такую как прибыль и убытки портфеля.
Наконец, давайте поговорим о рисках и мерах предосторожности:
Хотя арбитраж процентных ставок является стратегией хеджирования, он не лишен рисков. Разница в ценах между двумя биржами может колебаться, и если это колебание превысит прибыль от изменения процентных ставок, возникнут убытки. Именно поэтому стратегия должна проверять стабильность разницы цен.
Если на бирже недостаточно ликвидности, проскальзывание при открытии и закрытии позиций может быть значительным. Например, если глубина стакана ордеров недостаточна, ваш рыночный ордер может быть исполнен по очень невыгодной цене, в результате чего фактическая стоимость открытия позиции окажется намного выше, чем ожидалось.
В частности, некоторые новые децентрализованные биржи (DEX) могут иметь проблемы с уязвимостями смарт-контрактов или нехваткой ликвидности. Были случаи, когда пользователи теряли средства из-за уязвимостей смарт-контрактов в DEX.
Эта стратегия требует размещения средств на нескольких биржах. Например, если вы занимаетесь арбитражем на 3 биржах, средства будут распределены между 3 местами, что приведет к относительно низкому уровню использования капитала.
Я бы посоветовал вам сначала попробовать с небольшой суммой денег.После ознакомления с логикой работы стратегии постепенно увеличивайте свои инвестиции. Для начала можно заняться арбитражем между двумя основными биржами, чтобы накопить опыт, прежде чем расширять инвестиции на другие биржи.
Сегодня мы представили стратегию арбитража процентных ставок финансирования, основанную на платформе VarFunding. Она реализует полный процесс от сбора данных и проверки стабильности до оценки с помощью ИИ и автоматического исполнения, а также обеспечивает наглядный визуальный мониторинг.
Основная идея стратегии заключается в следующем:
Конечно, это всего лишь базовая структура, и здесь еще много возможностей для оптимизации:
Полный код опубликован на платформе Inventors Quantification Platform.Стратегия арбитража ставок финансирования рабочих процессовМы приглашаем всех использовать и улучшать его.