Mengajarkan Anda bagaimana membiarkan strategi lama mendok antarmuka kutipan websocket

Penulis:Kebaikan, Dibuat: 2019-10-08 14:56:58, Diperbarui: 2023-11-06 19:41:28

img

Ada banyak strategi menarik di halaman persegi (https://www.fmz.com/squarePada saat itu, sebagian besar pertukaran cryptocurrency menggunakan antarmuka APIrestBanyak strategi didasarkan padarestDi samping itu, ada beberapa kasus di mana bursarestantarmuka gagal dalam waktu dekat, mengakibatkan strategi yang tidak dapat melakukan dengan benar.

Selama strategi dimodifikasi, menambahkan dukungan untuk antarmuka websocket membutuhkan beberapa perubahan pada kode strategi, yang biasanya agak merepotkan (kesulitan mengubah strategi jauh lebih tinggi daripada menulis ulang).

Bagaimana kita tidak bisa mengubah kode strategi, tapi menggunakan antarmuka penawaran pasar websocket?

Berikut adalah fleksibilitas penuh dari platform FMZ Quant, kita dapat menggunakan:

  • Gunakan strategi template class library.

  • Melakukan operasi Hook untuk penawaran pasar pertukaran yang mendapatkan fungsi sepertiexchange.GetTicker.

Dengan demikian, tanpa mengubah kode strategi, biarkan strategi menggunakan data didorong dan didorong olehwebsocketantarmuka pasar

Bahasa penulisan kode menggunakan bahasa pemrograman JavaScript.

Strategi analisis

Misalnya, ketika kita perlu memodifikasi strategi klasik Icebreaker

Alamat strategi:https://www.fmz.com/strategy/9929

Mari kita lihat kode strategi dan menemukan bahwa strategi ini didorong olehtickHal ini terutama menggunakan sifat-sifat dariBuy, Sell, danLastdalamtickerdata.tickerdata diperoleh oleh fungsi API dari platform FMZ Quant:exchange.GetTickerTujuan jelas sekarang, kita bisa menggantikanexchange.GetTickerfungsi denganHookoperasi (yaitu, menggantinya dengan versi lain).

Namun, kita tidak bisa menulis ulang dalam kode strategi icebreaker, itu akan mempengaruhi logika strategi, kita ingin berlabuh dengan mulus ke websocket!

Jadi kita perlu protagonis berikutnya untuk debut.

Fungsi template class library dan fungsi init bekerja sama

Kita membuat template class library bernama: SeamlessConnWS

img

Kemudian atur 2 parameter untukSeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Kedua ini digunakan untuk mengontrol apakah untuk menggunakanwebsocketfungsi antarmuka, dan kontrol menentukan untuk membuka antarmuka penawaran pasar tertentu.hookoperasi untukexchange.GetTickerOleh karena itu kita perlu mengaktifkan parameterHook_GetTicker) dariGetTickerantarmuka kewebsocket mode.

Setelah template dibuat, kita bisa menulis akses khusus ke exchangeswebsocketinterface dalam template, berlangganan kutipan tertentu, dan kemudian menunggu kode fungsi dari bursa untuk mendorong data. kode spesifik tidak dijelaskan di sini, Anda dapat merujuk padaSeamlessConnWSkode (sudah open source) dan FMZ Quant resmi API dokumentasi.initfungsi dalam template dan variabel global_DictConnectCreater, _ConnMap:

Bagian kode:

var _DictConnectCreater = {
    "Huobi" : WSConnecter_Huobi,
    "Binance" : WSConnecter_Binance,
}

var _ConnMap = {}

function init () {
    if (IsUsedWebSocket) {
        var connectCreater = null
        if (exchanges.length != 1) {
            Log("Switching to the ws interface only for the "exchange" exchange object (ie, the first added exchange object)")
        }
        var isFound = false 
        for (var name in _DictConnectCreater) {
            if (exchange.GetName() == name) {
                connectCreater = _DictConnectCreater[name]
                isFound = true
            }
        }

        if (!isFound) {
            throw "Did not find an implementation"
        }
        
        if (Hook_GetTicker) {
            var symbol = exchange.GetCurrency()
            _ConnMap.GetTicker = connectCreater("GetTicker", symbol)
            exchange.GetTicker = function () {
                return _C(_ConnMap.GetTicker.Read)
            }
        }
        // ... 
        
    }
}

Hal ini dapat dilihat bahwa templat ini hanya menerapkanwebsocketpasar antara dua bursa, yaitu Binance dan Huobi.initfungsi adalah untuk memastikan bahwa ketika Icebreaker strategi memanggilSeamlessConnWStemplat,initfungsi akan dilaksanakan pertama selama kemajuan pasar yang sebenarnya berjalan.

kita dapat mengganti isi dariexchange.GetTickerfungsi dengan kode menggunakanwebsocketantarmuka, sehingga mencapai docking mulus ke pasar websocket.

SeamlessConnWSAlamat templat:https://www.fmz.com/strategy/167755

Cara menggunakannya

Setelah menyalinSeamlessConnWStemplate ke dalam perpustakaan strategi Anda, Anda hanya dapat menggunakan Icebreaker strategi untuk mereferensinya, seperti yang ditunjukkan dalam gambar:

img

Pastikan untuk mengklik cek template, dan tombol simpan.

Buat Icebreaker strategi real-time robot, pertukaran memilih pasangan perdagangan.

img

Buka parameter kontrol padaSeamlessConnWS template.

img

Pergi ke atas:

img

Untuk dengan mudah melihat data yang didorong, pada baris 157, kami secara khusus menambahkan kode log cetak, itu akan output data yang didorong oleh pertukaran.

img

Tampilan di log robot:

img

Dengan cara ini, kita tidak perlu memodifikasi baris mana pun dari kode strategi, danwebsocketantarmuka pasar

Contoh ini hanya untuk strategi menggunakanexchange.GetTickerfungsi antarmuka pasar, antarmuka pasar lainnya sepertiexchange.GetDepth, exchange.GetTradesdanexchange.GetRecordsUntuk template standarSeamlessConnWS, Anda bisa mencoba memperluasnya lebih lanjut.

Untuk pelaksanaan hubungan khususwebsocketDalam template, gunakanDialfungsi (lihat dokumentasi API tentang fungsi Dial), yang dapat disesuaikan sesuai kebutuhan.read()fungsi, yang mengembalikan hanya data terbaru di buffer yangwebsocketkoneksi menerima.

Terima kasih sudah membaca.


Berkaitan

Lebih banyak