Strategi perdagangan kuantitatif mata wang digital

Penulis:Mimpi kecil, Dicipta: 2019-09-02 09:39:59, Dikemas kini: 2023-10-19 21:07:41

img

Strategi perdagangan kuantitatif mata wang digital

Apabila merancang strategi perdagangan kuantitatif mata wang digital pemula, terdapat pelbagai keperluan strategi yang sering berlaku, tidak kira bahasa dan platform yang digunakan. Sebagai contoh, kadang-kadang memerlukan pelbagai putaran, kadang-kadang memerlukan pelbagai platform lindung nilai, kadang-kadang memerlukan pelbagai jenis perdagangan serentak, dan sebagainya. Di bawah ini kita berkongsi beberapa pengalaman reka bentuk untuk mewujudkan keperluan strategi. Platform pembelajaran masih menggunakan platform pertukaran kuantitatif pencipta.https://www.fmz.com), pasaran memilih untuk pasaran mata wang digital.

  • Rancangan Strategi "Banyak Mata Wang"

    Keperluan seperti ini lebih banyak kerana perlu menulis strategi trend pelbagai jenis, strategi grid pelbagai jenis, dan lain-lain, yang memerlukan logika strategi yang disasarkan dan dilaksanakan dengan perdagangan yang berbeza untuk pasaran berulang. Biasanya ia direka seperti ini:

    function Process (symbol) {
        exchange.IO("currency", symbol)
        var ticker = _C(exchange.GetTicker)
        Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", 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 menyediakan robot dengan konfigurasi:img

    img

    Seperti yang dapat dilihat, ini dapat dilaksanakan dengan mengkonfigurasi objek bursa pada bot, menukar pasangan dagangan, mendapatkan pasaran dari pasangan dagangan yang berbeza, melakukan pelbagai pasaran, dan dilaksanakan di bawah satu logik strategi. Seperti yang dapat dilihat, tiga pasangan dagangan yang kami tentukan: BTC_USDT, LTC_USDT, ETH_USDT, secara berturut-turut mengulangi pembelian pasaran dalam kitaran, dan setelah memperoleh pasaran, anda boleh mengaktifkan logika dagangan yang dirancang dengan baik untuk pemeriksaan pasaran dan memicu strategi yang dirancang dengan baik.

    Beberapa rakan sekelas mungkin berkata: Saya tidak suka menukar pasangan, saya rasa agak sukar, strategi ini tidak jelas. Tetapi ada juga cara lain untuk merancang, iaitu cara lain yang akan kami tunjukkan di bawah.

  • Satu akaun bursa yang sama untuk mengkonfigurasi pelbagai objek bursa kepada bot

    Mengambil data pasaran dari pasangan dagangan yang berbeza melalui pelbagai objek bursa, yang dilaksanakan dalam logik strategi berulang. Contohnya, robot disesuaikan seperti ini: Robot disesuaikan dengan tiga objek pertukaran, pasangan dagangan ditetapkan sebagai BTC_USDT, LTC_USDT, dan ETH_USDT.img

    Nama objek bursa adalah "OKEX Live V3 Test", di Pusat Kawalan, halaman konfigurasi bursa:imgPerisian telah disesuaikan.

    Cuba ubah kod, kerana kali ini kami telah menambah beberapa objek pertukaran kepada bot, iaitu pasangan dagangan BTC_USDT, LTC_USDT, dan ETH_USDT.

    function Process (e) {
        var ticker = _C(e.GetTicker)
        Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
        // ...
        // ..
        // .
    }  
    
    function main(){
        while (true) {
            for (var i = 0 ; i < exchanges.length; i++) {
                Process(exchanges[i])
                Sleep(500)
            }
        }
    }
    

    Mengendalikan robot:img

    Contoh-contoh di atas, sama ada menukar pasangan dagangan, atau menambah objek pertukaran dengan beberapa pasangan dagangan yang berbeza untuk satu akaun konfigurasi. Semua hanya menggunakan satu akaun pertukaran untuk mengkonfigurasi (menggunakan satu akaun pertukaran yang diconfigurasikan dengan baik); jadi bagaimana untuk menggunakan beberapa akaun pertukaran dalam satu strategi?

  • Kaedah menggunakan pelbagai akaun pertukaran

    Beberapa strategi, contohnya, pelbagai pertukaran cross-market hedging, pelbagai akaun dalam satu pertukaran, dan lain-lain.

    • Pertukaran yang berlainan tetapi berlainan.imgSebagai contoh, saya mengkonfigurasi 2 bursa di Pusat Kawalan - > Bursa - > Tambah Bursa halaman. Saya boleh mengakses maklumat aset akaun yang dikonfigurasikan oleh kedua-dua bursa ini dalam strategi ini.

      img

      function main(){
          Log(exchanges[0].GetAccount())    // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
          Log(exchanges[1].GetAccount())    // ... 打印Bit-Z这个交易所的资产信息
      }
      

      Sudah tentu saya juga boleh menambah akaun kedua atau ketiga kepada satu bursa.

    • Di samping itu, terdapat juga beberapa jenis pertukaran yang berbeza.

      Sebagai contoh, kita boleh menambah satu lagi akaun tokens berjangka.img

      Seperti yang anda lihat, ini adalah cara untuk mengkonfigurasi akaun dua bursa "token futures".

      img

      Semasa membuat dasar, objek pertukaran niaga hadapan token muncul lagi untuk dipilih dalam pilihan "Mengubah Persediaan" bot.

      img

      Sebagai contoh, kedua-dua akaun boleh menggunakan satu strategi grid membeli sebelum menjual (ke atas) dan satu strategi grid membeli sebelum menjual (ke bawah).

      Dengan menggunakan kedua-dua contoh di atas.

      Berikut adalah perbezaan antara mengkonfigurasi pelbagai objek pertukaran pada bot dan "mengkonfigurasi pelbagai objek pertukaran pada bot untuk akaun pertukaran yang sama":

      Ini adalah contoh yang serupa pada pandangan pertama dengan contoh "Akun Bursa yang sama dikonfigurasikan untuk robot untuk pelbagai objek bursa" yang dijelaskan di atas, tetapi terdapat perbezaan. Perbezaannya adalah bahawa contoh di atas adalah konfigurasi bursa, iaitu:

      img

      Apabila robot mengkonfigurasi objek bursa, selalu digunakan:imgPerancangan ini.

      Hanya dengan menambahkan objek bursa, transaksi akan berbeza pada tetapan. Jika anda memanggil fungsi GetAccount, semua maklumat aset akaun yang sama akan sentiasa diakses.

      Walau bagaimanapun:imgDua objek bursa niaga hadapan token yang dikonfigurasi sedemikian, walaupun kedua-duanya adalah token niaga hadapan, diwakili oleh akaun bursa yang berbeza.

  • Perancangan strategi berjangka mata wang digital lebih mudah dengan penyesuaian pertukaran yang bijak.

    Kadang-kadang strategi untuk melakukan kontrak mata wang digital adalah untuk menangkap peluang perdagangan yang akan berlalu dengan serta-merta. Tetapi kerana kontrak berbeza, anda perlu beralih ke kontrak yang sesuai semasa mendapatkan pasaran, apabila operasi pesanan. Apabila menggunakan fungsi exchange.Go, tidak begitu cepat kerana masalah sinkronisasi; dan reka bentuk kontrak pertukaran seperti itu juga membuat logiknya tidak begitu ringkas. Adakah ada cara yang lebih baik?

    Sudah tentu ada cara! Kita boleh menambahkan dua objek pertukaran kepada bot seperti yang kita katakan di atas: "Akun bursa yang sama dikonfigurasikan untuk robot dengan pelbagai objek bursa".imgKemudian gunakan konfigurasi pertukaran ini untuk menambah objek pertukaran. Jika anda ingin melihat gambar di atas, anda perlu melihat gambar di bawah.imgSatu akaun bursa tidak boleh ditambahkan dengan mata wang yang sama, pasangan dagangan, dan objek bursa.

    Bagaimana ia boleh dilakukan? nampaknya tidak mungkin untuk membuat bot strategi menggunakan dua objek pertukaran dan mempunyai kod akaun pertukaran yang terikat pada objek pertukaran? Adakah ada jalan lain?

    Kami menambah konfigurasi pertukaran niaga hadapan OKEX di Pusat Kawalan - > Bursa.

    img

    Klik simpan untuk mengkonfigurasi semula.

    img

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

    img

    Apakah faedahnya? Sudah tentu, apabila menulis strategi, reka bentuk adalah mudah!

    function main(){
        exchanges[0].SetContractType("quarter")        // 设置第一个添加的交易所对象 当前的合约为季度合约
        exchanges[1].SetContractType("this_week")      // 设置第二个添加的交易所对象,当前的合约为当周合约
        
        while (true) {
            var beginTime = new Date().getTime()       // 记录这次获取行情时起始的时间戳。
            var rA = exchanges[0].Go("GetTicker")      // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
            var rB = exchanges[1].Go("GetTicker")      // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。
            
            var tickerA = rA.wait()                    // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
            var tickerB = rB.wait()                    // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
            var endTime = new Date().getTime()         // 记录并发获取两个合约行情结束时的时间戳。
            
            if (tickerA && tickerB) {                  // 如果获取的数据没有问题,执行以下逻辑。
                var diff = tickerA.Last - tickerB.Last // 计算差价
                $.PlotLine("diff", diff)               // 使用画线类库把差价画在图表上。
                if (diff > 500) {                      // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
                    // 对冲
                    rA = exchanges[0].Go("Sell", tickerA.Buy, 1)     // 并发线程创建 季度合约下卖单
                    rB = exchanges[1].Go("Buy", tickerB.Sell, 1)     // 并发线程创建 当周合约下买单
                    
                    var idA = rA.wait()           // 等待 返回下单结果,返回的是订单ID
                    var idB = rB.wait()           // ...
                }
                
                // ...
            }
            
            LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。")    // 显示在状态栏上时间,以便知道程序在执行。
            Sleep(500)
        }
    }
    

    Adakah strategi reka bentuk seperti ini terasa lebih mudah dan lebih jelas?

    Perkhidmatan:img

    Seperti yang anda lihat, setiap proses mendapatkan dua kontrak secara serentak hanya mengambil masa kira-kira 50 ms.


Berkaitan

Lebih lanjut

Kekuatan KuantitiCara yang terakhir sangat bagus.

bwxiaokWow, ini sangat membantu!