Sumber daya yang dimuat... Pemuatan...

Template Strategi Memungkinkan Anda Menggunakan WebSocket Market Seamlessly

Penulis:FMZ~Lydia, Dibuat: 2024-10-30 14:23:04, Diperbarui: 2024-11-01 10:37:04

img

Ini adalah template pasar WebSocket yang secara resmi dikembangkan oleh FMZ. Selamat datang semua pengguna untuk menyalin dan menggunakannya:https://www.fmz.com/strategy/470349

Mengapa kita perlu WebSocket?

Saat ini, strategi FMZ terutama didasarkan pada enkapsulasi API REST tradisional. Setiap langkah akses API membutuhkan koneksi jaringan untuk didirikan, dan data pasar diperoleh melalui jajak pendapat.

Namun, protokol REST memiliki masalah keterlambatan yang melekat. Ketika beberapa pasangan perdagangan dan strategi multi-pertukaran diperlukan, masalah keterlambatan akan diperbesar. Meskipun fungsi Go dari platform dapat dijalankan secara bersamaan, masalah keterlambatan masih ada, yang membuat sulit untuk memenuhi kebutuhan perdagangan strategi frekuensi yang relatif tinggi. Selain itu, jika ada terlalu banyak pasangan perdagangan dan frekuensi pemungutan suara terlalu cepat, itu akan menghadapi batas frekuensi akses dari platform perdagangan.

Saat ini, server pertukaran juga berada di bawah beban berat. Mereka semua menyediakan protokol WebSocket lengkap dan merekomendasikannya kepada pengguna API. Dibandingkan dengan protokol REST, WebSocket menyediakan metode koneksi dua arah yang berkelanjutan, yang memungkinkan pertukaran untuk mendorong data ke klien secara real time, menghindari permintaan dan tanggapan yang sering, sehingga sangat mengurangi latensi. Secara umum, jika keterlambatan mengakses API REST sekitar 20ms, keterlambatan mendorong data melalui WebSocket sekitar 2ms. Selain itu, tautan ke protokol WebSocket tidak dibatasi oleh frekuensi akses platform, dan dimungkinkan untuk berlangganan lusinan pasangan perdagangan sekaligus.

Pendahuluan template ticker WebSocket

FMZ Quant Trading platform telah mendukung protokol WebSocket untuk waktu yang lama, dan relatif nyaman untuk menelepon, tetapi untuk pengguna pemula, masih terlalu rumit untuk menangani beberapa langganan, berlangganan ke beberapa ticker pertukaran, dan menanamkan mereka secara efisien dan nyaman ke dalam seluruh proses strategi. Templat akselerasi data ticker real-time WebSocket publik ini memecahkan masalah ini. Sangat mudah digunakan dan sepenuhnya kompatibel dengan panggilan API yang terkapas saat ini. Untuk sebagian besar strategi REST asli, Anda hanya dapat memodifikasinya dan menggunakannya secara langsung untuk mempercepat strategi Anda.

Fitur Utama:

  • Dukungan multi-exchange: Strategi ini mendukung koneksi WebSocket dari beberapa pertukaran, seperti Binance, OKX, Bybit, Bitget, dll. Pengguna dapat mengikuti metode pengemasan templat ini untuk mendukung lebih banyak pertukaran sendiri.
  • Langganan yang dapat disesuaikan: Hal ini memungkinkan langganan saluran pasar tertentu (seperti kedalaman, perdagangan, dll.) dan pengolahan yang efisien dari data yang diterima untuk penggunaan segera dalam strategi perdagangan.
  • Penanganan kesalahan lanjutan: Mekanisme pelacakan kesalahan dan koneksi ulang WebSocket untuk memastikan keandalan dan kontinuitas aliran data.

Pendahuluan singkat tentang prinsip pelaksanaan

Perhatikan bahwa strategi ini menggunakan TypeScript. Jika Anda hanya akrab dengan JavaScript, mungkin terlihat sedikit aneh. TypeScript memperkenalkan sistem tipe dan fitur bahasa yang lebih kaya berdasarkan JavaScript. Untuk aplikasi seperti perdagangan kuantitatif yang perlu menangani logika yang kompleks, menggunakan TypeScript dapat mengurangi kemungkinan kesalahan dan meningkatkan keterbacaan dan pemeliharaan kode. Oleh karena itu, disarankan untuk mempelajarinya secara singkat.

Selain itu, strategi ini menggunakan mekanisme asinkron dari platform FMZ. Thread anak dapat mengirim pesan ke thread utama melalui fungsi __threadPostMessage. Metode ini asinkron dan cocok untuk memberi tahu thread utama pembaruan data yang dihasilkan di thread anak. Thread utama dan thread anak dapat berbagi data melalui fungsi __threadGetData dan __threadSetData. Metode ini memungkinkan thread untuk mengakses dan memodifikasi keadaan bersama. Jika Anda ingin belajar tentang multithreading, dikombinasikan dengan dokumentasi platform, strategi ini juga merupakan contoh pembelajaran yang baik.

Prinsip utama dari strategi ini adalah untuk terhubung ke pertukaran mata uang digital arus utama melalui WebSocket dan menerima data pasar (seperti informasi mendalam dan informasi transaksi) secara real time untuk memberikan dukungan data untuk keputusan perdagangan kuantitatif.

1. pengaturan koneksi WebSocketFungsisetupWebsocketdigunakan untuk menginisialisasi koneksi WebSocket dan menerima data pasar.main_exchanges, menunjukkan pertukaran untuk terhubung ke.

  • MyDial fungsi: Buat koneksi WebSocket, rekam waktu koneksi, dan output waktu penutupan saat menutup koneksi.
  • updateSymbols fungsi: Periksa secara teratur apakah ada permintaan langganan baru dan perbarui daftar pasangan perdagangan saat ini sesuai kebutuhan.

2. Pengolahan dataObjeknyasupportsmendefinisikan pertukaran yang didukung dan fungsi pemrosesan mereka (sepertiBinanceFungsi pemrosesan untuk setiap pertukaran bertanggung jawab untuk menganalisis pesan yang diterima dan mengekstrak data yang relevan.

  • processMsg fungsi: Mengolah pesan dari pertukaran, mengidentifikasi berbagai jenis data (seperti pembaruan mendalam, transaksi, dll.), Dan memformatnya menjadi objek acara yang terpadu.

3. Data langgananPada setiap koneksi, sistem akan berlangganan saluran data pasar yang relevan berdasarkan pasangan perdagangan saat ini.

  • getFunction fungsi: Dapatkan fungsi pemrosesan sesuai dengan nama pertukaran.
  • this.wssPublic fungsi: Inisialisasi koneksi WebSocket dan mulai menerima data.

4. Manajemen threadMemulai thread untuk setiap pertukaran, menerima data secara real-time dan memproses data melalui fungsi callback.

  • threadMarket fungsi: Menerima data dalam utas anak, menganalisis dan menyimpan informasi kedalaman dan transaksi terbaru.

5. Menulis ulang metode pengumpulan dataMenulis ulang metode untuk mendapatkan informasi mendalam dan perdagangan untuk setiap bursa, memberikan prioritas untuk mengembalikan data yang diperbarui secara real-time.

Cara menggunakan template

  1. Inisialisasi: Penggunaan$.setupWebsocket()untuk menginisialisasi koneksi WebSocket dari pertukaran target.
  2. Langganan: Sistem akan berlangganan saluran yang relevan (seperti kedalaman, perdagangan, dll) secara otomatis untuk produk yang Anda jual.
  3. Pengumpulan data: Dengan memanggilGetDepth()danGetTrades()fungsi, kedalaman pasar dan catatan transaksi dikembalikan secara otomatis menggunakan data WebSocket real-time.
  4. Penanganan kesalahan: Strategi ini mencakup mekanisme pelacakan untuk mencatat kesalahan koneksi dan data, dan upaya untuk terhubung kembali secara otomatis jika koneksi hilang.

Jika fungsi EventLoop() ditambahkan ke strategi, itu akan berubah menjadi mekanisme pemicu. Ketika ada pembaruan data wss, itu akan secara otomatis mendapatkannya segera, dan menunggu jika tidak ada data terbaru. Ini setara dengan fungsi Sleep cerdas. Tentu saja, Anda juga dapat menggunakan Sleep secara langsung.

function main() {
    $.setupWebsocket()
    while (true) {
        exchanges.map(e=>{
            Log(e.GetName(), e.GetDepth())
            Log(e.GetName(), e.GetTrades())
        })
        EventLoop(100) // trigger by websocket
    }
}

Lihat panduan strategi trading multi-mata uang saya sebelumnya:https://www.fmz.com/bbs-topic/10508, yang dapat dimodifikasi dengan mudah untuk mendukung WebSocket:

function MakeOrder() {
    for (let i in Info.trade_symbols) {
        let symbol = Info.trade_symbols[i];
        let buy_price = exchange.GetDepth(symbol + '_USDT').Asks[0].Price;
        let buy_amount = 50 / buy_price;
        if (Info.position[symbol].value < 2000){
            Trade(symbol, "buy", buy_price, buy_amount, symbol);
        }
    }
}

function OnTick() {
    try {
        UpdatePosition();
        MakeOrder();
        UpdateStatus();
    } catch (error) {
        Log("loop error: " + error);
    }
}

function main() {
    $.setupWebsocket()
    InitInfo();
    while (true) {
        let loop_start_time = Date.now();
        if (Date.now() - Info.time.last_loop_time > Info.interval * 1000) {
            OnTick();
            Info.time.last_loop_time = Date.now();
            Info.time.loop_delay = Date.now() - loop_start_time;
        }
        Sleep(5);
    }
}

Lebih banyak