3
Подписаться
1444
Подписчики

Введение в арбитраж Lead-Lag в криптовалюте (3)

Создано: 2024-12-24 15:43:36, Обновлено: 2024-12-26 12:14:45
comments   2
hits   2011

Введение в арбитраж Lead-Lag в криптовалюте (3)

В предыдущей статье мы рассмотрели кросс-биржевой арбитраж. На этот раз мы подробно рассмотрим, как применять эффект опережения-запаздывания в высокочастотной торговле, которая требует улавливания крошечных ценовых различий за очень короткий промежуток времени и быстрого получения прибыли. Эффект опережения-запаздывания предоставляет трейдерам прогностическую информацию, помогая им определять краткосрочный ценовой тренд и, таким образом, осуществлять арбитраж между различными биржами.

Ниже приведеныУпрощение публичного кода, и преобразован в API на основе FMZ. Принцип кода этой оригинальной стратегии очень прост и когда-то был очень прибыльным. В настоящее время он недоступен и предназначен только для справки.


Принцип стратегии высокой частоты Lead-Lag

Так называемый «Lead-Lag» можно понимать как то, что цены (или определенные индикаторы) некоторых бирж будут более «опережающими» в общих изменениях рынка, в то время как другие биржи или другие индикаторы будут относительно «отстающими» (Lag). . В этой стратегии “Price_1, Price_2, Price_3” представляют рыночные условия различных бирж. Это основные биржи, которые более чувствительны к новостям рынка или глубине торговли и типам участников. Как только появляется большой заказ на покупку или продажу, цены на этих биржах будут колебаться в первую очередь. Колебания цен на реальных торговых биржах будут немного отставать из-за таких факторов, как механизмы сопоставления и торговые группы. В этот момент возникает ситуация «кто-то лидирует, а кто-то отстает».

Сканирование книги ордеров на нескольких биржах

Стратегия практически синхронно получает данные книги ордеров с разных бирж, такие как лучшая цена спроса, лучшая цена предложения, объем отложенных ордеров и т. д. Затем сравниваются средние цены (т. е. среднее значение цен спроса и предложения) различных бирж, чтобы сделать вывод о динамике рынка.

Оценка сигнала тренда

Стратегия в основном фокусируется на изменении цен на трех внешних биржах (okex, binance, huobipro):

Здесь каждый трендX определяется разницей между «текущей ценой» и «прошлой ценой», превышающей определенный порог (уровень * приращение_цены). После суммирования сигналов «вверх/вниз» от трех бирж, если общий тренд > 0, это означает, что рынок в целом растет, и стратегия заключается в покупке; если тренд < 0, это означает, что рынок в целом растет. падает, и стратегия — продавать.

Односторонний заказ и контроль рисков

Стратегия предполагает покупку или продажу только после подтверждения тренда и отмену предыдущего ордера перед размещением каждого ордера (то есть, чтобы избежать случайных отложенных ордеров, которые приводят к накоплению риска). В то же время скрипт также настраивает такие модули, как кредитное плечо, пакетная обработка и мониторинг контроля рисков, что означает, что в реальной торговле используются несколько счетов и несколько валютных пар, тем самым увеличивая «частоту торговли» и «эффективность использование капитала».

Кроме того, эта стратегия является высокочастотной стратегией. Вам не нужно обращать внимание на прибыль или убыток каждого ордера, и вам не нужно останавливать убыток. Вы можете продолжать до тех пор, пока есть высокая вероятность сделать выгода.


Реализация стратегии ФМЗ

Настройки параметров

// 超参设置
const SYMBOL = "BTC_USDT"; // 交易对
const PRICE_INCREMENT = 0.1; // 价格增量
const LEVEL = 10; // 趋势判断的灵敏度
const RATIO = 10; // 下单价格调整比例
const INTERVAL = 200; // 时间间隔(毫秒)
const S_AMOUNT = 0.02; // 默认交易量
const MIN_AMOUNT = 0.005; // 最小交易量

// 初始状态
let buyOrders = [];
let sellOrders = [];
let previousPrices = [0, 0, 0]; // 存储之前的价格
let loop = 0;

Основная логика: получение данных и оценка тенденций

// 获取订单簿数据
function fetchOrderBooks() {
    let orderBooks = [];
    let tasks = [];

    // 启动所有交易所的异步获取订单簿任务
    for (let i = 0; i < exchanges.length; i++) {
        // 假设每个交易所对象都可以调用Go方法
        let task = exchanges[i].Go("GetDepth");
        tasks.push({ index: i, task: task });
    }

    // 等待所有任务完成并收集结果
    for (let i = 0; i < tasks.length; i++) {
        let { index, task } = tasks[i];
        try {
            // 等待异步任务返回结果
            let depth = task.wait(1000);

            // 检查返回的数据是否有效
            if (!depth || !depth.Bids || !depth.Asks) {
                throw new Error("返回的订单簿数据无效");
            }

            // 将有效的订单簿数据添加到结果数组
            orderBooks[index] = depth;
        } catch (error) {
            // 记录错误日志
            Log(`获取交易所${index}订单簿失败: ${error.message}`);

            // 添加默认的订单簿数据以避免崩溃
            orderBooks[index] = {
                Bids: [[0, 0]],
                Asks: [[0, 0]]
            };
        }
    }

    return orderBooks;
}


// 判断趋势
function calculateTrend(orderBooks) {
    let trends = [];
    for (let i = 0; i < orderBooks.length; i++) {
        const midPrice = (orderBooks[i].Bids[0][0] + orderBooks[i].Asks[0][0]) / 2;
        if (midPrice > previousPrices[i] + LEVEL * PRICE_INCREMENT) {
            trends.push(1); // 上升趋势
        } else if (midPrice < previousPrices[i] - LEVEL * PRICE_INCREMENT) {
            trends.push(-1); // 下降趋势
        } else {
            trends.push(0); // 无显著趋势
        }
        previousPrices[i] = midPrice; // 更新价格记录
    }
    return trends.reduce((a, b) => a + b, 0); // 返回总体趋势
}

Размещение и отмена заказов

// 取消所有挂单
function cancelOrders(orders) {
    for (let orderId of orders) {
        try {
            exchanges[0].CancelOrder(orderId); // 默认使用主交易所
            Log(`取消订单: ${orderId}`);
        } catch (error) {
            Log(`取消订单失败: ${error.message}`);
        }
    }
}

// 创建买单
function createBuyOrder(price, amount) {
    try {
        const orderId = exchanges[0].Buy(price, amount);
        buyOrders.push(orderId);
        Log(`创建买单: 价格 ${price}, 数量 ${amount}`);
    } catch (error) {
        Log(`创建买单失败: ${error.message}`);
    }
}

// 创建卖单
function createSellOrder(price, amount) {
    try {
        const orderId = exchanges[0].Sell(price, amount);
        sellOrders.push(orderId);
        Log(`创建卖单: 价格 ${price}, 数量 ${amount}`);
    } catch (error) {
        Log(`创建卖单失败: ${error.message}`);
    }
}

Основная логика стратегии

function main() {
    while (true) {
        try {
            // 获取订单簿数据
            const orderBooks = fetchOrderBooks();

            // 计算趋势
            const trend = calculateTrend(orderBooks);
            Log(`当前趋势: ${trend}`);

            // 取消挂单
            cancelOrders(buyOrders);
            cancelOrders(sellOrders);
            buyOrders = [];
            sellOrders = [];

            // 根据趋势下单
            if (trend > 0 && loop > 0) {
                const price = _N(orderBooks[0].Bids[0][0] + RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createBuyOrder(price, amount);
            } else if (trend < 0 && loop > 0) {
                const price = _N(orderBooks[0].Asks[0][0] - RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createSellOrder(price, amount);
            }

            // 循环计数与间隔
            loop++;
            Sleep(INTERVAL);

        } catch (error) {
            Log(`主逻辑错误: ${error.message}`);
        }
    }
}

Анализ причин провала стратегии

Рынки становятся эффективными

Когда все больше количественных или высокочастотных стратегий вовлекаются в процесс и обнаруживают ту же самую взаимосвязь «лидерство-задержка», большой объем средств быстро устранит разницу в цене. По мере того, как рынки становятся все более «синхронизированными», стратегиям становится все сложнее осуществлять «безрисковый» или краткосрочный арбитраж на небольших разницах цен.

Ограничения на обмен или изменения комиссий

Поскольку структура комиссий на различных биржах меняется, как только стоимость комиссий превысит прибыль от арбитража, прибыльность стратегий высокочастотной торговли значительно снизится. С другой стороны, если биржа ускоряет процесс сопоставления, ограничивает частоту и количество, а также сокращает задержку, стратегии, основанные на непостоянной задержке, станут неэффективными.

Снижение ликвидности и проскальзывание

Когда объем рынка недостаточен, высокочастотные стратегии часто сталкиваются с более серьезным проскальзыванием; или крупные ордера быстро подталкивают цены вверх, в результате чего изначально ожидаемое «покупай дешево и продавай дорого» подвергается влиянию их собственных ордеров, что приводит к снижению доходности. .

Изменение волатильности рынка

Некоторые стратегии работают очень хорошо в условиях «высокой волатильности» или «определенных циклов». Когда рынок вялый или волатильность снижается, а кредитное плечо уменьшается, стратегия теряет свою подходящую среду и может даже приносить частые убытки.


Подвести итог

Ключевой момент этой стратегии высокочастотной торговли заключается в сборе цен с нескольких бирж и оценке «синтеза тренда». Когда-то он реализовал метод сверхвысокой частоты, быстрого входа и выхода из торговли, основанный на принципе опережения-запаздывания: наблюдайте, на какой бирже цена движется первой, а затем заставляйте цены других бирж следовать за ней, тем самым улавливая мгновенные ценовые разницы или краткосрочные тенденции. . Однако, как утверждает автор, изменения в рыночной среде, однородности стратегии, комиссиях и ограничениях по частоте постепенно сделали эту стратегию, основанную на спреде «первый ход, последний ход», менее полезной и даже потерявшей прибыльность. Тем, кто хочет изучить этот тип стратегии Lead-Lag, необходимо оптимизировать торговый модуль в сочетании с новейшей рыночной структурой (ликвидность, правила комиссий, скорость сопоставления алгоритмов), а также обратить внимание на управление контролем рисков, чтобы Выживать в меняющейся рыночной среде. Поддерживать постоянную конкурентоспособность.