Tangan tangan mengajar anda bagaimana untuk memberikan satu strategi lama yang seamlessly menghubungkan websocket pasar antara muka

Penulis:Mimpi kecil, Dicipta: 2019-09-26 15:47:53, Dikemas kini: 2023-10-18 19:54:36

img

Tangan tangan mengajar anda bagaimana untuk memberikan satu strategi lama yang seamlessly menghubungkan websocket pasar antara muka

Pencipta platform dagangan kuantitatifDataran StrategyTerdapat banyak strategi menarik yang digunakan pada masa itu untuk pertukaran mata wang digital.restBanyak strategi yang dibuat berdasarkan antara muka API.restAntara yang paling menarik ialah perbandingan antara pasaran dan pelaburan.restKeadaan yang menyebabkan kegagalan antara muka yang menyebabkan dasar tidak dapat digunakan.websocketSokongan antara muka memerlukan perubahan tertentu pada kod dasar, yang biasanya lebih rumit (mengubah dasar jauh lebih sukar daripada menulis semula). Bagaimana anda boleh menggunakan strategi tanpa mengubahnya?websocketBagaimana pula dengan perisian? Di sini, kita dapat melihat fleksibiliti besar platform dagangan kuantitatif pencipta, yang boleh kita gunakan untuk:

  • 1. Gunakan dasar "Layaran Templat".
  • 2, ya.exchange.GetTickerFungsi Hook yang akan diambil ialah Hook Operations.

Jadi, tanpa mengubah satu baris kod, letakkan strategi anda di bawah.websocketPemandu data yang didorong oleh antarmuka perniagaan mula beroperasi. Penggunaan Bahasa Penulisan KodJavaScriptBahasa.

Strategi analisis

Sebagai contoh, kita perlu mengubah strategi lama klasik, "Pembunuh ais".

Alamat Strategi

Kita mulakan dengan melihat kod strategi dan mendapati bahawa strategi ini didorong oleh pasaran tik, yang digunakan terutamanya oleh peniaga dan peniaga.tickerDalam dataBuySellLastIni adalah ciri-ciri yang sangat penting.tickerMaklumat dari fungsi API platform FMZ:exchange.GetTickerKita akan cuba untuk mendapatkannya.exchange.GetTickerFungsiHookOperasi (iaitu menulis semula dan menggantikannya dengan versi lain) boleh dilakukan. Namun, kita tidak boleh mengubahnya dalam strategi pemecah ais, kerana ia akan mempengaruhi strategi, kita hanya mahu pairing yang lancar! Oleh itu, pelakon utama seterusnya perlu masuk.

Fungsi Perpustakaan Templat daninitPerpaduan fungsi

Kami telah mencipta "Library Template" dan menamakannya:Seamless CONWS, Kosongkan kod awal.

img

Kemudian beriSeamless CONWSTemplat menetapkan 2 parameter

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

img

digunakan untuk mengawal sama ada ia akan digunakanwebsocketFungsi antara muka, kawalan untuk menentukan antara muka industri tertentu yang dibuka. Dalam kes ini, hanya untukexchange.GetTickerAntarmuka melakukan operasi hook. Jadi, parameternya hanya membukaGetTickerAntara muka adalah parameter kawalan mod websocket: Hook_GetTicker.

Templat telah dibuat, anda boleh menulis pertukaran tertentu untuk diakses di dalam templat.websocketAntara muka, melanggan beberapa industri, dan kemudian menunggu pertukaran untuk memindahkan data. Kod khusus tidak lagi diulas, anda boleh melihat kod SeamlessConnWS (dah terbuka) /dokumen API.initFungsi dan pembolehubah 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 boleh lihat bahawa templat ini hanya menggunakan dua bursa.websocketPerkhidmatan ini juga menyediakan perkhidmatan untuk pengguna yang ingin membeli dan menjual barang-barang dalam talian.initFungsi ini adalah untuk membuat strategi Icebreaker merujuk kepadaSeamless CONWSSelepas templat, apabila cakera sebenar berjalan, ia akan dijalankan terlebih dahuluinitFungsi, boleh menghidupkan secara automatikexchange.GetTickerKandungan fungsi diganti untuk digunakanwebsocketPelaksanaan kod antara muka untuk mencapai pairing yang lancarwebsocketPergilah.

Alamat templat SeamlessConnWS

Cara Menggunakan

Ia mudah!Seamless CONWSSetelah template disalin ke dalam perpustakaan dasar mereka, mereka hanya boleh menggunakan rujukan kepada strategi "Pembatas ais", seperti di bawah:

img

Select, save, and that's it.

Rancangan untuk mencipta "pemutus ais", robot rak sebenar, pertukaran memilih BinanceimgSaya tidak tahu apa yang berlaku. MemulakanSeamless CONWSParameter kawalan pada templat.img

Bermula:img

Untuk memudahkan anda melihat data yang disuntik, saya khususkan pada baris 157, ditambah dengan kod untuk mencetak log, yang akan mengeluarkan data yang disuntik oleh bursa.img

Di bawah ini adalah senarai gambar robot yang digunakan oleh pengguna.img

Dengan cara ini, tanpa mengubah satu baris kod dasar, penyambungan lancar menggunakan antara muka pasaran websocket dan dasar dicapai.

Dalam kes ini, ia adalah untuk kegunaanexchange.GetTickerPenjelasan mengenai strategi fungsi antarmuka sektor, antara muka sektor lain sepertiexchange.GetDepthexchange.GetTradesexchange.GetRecordsIni juga merupakan satu kaedah yang sama!Seamless CONWSDi samping itu, ia juga boleh digunakan untuk memaparkan pelbagai jenis berita.

Untuk pautan khusus dalam templatwebsocketPerkembangan, penggunaanDialFungsi (lihat dokumen API Fungsi Panggilan) boleh disesuaikan mengikut keperluan.read()Fungsi menetapkan parameter-2Yang bermaksud hanya kembaliwebsocketData terkini di kawasan buffer yang menerima data yang disambungkan.

Terima kasih kerana membaca.


Berkaitan

Lebih lanjut

congcong009Monk, bolehkah anda berikan versi Python yang lebih?

Perempuan juga.Yang baik, patut dikongsi lebih awal.

Mimpi kecilBagus, terima kasih atas cadangan anda.