
Pada Platform Dagangan Kuantitatif PenciptaDataran StrategiTerdapat banyak strategi menarik di Internet Pada masa itu, kebanyakan pertukaran mata wang digital digunakanrestAntara muka API protokol, banyak strategi berdasarkanrestAntara muka, kadangkala kemas kini pasaran adalah perlahan. Di samping itu, beberapa pertukaran telah muncul baru-baru inirestKegagalan antara muka menyebabkan dasar tidak boleh digunakan. Jika dasar itu diubah suai, tambahwebsocketSokongan antara muka memerlukan perubahan tertentu pada kod strategi, yang biasanya menyusahkan (menukar strategi adalah lebih sukar daripada menulis semula).
Bagaimanakah saya boleh menggunakan strategi yang sama tanpa mengubahnya?websocketBagaimana pula dengan antara muka pasaran?
Ini menunjukkan sepenuhnya fleksibiliti hebat Platform Dagangan Kuantitatif Pencipta Kami boleh:
exchange.GetTicker Operasi Cangkuk Fungsi untuk mendapatkan maklumat pasaran.Ini membolehkan strategi dikawal olehwebsocketData yang didorong oleh antara muka pasaran sedang berjalan.
Bahasa pengekodan yang digunakanJavaScriptbahasa.
Sebagai contoh, kami ingin mengubah suai strategi lama klasik “Pemecah Ais”
Mari kita lihat dahulu kod strategi dan mendapati bahawa strategi didorong oleh keadaan pasaran semak dan terutamanya menggunakantickerDalam dataBuy、Sell、LastSifat-sifat ini,tickerData diperoleh daripada fungsi API platform FMZ:exchange.GetTicker Dapatkan. Dengan cara ini matlamatnya jelas.exchange.GetTickerfungsiHookOperasi (iaitu menulis semula dengan versi lain dan menggantikannya) adalah semua yang diperlukan.
Walau bagaimanapun, kami tidak boleh menulis semula strategi Icebreaker kerana ia akan menjejaskan strategi yang kami mahukan ialah sambungan yang lancar! !
Jadi protagonis seterusnya perlu muncul.
initPenyelarasan fungsiKami mencipta “pustaka templat” dan namakannya:SeamlessConnWS, kosongkan kod awal.

Kemudian berikanSeamlessConnWSTemplat menetapkan 2 parameter

Digunakan untuk mengawal sama ada untuk mendayakan atau melumpuhkanwebsocketFungsi antara muka, mengawal dan menentukan pembukaan antara muka pasaran tertentu. Oleh kerana ruang terhad, sahajaexchange.GetTickerAntara muka menjalankan operasi cangkuk. Jadi parameter hanya didayakanGetTickerAntara muka ialah parameter kawalan mod soket web: Hook_GetTicker.
Setelah templat dibuat, anda boleh menulis pertukaran khusus untuk diakses dalam templatwebsocketAntara muka, langgan petikan tertentu, dan kemudian tunggu pertukaran untuk menolak data. Kod khusus tidak akan diulang di sini Anda boleh merujuk kepada kod SeamlessConnWS (tersedia secara umum) dan dokumentasi API. Apa yang anda perlu lihat ialah templatinitFungsi dan pembolehubah global_DictConnectCreater、_ConnMap:
Kod:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "没有找到实现"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
Anda dapat melihat bahawa templat ini hanya melaksanakan 2 pertukaran.websocketAntara muka pasaran ialah Binance Spot dan Huobi Spot.initFungsinya adalah untuk membenarkan strategi “Pemecah Ais” merujukSeamlessConnWSSelepas templat dicipta, apabila cakera sebenar dijalankan, perkara pertama yang perlu dilakukan ialah melaksanakaninitFungsi, yang boleh secara automatikexchange.GetTickerGantikan kandungan fungsi denganwebsocketPelaksanaan kod antara muka untuk mencapai sambungan yang lancarwebsocketPetikan.
Ia sangat mudah! himpunanSeamlessConnWSSelepas menyalin templat ke pustaka strategi anda sendiri, anda hanya perlu merujuknya dalam strategi “Pemecah Ais”, seperti yang ditunjukkan dalam rajah:

Semak, simpan dan anda selesai.
Cipta robot masa nyata strategi “Pemecah Ais” dan pilih Binance sebagai pertukaran
.
BukaSeamlessConnWSKawal parameter pada templat.

Jalankan ia:

Untuk memudahkan untuk melihat data ditolak, saya menambah kod log cetak dalam baris 157, yang akan mengeluarkan data yang ditolak oleh pertukaran.

Log robot menunjukkan:

Dengan cara ini, tidak perlu mengubah suai satu baris kod strategi, dan penyepaduan lancar antara muka dan strategi pasaran websocket dicapai.
Contoh ini hanya untuk digunakanexchange.GetTickerStrategi fungsi antara muka pasaran dijelaskan Antara muka pasaran lain sepertiexchange.GetDepth、exchange.GetTrades 、exchange.GetRecordsIa adalah rutin yang sama! Untuk contoh templatSeamlessConnWS, yang boleh diperluaskan lagi.
Untuk pautan khusus dalam templatwebsocketPelaksanaan menggunakanDialFungsi (lihat dokumentasi API Fungsi Dail), yang boleh dilaraskan mengikut keperluan. Sebagai contoh, anda boleh memberiread()Parameter yang ditentukan fungsi-2, iaitu hanya kembaliwebsocketSambungan menerima data terkini dalam penimbalnya.
Terima kasih kerana membaca