Sumber dimuat naik... memuat...

Templat Strategi membolehkan anda menggunakan WebSocket Market dengan lancar

Penulis:FMZ~Lydia, Dicipta: 2024-10-30 14:23:04, Dikemas kini: 2024-11-05 17:44:35

img

Ini adalah templat pasaran WebSocket yang dibangunkan secara rasmi oleh FMZ. Selamat datang semua pengguna untuk menyalin dan menggunakannya:https://www.fmz.com/strategy/470349

Kenapa kita perlukan WebSocket?

Pada masa ini, strategi FMZ terutamanya berdasarkan pencapsulan API REST tradisional. Setiap langkah akses API memerlukan sambungan rangkaian untuk ditubuhkan, dan data pasaran diperoleh melalui tinjauan. Kaedah ini mudah dan mudah digunakan, dan ia cukup untuk kebanyakan keperluan.

Walau bagaimanapun, protokol REST mempunyai masalah kelewatan yang melekat. Apabila beberapa pasangan dagangan dan strategi pertukaran berbilang diperlukan, masalah kelewatan akan diperbesar. Walaupun fungsi Go platform dapat dilaksanakan secara serentak, masalah kelewatan masih wujud, yang menjadikannya sukar untuk memenuhi keperluan perdagangan strategi frekuensi yang agak tinggi. Di samping itu, jika terdapat terlalu banyak pasangan dagangan dan frekuensi pengundian terlalu cepat, ia akan menghadapi had frekuensi akses platform dagangan.

Pada masa ini, pelayan pertukaran juga berada di bawah beban yang berat. Mereka semua menyediakan protokol WebSocket yang lengkap dan mengesyorkannya kepada pengguna API. Berbanding dengan protokol REST, WebSocket menyediakan kaedah sambungan dua hala yang berterusan, yang membolehkan pertukaran mendorong data ke klien dalam masa nyata, mengelakkan permintaan dan tindak balas yang kerap, sehingga mengurangkan latensi. Secara umum, jika kelewatan dalam mengakses API REST adalah sekitar 20ms, kelewatan dalam mendorong data melalui WebSocket adalah kira-kira 2ms. Di samping itu, pautan ke protokol WebSocket tidak terhad oleh frekuensi akses platform, dan adalah mungkin untuk melanggan berpuluh-puluh pasangan perdagangan pada satu masa.

Pengenalan Templat WebSocket ticker

Platform FMZ Quant Trading telah menyokong protokol WebSocket untuk masa yang lama, dan ia agak mudah untuk dipanggil, tetapi untuk pengguna pemula, masih terlalu rumit untuk mengendalikan pelbagai langganan, melanggan ke pelbagai ticker pertukaran, dan menanamkan mereka dengan cekap dan mudah ke dalam keseluruhan proses strategi. Templat percepatan data ticker masa nyata WebSocket awam ini menyelesaikan masalah ini. Ia sangat mudah digunakan dan sepenuhnya serasi dengan panggilan API yang dikapsulkan semasa. Untuk kebanyakan strategi REST asal, anda hanya boleh memodifikasinya dan menggunakannya secara langsung untuk mempercepatkan strategi anda.

Ciri Utama:

  • Sokongan pelbagai pertukaran: Strategi ini menyokong sambungan WebSocket pelbagai pertukaran, seperti Binance, OKX, Bybit, Bitget, dll. Pengguna boleh mengikuti kaedah pembungkusan templat ini untuk menyokong lebih banyak pertukaran sendiri.
  • Langganan yang boleh disesuaikan: Ia membolehkan langganan saluran pasaran tertentu (seperti kedalaman, perdagangan, dll.) dan pemprosesan data yang diterima dengan cekap untuk kegunaan segera dalam strategi perdagangan.
  • Pengendalian ralat lanjutan: Mengekalkan pemantauan ralat dan mekanisme sambungan semula WebSocket untuk memastikan kebolehpercayaan dan kesinambungan aliran data.

Pengenalan ringkas kepada prinsip pelaksanaan

Perhatikan bahawa strategi ini menggunakan TypeScript. Jika anda hanya biasa dengan JavaScript, ia mungkin kelihatan sedikit pelik. TypeScript memperkenalkan sistem jenis dan ciri bahasa yang lebih kaya berdasarkan JavaScript. Untuk aplikasi seperti perdagangan kuantitatif yang perlu mengendalikan logik yang kompleks, menggunakan TypeScript dapat mengurangkan kemungkinan ralat dan meningkatkan kebolehbacaan dan penyelenggaraan kod. Oleh itu, disyorkan untuk mempelajarinya secara ringkas.

Di samping itu, strategi ini menggunakan mekanisme asynchronous platform FMZ. Thread anak boleh menghantar mesej ke thread utama melalui fungsi __threadPostMessage. Kaedah ini asynchronous dan sesuai untuk memberitahu thread utama pembaruan data yang dihasilkan dalam thread anak. Thread utama dan thread anak boleh berkongsi data melalui fungsi __threadGetData dan __threadSetData. Kaedah ini membolehkan utas untuk mengakses dan mengubah suai keadaan bersama. Jika anda ingin belajar tentang multithreading, digabungkan dengan dokumentasi platform, strategi ini juga merupakan contoh pembelajaran yang baik.

Prinsip utama strategi ini adalah untuk menyambung ke bursa mata wang digital arus perdana melalui WebSocket dan menerima data pasaran (seperti maklumat mendalam dan maklumat transaksi) dalam masa nyata untuk menyediakan sokongan data untuk keputusan perdagangan kuantitatif.

1. tetapan sambungan WebSocketFungsisetupWebsocketdigunakan untuk memulakan sambungan WebSocket dan menerima data pasaran.main_exchanges, menunjukkan pertukaran untuk disambungkan ke.

  • MyDial fungsi: Buat sambungan WebSocket, merakam masa sambungan, dan output masa penutupan apabila menutup sambungan.
  • updateSymbols fungsi: Semak secara berkala sama ada terdapat permintaan langganan baru dan mengemas kini senarai pasangan dagangan semasa jika perlu.

2. Pemprosesan dataObjeksupportsMenentukan pertukaran yang disokong dan fungsi pemprosesannya (sepertiBinanceFungsi pemprosesan untuk setiap pertukaran bertanggungjawab untuk menganalisis mesej yang diterima dan mengekstrak data yang relevan.

  • processMsg fungsi: Menganalisis mesej dari pertukaran, mengenal pasti pelbagai jenis data (seperti kemas kini mendalam, transaksi, dan lain-lain), dan memformatnya ke dalam objek peristiwa yang bersatu.

3. Data langgananPada setiap sambungan, sistem akan melanggan saluran data pasaran yang berkaitan berdasarkan pasangan dagangan semasa.

  • getFunction fungsi: Dapatkan fungsi pemprosesan yang sepadan mengikut nama pertukaran.
  • this.wssPublic fungsi: Memulakan sambungan WebSocket dan mula menerima data.

4. Pengurusan benangMulakan utas untuk setiap pertukaran, menerima data dalam masa nyata dan memproses data melalui fungsi panggilan balik.

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

5. Menulis semula kaedah pemerolehan dataMenulis semula kaedah untuk mendapatkan maklumat mendalam dan perdagangan untuk setiap bursa, memberi keutamaan untuk mengembalikan data yang dikemas kini dalam masa nyata.

Cara menggunakan templat

  1. Permulaan: Penggunaan$.setupWebsocket()untuk memulakan sambungan WebSocket pertukaran sasaran.
  2. Langganan: Sistem akan melanggan saluran yang relevan (seperti kedalaman, perdagangan, dan lain-lain) secara automatik untuk produk yang anda dagangkan.
  3. Pemerolehan data: Dengan memanggilGetDepth()danGetTrades()fungsi, kedalaman pasaran dan rekod transaksi secara automatik dikembalikan menggunakan data masa nyata WebSocket.
  4. Pengendalian ralat: Strategi ini merangkumi mekanisme pengesanan untuk mencatat kesalahan sambungan dan data, dan percubaan untuk menyambung semula secara automatik jika sambungan hilang.

Jika fungsi EventLoop() ditambahkan ke strategi, ia akan diubah menjadi mekanisme pencetus. Apabila terdapat kemas kini data wss, ia akan mendapatkannya secara automatik dengan serta-merta, dan menunggu jika tidak ada data terkini. Ia bersamaan dengan fungsi Tidur pintar. Sudah tentu, anda juga boleh menggunakan Tidur 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 perdagangan pelbagai mata wang saya sebelumnya:https://www.fmz.com/bbs-topic/10508, yang boleh diubahsuai dengan mudah untuk menyokong 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 lanjut