Mengajar anda bagaimana untuk membiarkan strategi lama dok websocket petikan antara muka

Penulis:Kebaikan, Dicipta: 2019-10-08 14:56:58, Dikemas kini: 2023-11-06 19:41:28

img

Terdapat banyak strategi menarik di halaman persegi (https://www.fmz.com/squarePada masa itu, kebanyakan pertukaran mata wang kripto menggunakan antara muka APIrestbanyak strategi yang berasaskanrestOleh itu, kadang-kadang kemas kini sebut harga pasaran adalah perlahan.restAntara muka gagal dalam masa terdekat, mengakibatkan strategi yang tidak dapat melakukan dengan betul.

Selagi strategi diubah suai, menambah sokongan untuk antara muka websocket memerlukan beberapa perubahan pada kod strategi, yang biasanya agak menyusahkan (kesukaran mengubah strategi jauh lebih tinggi daripada menulis semula).

Bagaimana kita boleh tidak mengubah kod strategi, tetapi menggunakan antara muka sebut harga pasaran websocket?

Inilah fleksibiliti penuh platform FMZ Quant, kita boleh gunakan:

  • Gunakan strategi template class library.

  • Melakukan operasi Hook untuk harga pasaran pertukaran mendapatkan fungsi sepertiexchange.GetTicker.

Oleh itu, tanpa mengubah kod strategi, biar strategi menggunakan data didorong dan didorong olehwebsocketantara muka pasaran.

Bahasa penulisan kod menggunakan bahasa pengaturcaraan JavaScript.

Strategi analisis

Sebagai contoh, apabila kita perlu mengubah strategi klasik Icebreaker

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

Mari kita lihat kod strategi dan mendapati bahawa strategi ini didorong olehtickIa terutamanya menggunakan sifat-sifatBuy, Sell, danLastdalamtickerdata.tickerdata diperoleh oleh fungsi API platform FMZ Quant:exchange.GetTickerMatlamatnya jelas sekarang, kita boleh menggantikanexchange.GetTickerfungsi denganHookoperasi (iaitu, menggantikannya dengan versi lain).

Walau bagaimanapun, kita tidak boleh menulis semula dalam icebreaker kod strategi, ia akan menjejaskan logik strategi, kita mahu berlandaskan lancar ke websocket!

Jadi kita perlukan protagonis seterusnya untuk debut.

Fungsi template class library dan fungsi init bekerjasama

Kita mencipta template class library bernama: SeamlessConnWS

img

Kemudian menetapkan 2 parameter kepadaSeamlessConnWS template.

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

Kedua-dua ini digunakan untuk mengawal sama ada untuk menggunakanwebsocketfungsi antara muka, dan kawalan menentukan untuk membuka antara muka sebut harga pasaran tertentu.hookoperasi untukexchange.GetTickerOleh itu, kita perlu membolehkan parameterHook_GetTicker) daripadaGetTickerantara muka kewebsocket mode.

Setelah templat dicipta, kita boleh menulis akses khusus kepada pertukaranswebsocketAntara muka dalam templat, melanggan petikan tertentu, dan kemudian menunggu kod fungsi pertukaran untuk memindahkan data. kod tertentu tidak diterangkan di sini, anda boleh merujuk kepadaSeamlessConnWSSatu perkara yang perlu disebutkan adalah bahawainitfungsi dalam templat dan pembolehubah global_DictConnectCreater, _ConnMap:

Bahagian kod:

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

Ia boleh dilihat bahawa templat ini hanya melaksanakanwebsocketantara muka pasaran dua bursa, yang merupakan Binance dan Huobi.initfungsi adalah untuk memastikan bahawa apabila Icebreaker strategi memanggilSeamlessConnWStemplat,initfungsi akan dilaksanakan pertama semasa pasaran sebenar berjalan kemajuan.

kita boleh menggantikan kandunganexchange.GetTickerfungsi dengan kod menggunakanwebsocketantara muka, dengan itu mencapai dok lancar ke pasaran websocket.

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

Cara menggunakannya

Sepotong kek!SeamlessConnWStemplat ke dalam perpustakaan strategi anda, anda hanya boleh menggunakan Icebreaker strategi untuk merujuknya, seperti yang ditunjukkan dalam gambar:

img

pastikan untuk mengklik semak templat, dan butang simpan.

Buat Icebreaker strategi robot masa nyata, pertukaran memilih pasangan dagangan.

img

Buka parameter kawalan padaSeamlessConnWS template.

img

Jalankan ke atas:

img

Untuk mudah melihat data yang ditarik, pada baris 157, kami secara khusus menambah kod log cetak, ia akan mengeluarkan data yang ditarik oleh pertukaran.

img

Tampilan pada log robot:

img

Dengan cara ini, kita tidak perlu mengubah suai mana-mana baris kod strategi, dan mencapai penyambungan lancar denganwebsocketantara muka pasaran.

Contoh ini hanya untuk strategi menggunakanexchange.GetTickerfungsi antara muka pasaran, antara muka pasaran lain sepertiexchange.GetDepth, exchange.GetTradesdanexchange.GetRecordsuntuk templat standardSeamlessConnWS, anda boleh cuba untuk memperluaskan lebih lanjut.

Untuk pelaksanaan pautan khususwebsocketDalam templat, gunakanDialfungsi (lihat dokumentasi API mengenai fungsi Dial), yang boleh diselaraskan seperti yang diperlukan.read()fungsi, yang mengembalikan hanya data terkini dalam penyangga yangwebsocketSambungan diterima.

Terima kasih kerana membaca.


Berkaitan

Lebih lanjut