Sumber dimuat naik... memuat...

Pengenalan kepada Arbitraj Lead-Lag dalam Cryptocurrency (3)

Penulis:FMZ~Lydia, Dicipta: 2024-12-25 16:04:11, Dikemas kini:

Dalam artikel sebelumnya, kita memperkenalkan pertukaran silang brick moving arbitrage. Dalam artikel ini, kita akan melihat secara mendalam bagaimana menerapkan kesan Lead-Lag untuk perdagangan frekuensi tinggi, yang memerlukan menangkap perbezaan harga kecil dalam masa yang sangat singkat dan membuat keuntungan dengan cepat.

Berikut adalah:penyederhanaan kod awamdan ditukar kepada FMZ API. Prinsip kod strategi asal ini sangat mudah dan pernah sangat menguntungkan. Ia kini tidak tersedia dan hanya untuk rujukan.

Prinsip Strategi Frekuensi Tinggi Lead-Lag

Yang dipanggil Lead-Lag boleh difahami sebagai harga (atau penunjuk tertentu) bursa tertentu akan menjadi lebih leading dalam perubahan pasaran secara keseluruhan, sementara bursa lain atau penunjuk lain akan agak lagging. Dalam strategi ini, Price_1, Price_2, Price_3 mewakili keadaan pasaran bursa yang berbeza masing-masing. Mereka adalah bursa arus perdana. Kerana mereka lebih sensitif terhadap berita pasaran, atau kedalaman perdagangan mereka dan jenis peserta berbeza, sebaik sahaja terdapat pesanan beli atau jual yang besar, harga bursa ini akan berfluktuasi terlebih dahulu. Bursa perdagangan sebenar akan sedikit tertinggal dalam turun naik harga kerana faktor seperti mekanisme pencocokan dan kumpulan perdagangan. Pada masa ini, keadaan bursa memimpin, beberapa lag muncul.

Penjelajahan Buku Perintah Multi-Bursa

Strategi ini memperoleh data buku pesanan dari bursa yang berbeza hampir serentak, seperti harga tawaran, harga permintaan, jumlah pesanan yang menunggu, dll. Kemudian harga pertengahan (iaitu purata harga tawaran dan harga permintaan) dari bursa yang berbeza dibandingkan untuk menyimpulkan dinamik pasaran.

Penghakiman Isyarat Trend

Strategi ini terutamanya memberi tumpuan kepada perubahan harga tiga bursa luar (okex, binance, huobipro):

Di sini, setiap trendX ditentukan oleh perbezaan antara harga semasa dan harga terdahulu melebihi ambang tertentu (tahap * kenaikan harga). Selepas menambah isyarat up/down dari tiga bursa, jika trend keseluruhan > 0, ia bermakna pasaran secara amnya meningkat, dan strategi adalah untuk membeli; jika trend < 0, ia bermakna pasaran secara amnya jatuh, dan strategi adalah untuk menjual.

Perintah dan Kawalan Risiko Satu Arah

Strategi ini hanya membeli atau menjual selepas trend disahkan, dan membatalkan pesanan sebelumnya sebelum meletakkan setiap pesanan (iaitu, mengelakkan pesanan menunggu yang tidak disengajakan yang membawa kepada pengumpulan risiko). Pada masa yang sama, skrip juga menetapkan modul seperti leverage, operasi batch, dan pemantauan kawalan risiko, yang bermaksud bahawa beberapa akaun dan beberapa pasangan mata wang digunakan secara serentak dalam perdagangan langsung, dengan itu memperluaskan strategis frekuensi perdagangan dan keefektifan penggunaan modal.

Selain itu, strategi ini adalah strategi frekuensi tinggi. anda tidak perlu memberi perhatian kepada keuntungan atau kerugian setiap pesanan, juga anda tidak perlu menghentikan kerugian. anda boleh terus selagi ada kebarangkalian membuat keuntungan.

Pelaksanaan Strategi FMZ

Tetapan parameter

// 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;

Logik asas: mendapatkan data dan menilai trend

// 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
}

Penempatan dan pembatalan pesanan

// 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}`);
    }
}

Logik strategi utama

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}`);
        }
    }
}

Analisis Sebab-sebab Kegagalan Strategi

Pasaran menjadi cekap

Apabila lebih banyak strategi kuantitatif atau frekuensi tinggi terlibat dan mencari hubungan Lead-Lag yang sama, sejumlah besar dana akan menghilangkan perbezaan harga dengan cepat.

Sekatan pertukaran atau perubahan yuran

Apabila struktur yuran pertukaran yang berbeza berubah, apabila kos yuran melebihi keuntungan arbitrase, keuntungan strategi perdagangan frekuensi tinggi akan berkurangan.

Kebocoran dan kebocoran kecairan

Apabila jumlah pasaran tidak mencukupi, strategi frekuensi tinggi sering mengalami kemerosotan yang lebih teruk; atau pesanan besar akan mendorong harga dengan cepat, menyebabkan beli rendah dan jual tinggi yang dijangkakan pada asalnya dipengaruhi oleh pesanan mereka sendiri, mengakibatkan penurunan pulangan.

Perubahan dalam turun naik pasaran

Sesetengah strategi berfungsi dengan baik di bawah volatiliti yang tinggi atau periode tertentu. Apabila pasaran rata atau turun naik turun dan leverage berkurangan, strategi kehilangan persekitaran yang sesuai dan bahkan mungkin mengalami kerugian yang kerap.

Ringkasan

Titik utama strategi perdagangan frekuensi tinggi terletak pada penangkapan harga dari pelbagai bursa dan penghakiman sintesis trend . Ia pernah merealisasikan kaedah perdagangan masuk dan keluar yang sangat kerap dan cepat berdasarkan prinsip Lead-Lag: memerhatikan pertukaran mana yang bergerak terlebih dahulu, dan kemudian mendorong bursa lain harga untuk mengikuti, dengan itu menangkap perbezaan harga serta-merta atau trend jangka pendek. Walau bagaimanapun, seperti yang dikatakan pengarang, perubahan dalam persekitaran pasaran, homogeniti strategi, yuran pengendalian dan had frekuensi telah menjadikan strategi ini yang bergantung pada langkah pertama dan kemudian bergerak perbezaan harga menjadi kurang berguna secara beransur-ansur, dan bahkan kehilangan keuntungan. Bagi mereka yang ingin meneroka jenis strategi Lead-Lag ini lagi, adalah perlu untuk mengoptimumkan modul perdagangan dalam kombinasi dengan struktur yuran pasaran terkini (likiditi, pengendalian algoritma, pencocokan peraturan risiko), sambil memberi perhatian kepada kawalan risiko, untuk mengekalkan daya saing dalam persekitaran pasaran yang terus berubah.


Lebih lanjut