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.
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:
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:
Terdapat pilihan reka bentuk lain, yang akan kita perkenalkan di bawah.
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.
Nama adalah objek pertukaran
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:
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?
Beberapa strategi seperti lindung nilai rentas pasaran pelbagai bursa, strategi pelbagai akaun dalam satu bursa.
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.
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.
Sebagai contoh, kita menambah akaun lain untuk Huobi Futures.
Seperti yang anda lihat, ini mengkonfigurasi akaun dua bursa
Apabila strategi dicipta, objek Huobi Futures Exchange muncul dalam pilihan Robot
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
Contoh yang mencolok dan disebutkan di atas
Perbezaannya adalah bahawa contoh di atas adalah konfigurasi pertukaran, iaitu:
Apabila robot mengkonfigurasi objek pertukaran, ia sentiasa menggunakan:
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:
Dua objek pertukaran niaga hadapan huobi yang dikonfigurasi sedemikian, walaupun mereka semua niaga hadapan huobi, mewakili akaun pertukaran yang berbeza.
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.Go
dan 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
Kemudian gunakan konfigurasi pertukaran ini untuk menambah objek pertukaran lain.
Kotak arahan akan muncul!
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
Klik Simpan apabila dikonfigurasi.
Dengan cara ini kita mempunyai dua konfigurasi pertukaran, tetapi maklumat konfigurasi API KEY yang sama digunakan.
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:
Seperti yang anda lihat, ia hanya mengambil masa kira-kira 50 milidetik untuk mendapatkan harga dua kontrak setiap kali.