3
fokus pada
1444
Pengikut

Pengantar Arbitrase Lead-Lag dalam Cryptocurrency (3)

Dibuat di: 2024-12-24 15:43:36, diperbarui pada: 2024-12-26 12:14:45
comments   2
hits   2011

Pengantar Arbitrase Lead-Lag dalam Cryptocurrency (3)

Pada artikel sebelumnya, kami memperkenalkan arbitrase “arbitrase” lintas bursa. Kali ini, kita akan menyelami lebih dalam cara menerapkan efek Lead-Lag pada perdagangan frekuensi tinggi, yang memerlukan penangkapan perbedaan harga yang sangat kecil dalam waktu yang sangat singkat dan menghasilkan keuntungan cepat. Efek Lead-Lag memberi pedagang informasi prediktif, membantu mereka menentukan tren harga jangka pendek dan dengan demikian mencapai arbitrase antara bursa yang berbeda.

Berikut ini adalahPenyederhanaan kode publik, dan dikonversi ke FMZ berbasis API. Prinsip kode dari strategi asli ini sangat sederhana dan dulunya sangat menguntungkan. Saat ini tidak tersedia dan hanya untuk referensi.


Prinsip Strategi Frekuensi Tinggi Lead-Lag

Yang disebut dengan “Lead-Lag” dapat dipahami sebagai harga (atau indikator tertentu) dari beberapa bursa akan lebih “memimpin” dalam perubahan pasar secara keseluruhan, sementara bursa atau indikator lain akan relatif “tertinggal” (Lag) . Dalam strategi ini, “Harga_1, Harga_2, Harga_3” mewakili kondisi pasar dari berbagai bursa. Bursa-bursa tersebut merupakan bursa utama, yang lebih sensitif terhadap berita pasar, atau kedalaman perdagangan dan jenis pesertanya. Setelah ada order beli atau jual yang besar, harga di bursa ini akan berfluktuasi terlebih dahulu. Fluktuasi harga di bursa perdagangan aktual akan sedikit tertinggal karena faktor-faktor seperti mekanisme pencocokan dan kelompok perdagangan. Pada titik ini, situasi “ada yang memimpin dan ada yang tertinggal” muncul.

Perayapan buku pesanan multi-pertukaran

Strategi ini memperoleh data buku pesanan dari bursa yang berbeda secara hampir sinkron, seperti harga penawaran terbaik, harga permintaan terbaik, volume pesanan tertunda, dll. Harga tengah (yaitu rata-rata harga bid dan ask) di berbagai bursa kemudian dibandingkan untuk menyimpulkan dinamika pasar.

Penilaian sinyal tren

Strategi ini terutama berfokus pada perubahan harga tiga bursa eksternal (okex, binance, huobipro):

Di sini, setiap trenX ditentukan oleh perbedaan antara “harga saat ini” dan “harga masa lalu” yang melampaui ambang batas tertentu (level * kenaikan_harga). Setelah menambahkan sinyal “naik/turun” dari tiga bursa, jika tren keseluruhan > 0, berarti pasar secara umum sedang naik, dan strateginya adalah membeli; jika tren < 0, berarti pasar secara umum sedang naik, dan strateginya adalah membeli. jatuh, dan strateginya adalah Jual.

Perintah satu arah dan pengendalian risiko

Strategi ini hanya membeli atau menjual setelah tren terkonfirmasi, dan membatalkan pesanan sebelumnya sebelum menempatkan setiap pesanan (yaitu, untuk menghindari pesanan tertunda yang tidak disengaja yang menyebabkan akumulasi risiko). Pada saat yang sama, skrip ini juga menyiapkan modul seperti leverage, operasi batch, dan pemantauan pengendalian risiko, yang berarti bahwa beberapa akun dan beberapa pasangan mata uang digunakan dalam perdagangan sebenarnya, sehingga memperluas “frekuensi perdagangan” dan “Efisiensi pemanfaatan modal”.

Selain itu, strategi ini adalah strategi frekuensi tinggi. Anda tidak perlu memperhatikan untung atau rugi setiap order, juga tidak perlu menghentikan kerugian. Anda dapat melanjutkan selama ada kemungkinan besar untuk membuat order. laba.


Implementasi strategi FMZ

Pengaturan parameter

// 超参设置
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;

Logika inti: memperoleh data dan menilai tren

// 获取订单簿数据
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); // 返回总体趋势
}

Menempatkan dan membatalkan pesanan

// 取消所有挂单
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}`);
    }
}

Logika strategi utama

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

Analisis penyebab kegagalan strategi

Pasar menjadi efisien

Ketika semakin banyak strategi kuantitatif atau frekuensi tinggi terlibat dan menemukan hubungan Lead-Lag yang sama, sejumlah besar dana akan dengan cepat menghilangkan perbedaan harga. Seiring dengan semakin “sinkronnya” pasar, semakin sulit bagi strategi untuk membuat arbitrase “bebas risiko” atau jangka pendek dari perbedaan harga yang kecil.

Pembatasan pertukaran atau perubahan biaya

Karena struktur biaya di berbagai bursa berubah, begitu biaya melebihi keuntungan arbitrase, profitabilitas strategi perdagangan frekuensi tinggi akan sangat berkurang. Atau, jika pertukaran mempercepat proses pencocokan, membatasi frekuensi dan kuantitas, dan mengurangi latensi, strategi yang mengandalkan latensi yang tidak konsisten akan menjadi tidak efektif.

Penurunan dan penurunan likuiditas

Ketika volume pasar tidak mencukupi, strategi frekuensi tinggi sering kali mengalami penurunan harga yang lebih parah; atau pesanan dalam jumlah besar akan dengan cepat menaikkan harga, menyebabkan ekspektasi awal untuk “beli pada harga rendah dan jual pada harga tinggi” menjadi terpengaruh oleh pesanan mereka sendiri, sehingga mengakibatkan penurunan keuntungan. .

Perubahan volatilitas pasar

Beberapa strategi bekerja dengan sangat baik dalam “volatilitas tinggi” atau “siklus tertentu”. Ketika pasar datar atau volatilitas menurun dan leverage berkurang, strategi tersebut kehilangan lingkungan yang sesuai dan bahkan dapat menimbulkan kerugian yang sering terjadi.


Meringkaskan

Poin utama dari strategi perdagangan frekuensi tinggi ini terletak pada penangkapan harga dari berbagai bursa dan penilaian “sintesis tren”. Pernah menerapkan metode perdagangan masuk dan keluar cepat dengan frekuensi sangat tinggi berdasarkan prinsip Lead-Lag: mengamati pergerakan harga bursa mana yang pertama, dan kemudian mendorong harga bursa lain untuk mengikutinya, sehingga menangkap perbedaan harga seketika atau tren jangka pendek. . Namun, sebagaimana dikatakan penulis, perubahan dalam lingkungan pasar, homogenitas strategi, biaya dan batasan frekuensi telah membuat strategi yang mengandalkan spread “langkah pertama, langkah terakhir” ini secara bertahap menjadi kurang bermanfaat dan bahkan kehilangan profitabilitasnya. Bagi mereka yang ingin menjajaki strategi Lead-Lag jenis ini, mereka perlu mengoptimalkan modul perdagangan yang dikombinasikan dengan struktur pasar terkini (likuiditas, aturan biaya, kecepatan pencocokan algoritma), dan memperhatikan manajemen pengendalian risiko, sehingga dapat bertahan hidup dalam lingkungan pasar yang terus berubah. Mempertahankan daya saing yang berkelanjutan.