Sumber dimuat naik... memuat...

Konfigurasi pertukaran strategi perdagangan kuantitatif cryptocurrency

Penulis:Kebaikan, Dicipta: 2019-09-16 14:55:26, Dikemas kini: 2023-11-07 20:50:11

img

Apabila pemula merancang strategi perdagangan kuantitatif mata wang kripto, sering terdapat pelbagai keperluan fungsi. Terlepas dari bahasa pengaturcaraan dan platform, mereka semua akan menghadapi pelbagai keperluan reka bentuk. Sebagai contoh, kadang-kadang pelbagai jenis perdagangan putaran diperlukan, kadang-kadang lindung nilai pelbagai platform diperlukan, dan kadang-kadang pelbagai jenis perdagangan diperlukan untuk serentak.

Platform pembelajaran masih menggunakan platform perdagangan FMZ Quant (https://www.fmz.com), dan pasaran dipilih sebagai pasaran cryptocurrency.

Reka bentuk strategi multi-cryptocurrency

Kebanyakan situasi permintaan ini disediakan untuk strategi trend dan grid multi-cryptocurrency, yang perlu dilaksanakan di pasaran dengan kaedah pengulangan perdagangan yang berbeza.

Biasanya direka seperti ini:

function Process (symbol) {
     exchange.IO("currency", symbol)
     var ticker = _C(exchange.GetTicker)
     Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", ticker)
     // ...
     // ..
     // .
}

function main(){
     var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
     while (true) {
         for (var i = 0 ; i < symbols.length; i++) {
             Process(symbols[i])
             Sleep(500)
         }
     }
}

Kami mengkonfigurasi robot:

img

img

Ia dapat dilihat bahawa ini menyedari bahawa objek pertukaran dikonfigurasi pada robot, dan pasangan dagangan ditukar; pasaran pasangan dagangan yang berbeza diperoleh, dan pasaran pelbagai pelbagai perdagangan dilaksanakan; dan ia dilaksanakan di bawah logik strategi.

Ia dapat dilihat bahawa tiga pasangan dagangan yang kita tentukan: BTC_USDT, LTC_USDT, ETH_USDT, dalam gelung, secara berulang mendapatkan sebut harga pasaran, dan selepas mendapatkan maklumat, ia dapat secara khusus mengesan pasaran dan mencetuskan logik dagangan yang direka oleh strategi.

Sesetengah pembaca mungkin bertanya: Saya tidak suka menukar pasangan dagangan, ia terasa sedikit menyusahkan, dan logik strategi tidak jelas.

Terdapat pilihan reka bentuk lain, yang akan kita perkenalkan di bawah.

Mengatur pelbagai objek pertukaran untuk robot dalam akaun pertukaran yang sama

Data pasaran pasangan dagangan yang berbeza diperoleh melalui pelbagai objek pertukaran, dan dilaksanakan dalam logik strategi berulang.

Sebagai contoh, sesuaikan robot dengan mengkonfigurasi tiga objek pertukaran untuk robot. Pasangan dagangan ditetapkan untuk BTC_USDT, LTC_USDT, dan ETH_USDT masing-masing.

img

Nama adalah objek pertukaran OKEX Spot V3 Test, di halaman Dashboard, halaman konfigurasi pertukaran:

img

Sudah selesai.

Kami mengubah sedikit kod ini, kerana kali ini kami menambah pelbagai objek pertukaran kepada robot, yang merupakan objek pertukaran pasangan perdagangan BTC_USDT, LTC_USDT, ETH_USDT.

function Process (e) {
    var ticker = _C(e.GetTicker)
    Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", ticker)
    // ...
    // ..
    // .
}  

function main(){
    while (true) {
        for (var i = 0 ; i < exchanges.length; i++) {
            Process(exchanges[i])
            Sleep(500)
        }
    }
}

Jalankan robot:

img

Contoh yang kami jelaskan di atas, sama ada menukar pasangan dagangan atau menambah objek dagangan untuk beberapa pasangan dagangan yang berbeza dari akaun konfigurasi.

Jadi bagaimana anda menggunakan pelbagai akaun pertukaran dalam satu strategi?

Strategi untuk menggunakan pelbagai akaun pertukaran

Beberapa strategi seperti lindung nilai rentas pasaran pelbagai bursa, strategi pelbagai akaun dalam satu bursa.

  • Konfigurasi pelbagai pertukaran dengan pertukaran yang berbeza

img

Sebagai contoh, kita telah mengkonfigurasi 2 pertukaran pada Dashboard -> Exchange -> Tambah halaman Exchange.

kita boleh mengakses maklumat aset akaun yang dikonfigurasikan oleh kedua-dua bursa dalam strategi.

img

function main(){
     Log(exchanges[0].GetAccount()) // Print the account asset information of the first exchange object.
     Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}

Sudah tentu, saya juga boleh menambah kedua dan ketiga akaun pertukaran konfigurasi untuk pertukaran.

  • Konfigurasi pelbagai pertukaran dengan pertukaran yang sama.

Sebagai contoh, kita menambah akaun lain untuk Huobi Futures.

img

Seperti yang anda lihat, ini mengkonfigurasi akaun dua bursa Huobi Futures.

img

Apabila strategi dicipta, objek Huobi Futures Exchange muncul dalam pilihan Robot's Modify Configuration untuk dipilih.

img

Sebagai contoh, ini membolehkan dua akaun menjual terlebih dahulu dan kemudian membeli dengan strategi grid biasa (ke atas) atau membeli terlebih dahulu kemudian menjual (ke bawah).

Melalui dua contoh di atas

Berikut adalah perbezaan antara mengkonfigurasi pelbagai objek pertukaran pada robot dan Mengkonfigurasi pelbagai objek pertukaran untuk akaun pertukaran yang sama untuk robot:

Contoh yang mencolok dan disebutkan di atas Akaun pertukaran yang sama mempunyai pelbagai objek pertukaran untuk robot agak serupa, tetapi terdapat perbezaan.

Perbezaannya adalah bahawa contoh di atas adalah konfigurasi pertukaran, iaitu:

img

Apabila robot mengkonfigurasi objek pertukaran, ia sentiasa menggunakan:

img

Konfigurasi ini.

Ia hanya bahawa apabila anda menambah objek pertukaran, tetapan pasangan dagangan adalah berbeza.

Jika fungsi GetAccount dipanggil, maklumat aset akaun yang sama sentiasa diakses.

Walau bagaimanapun:

img

Dua objek pertukaran niaga hadapan huobi yang dikonfigurasi sedemikian, walaupun mereka semua niaga hadapan huobi, mewakili akaun pertukaran yang berbeza.

  • Penggunaan konfigurasi pertukaran memudahkan reka bentuk strategi niaga hadapan cryptocurrency.

Kadang-kadang dalam strategi lindung nilai kontrak cryptocurrency, untuk merebut peluang perdagangan yang berlalu, banyak senario perlu diletakkan secara serentak. Walau bagaimanapun, kerana kontraknya berbeza, anda perlu beralih ke kontrak yang sesuai apabila anda mendapat sebut harga pasaran dan meletakkan pesanan.exchange.Godan reka bentuk kontrak beralih juga membuat logik tidak begitu mudah. adakah ada cara yang lebih baik?

Sudah tentu ada, Kita boleh menambah dua objek pertukaran kepada robot dengan mengikuti Konfigurasikan pelbagai objek pertukaran untuk robot dalam akaun pertukaran yang sama.

img

Kemudian gunakan konfigurasi pertukaran ini untuk menambah objek pertukaran lain.

Kotak arahan akan muncul!

img

Satu konfigurasi akaun pertukaran, anda tidak boleh menambah objek pertukaran mata wang yang sama atau pasangan dagangan.

Apa yang perlu saya lakukan? Rupanya robot strategi tidak boleh menggunakan dua objek pertukaran, dan objek pertukaran terikat kepada nombor akaun pertukaran?

Masih ada jalan!

Mari kita pergi ke Dashboard -> Exchange, dan kemudian menambah konfigurasi pertukaran niaga hadapan OKEX.

img

Klik Simpan apabila dikonfigurasi.

img

Dengan cara ini kita mempunyai dua konfigurasi pertukaran, tetapi maklumat konfigurasi API KEY yang sama digunakan.

img

Apakah faedahnya?

Apabila menulis strategi, reka bentuknya akan sangat mudah!

function main(){
    exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
    exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
    
    while (true) {
        var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
        var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
        var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
        
        var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
        var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
        var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
        
        if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
            var diff = tickerA.Last - tickerB.Last // calculate the difference
            $.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
            if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
                // Hedging
                rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
                rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
                
                var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
                var idB = rB.wait() // ...
            }
            
            // ...
        }
        
        LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
        Sleep(500)
    }

Adakah strategi reka bentuk ini lebih mudah dan jelas?

Operasi pasaran sebenar:

img

Seperti yang anda lihat, ia hanya mengambil masa kira-kira 50 milidetik untuk mendapatkan harga dua kontrak setiap kali.


Berkaitan

Lebih lanjut