В процессе загрузки ресурсов... загрузка...

Введение в арбитраж с задержкой свинца в криптовалюте (3)

Автор:FMZ~Lydia, Создано: 2024-12-25 16:04:11, Обновлено:

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

Следующее:упрощение общественного кодексаПринцип кода этой первоначальной стратегии очень прост и когда-то был очень прибыльным.

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

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

Просмотр ордерной книги на нескольких биржах

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

Суждение о сигнале тренда

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

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

Однонаправленный порядок и контроль рисков

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

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

Реализация стратегии FMZ

Параметры

// Hyperparameter settings
const SYMBOL = "BTC_USDT"; // Trading pair
const PRICE_INCREMENT = 0.1; // Price increment
const LEVEL = 10; // Sensitivity of trend judgment
const RATIO = 10; // Order price adjustment ratio
const INTERVAL = 200; // Time interval (milliseconds)
const S_AMOUNT = 0.02; // Default transaction volume
const MIN_AMOUNT = 0.005; // Minimum transaction volume

// Initial state
let buyOrders = [];
let sellOrders = [];
let previousPrices = [0, 0, 0]; // Store the previous price
let loop = 0;

Основная логика: сбор данных и оценка тенденций

// Get order book data
function fetchOrderBooks() {
    let orderBooks = [];
    let tasks = [];

    // Start asynchronous order book acquisition tasks for all exchanges
    for (let i = 0; i < exchanges.length; i++) {
        // Assume that each exchange object can call the Go method
        let task = exchanges[i].Go("GetDepth");
        tasks.push({ index: i, task: task });
    }

    // Wait for all tasks to complete and collect results
    for (let i = 0; i < tasks.length; i++) {
        let { index, task } = tasks[i];
        try {
            // Waiting for an asynchronous task to return a result
            let depth = task.wait(1000);

            // Check if the returned data is valid
            if (!depth || !depth.Bids || !depth.Asks) {
                throw new Error("The returned order book data is invalid");
            }

            // Add valid order book data to the result array
            orderBooks[index] = depth;
        } catch (error) {
            // Recording error logs
            Log(`Failed to obtain the order book of exchange ${index}: ${error.message}`);

            // Added default order book data to avoid crashes
            orderBooks[index] = {
                Bids: [[0, 0]],
                Asks: [[0, 0]]
            };
        }
    }

    return orderBooks;
}


// Judge the trends
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); // Upward trend
        } else if (midPrice < previousPrices[i] - LEVEL * PRICE_INCREMENT) {
            trends.push(-1); // Downward trend
        } else {
            trends.push(0); // No significant trend
        }
        previousPrices[i] = midPrice; // Update price record
    }
    return trends.reduce((a, b) => a + b, 0); // Return to overall trend
}

Размещение и аннулирование заказов

// Cancel all pending orders
function cancelOrders(orders) {
    for (let orderId of orders) {
        try {
            exchanges[0].CancelOrder(orderId); // Use the main exchange by default
            Log(`Cancel order: ${orderId}`);
        } catch (error) {
            Log(`Failed to cancel order: ${error.message}`);
        }
    }
}

// Create a buy order
function createBuyOrder(price, amount) {
    try {
        const orderId = exchanges[0].Buy(price, amount);
        buyOrders.push(orderId);
        Log(`Create a buy order: price ${price}, quantity ${amount}`);
    } catch (error) {
        Log(`Failed to create buy order: ${error.message}`);
    }
}

// Create a sell order
function createSellOrder(price, amount) {
    try {
        const orderId = exchanges[0].Sell(price, amount);
        sellOrders.push(orderId);
        Log(`Create a sell order: price ${price}, quantity ${amount}`);
    } catch (error) {
        Log(`Failed to create sell order: ${error.message}`);
    }
}

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

function main() {
    while (true) {
        try {
            // Get order book data
            const orderBooks = fetchOrderBooks();

            // Calculate trends
            const trend = calculateTrend(orderBooks);
            Log(`Current trend: ${trend}`);

            // Cancel pending order
            cancelOrders(buyOrders);
            cancelOrders(sellOrders);
            buyOrders = [];
            sellOrders = [];

            // Order based on trends
            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 count and interval
            loop++;
            Sleep(INTERVAL);

        } catch (error) {
            Log(`Main logic error: ${error.message}`);
        }
    }
}

Анализ причин неудачи стратегии

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

Когда вовлечено все больше количественных или высокочастотных стратегий и обнаружено одно и то же отношение Lead-Lag, большое количество средств быстро устранит ценовую разницу. Рынок становится все более "синхронизированным", и стратегиям трудно сделать "бесрисковый" арбитраж или краткосрочный арбитраж из небольших ценовых различий.

Обменные ограничения или изменения сборов

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

Убыль и сдвиг ликвидности

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

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

Некоторые стратегии очень хорошо работают при высокой волатильности или специфическом периоде.

Резюме

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


Больше