Konfigurasi pertukaran strategi perdagangan kuantitatif cryptocurrency

Penulis:Kebaikan, Dibuat: 2019-09-16 14:55:26, Diperbarui: 2023-11-07 20:50:11

img

Ketika pemula merancang strategi perdagangan kuantitatif cryptocurrency, seringkali ada berbagai persyaratan fungsi. Terlepas dari bahasa pemrograman dan platform, mereka semua akan menghadapi berbagai persyaratan desain. Misalnya, kadang-kadang beberapa varietas perdagangan rotasi diperlukan, kadang-kadang lindung nilai multi-platform diperlukan, dan kadang-kadang berbagai varietas perdagangan diperlukan secara bersamaan.

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

Desain strategi multi-cryptocurrency

Sebagian besar situasi permintaan ini dipersiapkan untuk tren multi-cryptocurrency dan strategi grid, yang perlu dilaksanakan di pasar dengan metode iterasi perdagangan yang berbeda.

Biasanya dirancang 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

Hal ini dapat dilihat bahwa ini menyadari bahwa objek pertukaran dikonfigurasi pada robot, dan pasangan perdagangan beralih; pasar dari pasangan perdagangan yang berbeda diperoleh, dan pasar varietas multi-dagang dilaksanakan; dan itu dilaksanakan di bawah logika strategi.

Hal ini dapat dilihat bahwa tiga pasangan perdagangan yang kami definisikan: BTC_USDT, LTC_USDT, ETH_USDT, dalam loop, secara iteratif mendapatkan penawaran pasar, dan setelah memperoleh informasi, dapat secara khusus mendeteksi pasar dan memicu logika perdagangan yang dirancang oleh strategi.

Beberapa pembaca mungkin bertanya: Saya tidak suka beralih pasangan perdagangan, rasanya agak merepotkan, dan logika strategi tidak jelas.

Memang ada pilihan desain lain, yang akan kita memperkenalkan di bawah ini.

Mengkonfigurasi beberapa objek pertukaran untuk robot di akun pertukaran yang sama

Data pasar dari pasangan perdagangan yang berbeda diperoleh melalui beberapa objek pertukaran, dan dieksekusi dalam logika strategi iteratif.

Misalnya, konfigurasi robot dengan mengkonfigurasi tiga objek pertukaran untuk robot. Pasangan perdagangan diatur untuk BTC_USDT, LTC_USDT, dan ETH_USDT masing-masing.

img

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

img

Semuanya selesai.

Kami sedikit mengubah kode ini, karena kali ini kami menambahkan beberapa objek pertukaran ke robot, yang merupakan objek pertukaran dari 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, apakah beralih pasangan perdagangan atau menambahkan objek perdagangan untuk beberapa pasangan perdagangan yang berbeda dari akun konfigurasi. semua ini hanya menggunakan konfigurasi akun pertukaran (menggunakan pertukaran yang dikonfigurasi).

Jadi bagaimana Anda menggunakan beberapa akun pertukaran dalam satu strategi?

Strategi untuk menggunakan beberapa rekening pertukaran

Beberapa strategi seperti multi-exchange cross-market hedging, strategi multi-akun dalam satu bursa.

  • Konfigurasi beberapa pertukaran dengan pertukaran yang berbeda

img

Sebagai contoh, kami telah mengkonfigurasi 2 pertukaran di Dashboard -> Exchange -> Tambahkan halaman Exchange.

kita dapat mengakses informasi aset dari akun yang dikonfigurasi oleh kedua 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
}

Tentu saja, saya juga dapat menambahkan kedua dan ketiga akun pertukaran konfigurasi untuk pertukaran.

  • Konfigurasi beberapa pertukaran dengan pertukaran yang sama.

Sebagai contoh, kita menambahkan akun lain untuk Huobi Futures.

img

Seperti yang Anda lihat, ini mengkonfigurasi rekening dari dua bursa Huobi Futures.

img

Ketika strategi dibuat, objek Huobi Futures Exchange muncul dalam opsi Robot's Modify Configuration untuk dipilih.

img

Misalnya, ini memungkinkan dua akun untuk menjual pertama dan kemudian membeli dengan strategi grid khas (ke atas) atau membeli pertama kemudian menjual (ke bawah).

Melalui dua contoh di atas

Berikut adalah perbedaan antara mengkonfigurasi beberapa objek pertukaran pada robot dan Mengkonfigurasi beberapa objek pertukaran untuk akun pertukaran yang sama untuk robot:

Contoh yang mencolok dan disebutkan di atas dari Akun pertukaran yang sama memiliki beberapa objek pertukaran untuk robot agak mirip, tetapi ada perbedaan.

Perbedaannya adalah bahwa contoh di atas adalah konfigurasi pertukaran, yaitu:

img

Saat robot mengkonfigurasi objek pertukaran, ia selalu menggunakan:

img

Konfigurasi ini.

Hanya saja ketika Anda menambahkan objek pertukaran, pengaturan pasangan perdagangan berbeda.

Jika fungsi GetAccount dipanggil, informasi aset dari akun yang sama selalu diakses.

Namun demikian:

img

Dua obyek pertukaran futures huobi yang dikonfigurasi dengan demikian, meskipun semuanya adalah futures huobi, mewakili rekening pertukaran yang berbeda.

  • Penggunaan konfigurasi pertukaran membuat desain strategi berjangka cryptocurrency lebih mudah.

Kadang-kadang dalam strategi lindung nilai kontrak cryptocurrency, untuk merebut peluang perdagangan yang sebentar, banyak skenario perlu ditempatkan secara bersamaan. Namun, karena kontraknya berbeda, Anda perlu beralih ke kontrak yang sesuai ketika Anda mendapatkan penawaran pasar dan menempatkan pesanan.exchange.Godan desain kontrak switch juga membuat logika tidak begitu sederhana. apakah ada cara yang lebih baik?

Tentu saja ada, Kita dapat menambahkan dua objek pertukaran ke robot dengan mengikuti Konfigurasi beberapa objek pertukaran untuk robot di akun pertukaran yang sama.

img

Kemudian gunakan konfigurasi pertukaran ini untuk menambahkan objek pertukaran lain.

Kotak perintah akan muncul!

img

Konfigurasi akun pertukaran, Anda tidak dapat menambahkan objek pertukaran dari mata uang yang sama atau pasangan perdagangan.

Apa yang harus saya lakukan? sepertinya robot strategi tidak dapat menggunakan dua objek pertukaran, dan objek pertukaran terikat pada nomor rekening pertukaran?

Masih ada jalan!

Mari kita pergi ke Dashboard -> Exchange, dan kemudian menambahkan konfigurasi pertukaran berjangka OKEX.

img

Klik Simpan saat dikonfigurasi.

img

Dengan cara ini kita memiliki dua konfigurasi pertukaran, tetapi informasi konfigurasi API KEY yang sama digunakan.

img

Apa manfaatnya?

ketika menulis strategi, desainnya akan sangat sederhana!

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

Apakah strategi desain ini jauh lebih sederhana dan lebih jelas?

Operasi pasar nyata:

img

Seperti yang Anda lihat, dibutuhkan hanya sekitar 50 milidetik untuk mendapatkan harga dua kontrak setiap kali.


Berkaitan

Lebih banyak