
Pada Platform Perdagangan Kuantitatif InventorStrategi PersegiAda banyak strategi menarik di Internet. Pada saat itu, sebagian besar pertukaran mata uang digital menggunakanrestAntarmuka API protokol, banyak strategi didasarkan padarestAntarmuka, terkadang pembaruan pasar lambat. Selain itu, beberapa bursa baru-baru ini munculrestKegagalan antarmuka menyebabkan kebijakan tidak dapat digunakan. Jika kebijakan dimodifikasi, tambahkanwebsocketDukungan antarmuka memerlukan perubahan tertentu pada kode strategi, yang biasanya merepotkan (mengubah strategi jauh lebih sulit daripada menulis ulang).
Bagaimana saya dapat menggunakan strategi yang sama tanpa mengubahnya?websocketBagaimana dengan antarmuka pasar?
Hal ini sepenuhnya menunjukkan fleksibilitas yang kuat dari Platform Perdagangan Kuantitatif Inventor. Kami dapat:
exchange.GetTicker Fungsi Operasi kait untuk memperoleh informasi pasar.Hal ini memungkinkan strategi untuk dikontrol olehwebsocketData yang digerakkan oleh antarmuka pasar sedang berjalan.
Bahasa pengkodean yang digunakanJavaScriptbahasa.
Misalnya, kami ingin memodifikasi strategi lama klasik “Icebreaker”
Mari kita lihat kode strategi terlebih dahulu dan temukan bahwa strategi ini didorong oleh kondisi pasar tick dan terutama menggunakantickerDalam dataBuy、Sell、LastAtribut-atribut ini,tickerData diperoleh dari fungsi API platform FMZ:exchange.GetTicker Mendapatkan. Dengan cara ini tujuannya jelas.exchange.GetTickerfungsiHookOperasinya (yakni menulis ulang dengan versi lain dan menggantinya) adalah semua yang dibutuhkan.
Namun, kami tidak dapat menulis ulang strategi Icebreaker karena hal itu akan memengaruhi strategi. Yang kami inginkan adalah koneksi yang lancar! !
Jadi protagonis berikutnya perlu muncul.
initKoordinasi fungsiKami membuat “perpustakaan templat” dan menamainya:SeamlessConnWS, hapus kode awal.

Lalu berikanSeamlessConnWSTemplate menetapkan 2 parameter

Digunakan untuk mengontrol apakah akan mengaktifkan atau menonaktifkanwebsocketFungsi antarmuka, mengontrol dan menentukan pembukaan antarmuka pasar tertentu. Dalam contoh ini, karena keterbatasan ruang, hanyaexchange.GetTickerAntarmuka melakukan operasi pengait. Jadi parameternya hanya diaktifkanGetTickerAntarmuka adalah parameter kontrol mode websocket: Hook_GetTicker.
Setelah template dibuat, Anda dapat menulis pertukaran spesifik untuk mengakses template tersebutwebsocketAntarmuka, berlangganan kutipan tertentu, lalu tunggu bursa mengirimkan data. Kode spesifik tidak akan diulang di sini. Anda dapat merujuk ke kode SeamlessConnWS (tersedia untuk umum) dan dokumentasi API. Yang perlu Anda lihat adalah templatenyainitFungsi dan variabel global_DictConnectCreater、_ConnMap:
Kode:
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 bahwa templat ini hanya mengimplementasikan 2 pertukaran.websocketAntarmuka pasar adalah Binance Spot dan Huobi Spot.initFungsinya adalah untuk memungkinkan strategi “Icebreaker” untuk merujukSeamlessConnWSSetelah template dibuat, ketika disk nyata dijalankan, hal pertama yang harus dilakukan adalah mengeksekusiinitFungsi yang dapat secara otomatisexchange.GetTickerGanti konten fungsi denganwebsocketImplementasi kode antarmuka untuk mencapai koneksi yang muluswebsocketKutipan.
Sangat sederhana! BundelSeamlessConnWSSetelah menyalin template ke pustaka strategi Anda sendiri, Anda hanya perlu merujuknya dalam strategi “Icebreaker”, seperti yang ditunjukkan pada gambar:

Periksa, simpan, dan selesai.
Buat robot strategi “Icebreaker” waktu nyata dan pilih Binance sebagai bursa
.
MembukaSeamlessConnWSParameter kontrol pada templat.

Jalankan ini:

Agar lebih mudah melihat data yang didorong, saya menambahkan kode log cetak di baris 157, yang akan menampilkan data yang didorong oleh bursa.

Catatan robot menunjukkan:

Dengan cara ini, tidak perlu memodifikasi satu baris kode strategi pun, dan integrasi yang mulus antara antarmuka pasar websocket dan strategi pun tercapai.
Contoh ini hanya untuk penggunaanexchange.GetTickerStrategi fungsi antarmuka pasar dijelaskan. Antarmuka pasar lainnya sepertiexchange.GetDepth、exchange.GetTrades 、exchange.GetRecordsItu rutinitas yang sama! Untuk contoh templateSeamlessConnWS, yang dapat diperluas lebih lanjut.
Untuk tautan tertentu dalam templatwebsocketImplementasinya menggunakanDialFungsi (lihat dokumentasi API Fungsi Dial), yang dapat disesuaikan sesuai kebutuhan. Misalnya, Anda bisa memberiread()Fungsi parameter yang ditentukan-2, yaitu hanya kembaliwebsocketKoneksi menerima data terkini dalam buffernya.
Terima kasih sudah membaca