Pemula, periksa Membawa anda ke Perdagangan Kuantitatif Cryptocurrency (2)

Penulis:Ninabadass, Dicipta: 2022-04-19 16:46:53, Dikemas kini: 2022-04-20 16:56:43

Pemula, periksa Membawa anda ke Perdagangan Kuantitatif Cryptocurrency (2)

Dalam artikel sebelumnya, kami bercakap mengenai skrip perdagangan berprogram. Sebenarnya, strategi perdagangan adalah program skrip perdagangan. Artikel ini terutamanya membincangkan tentang keperluan pembawa perkakasan untuk program skrip perdagangan (di mana program berjalan), dan program perdagangan skrip boleh ditulis dalam bahasa pengaturcaraan komputer itu (menyenaraikan tiga bahasa pengaturcaraan yang digunakan dalam Platform Dagangan Kuantum FMZ; sudah tentu, anda boleh menggunakan bahasa pengaturcaraan apa pun untuk melaksanakan strategi dalam perdagangan berprogram). Dalam artikel ini, kita terus membincangkan pengukuran lingkaran cryptocurrency dan memahami pengetahuannya.

Skrip Perdagangan yang Diprogram

  • Jenis strategi dagangan Pemula yang baru dalam perdagangan terprogram dan perdagangan kuantitatif mungkin keliru dengan pelbagai istilah seperti strategi trend, strategi arbitraj, strategi frekuensi tinggi, strategi grid, dll. Sebenarnya, jenis strategi yang biasa dalam perdagangan terprogram dan perdagangan kuantitatif hanya dalam beberapa arah.

    • Strategi timbang tara Secara ringkasnya, strategi yang pada dasarnya memegang kedudukan panjang sambil memegang kedudukan pendek boleh diklasifikasikan sebagai strategi arbitraj. Terdapat banyak jenis spesifiknya, seperti pasaran silang spot, tempoh silang niaga hadapan, niaga hadapan dan arbitraj spot, dan arbitraj simbol silang, dll.

    • Strategi trend Secara ringkasnya, ia adalah strategi untuk mengesan trend dan meletakkan satu kedudukan, seperti purata bergerak berganda, MACD dan strategi lain.

    • Strategi Kembali Sebagai contoh, strategi grid, memperoleh pulangan dari turun naik harga di pasaran yang tidak menentu.

    • Strategi frekuensi tinggi Secara ringkasnya, ia adalah strategi untuk menjalankan perdagangan frekuensi tinggi melalui beberapa algoritma untuk menemui struktur mikro pasaran, peraturan, peluang, dll.

    Jenis di atas diklasifikasikan dari sudut strategi perdagangan; dari sudut reka bentuk strategi di FMZ Quant, strategi juga boleh dibahagikan kepada:

    • strategi simbol tunggal Maksudnya strategi hanya boleh mengoperasikan satu simbol, seperti membuat perdagangan BTC atau perdagangan ETH.

    • strategi pelbagai simbol Secara ringkasnya, ia adalah untuk mengendalikan pelbagai simbol dengan satu logik strategi.

    • strategi pelbagai akaun Secara ringkasnya, ia adalah untuk mengkonfigurasi pelbagai objek pertukaran pada bot (konsep platform telah diperkenalkan dalam artikel sebelumnya, dan objek pertukaran yang dikonfigurasi dengan API KEY mewakili akaun platform).

    • strategi multi-logik Sebagai contoh, strategi MACD, strategi purata bergerak, strategi grid, dan lain-lain direka pada masa yang sama pada bot (tentu saja, ia adalah untuk mengendalikan objek pertukaran yang berbeza, dan objek pertukaran dengan operasi yang sama bergantung kepada sama ada strategi tertentu adalah bertentangan secara logik)

  • Antara muka API Platform Bagaimana skrip dagangan yang diprogramkan mengendalikan akaun platform? Jawapannya adalah melalui antara muka API yang dibuka oleh platform. Oleh itu, jenis antara muka yang terbuka kepada platform? Dalam artikel sebelumnya, kita bercakap tentang bahawa platform umumnya mempunyai antara muka REST dan Websocket dalam bahagian Platform. Di sini kita menambah beberapa konsep dari aspek prosedur strategi. Antara muka platform dibahagikan mengikut sama ada ia disahkan (REST dan Websocket), iaitu disahkan dan tidak disahkan.

    • Antara muka yang tidak memerlukan pengesahan Secara amnya, mereka dirujuk sebagai sambungan awam; jenis antara muka ini tidak memerlukan pengesahanAPI KEY(jika anda tidak ingat apa API KEY, anda boleh beralih ke artikel sebelumnya). Antara muka jenis ini biasanya antara muka pasaran, seperti menyoal kutipan pasaran mendalam, data K-line, kadar pembiayaan, maklumat mengenai simbol perdagangan, cap waktu pelayan platform, dll. Sederhananya, antara muka yang pada dasarnya tidak berkaitan dengan akaun anda boleh ditentukan secara kasar sebagai antara muka awam (tiada pengesahan diperlukan). Pada Platform Perdagangan Kuantum FMZ, apabila memanggil fungsi API yang tidak disahkan (mencakup antara muka platform yang tidak disahkan; antara muka awam), walaupun konfigurasi KEY API tidak betul, data yang dikembalikan oleh antara muka dapat diperoleh secara normal (tidak diperlukan pengesahan)

    • Antara muka yang memerlukan pengesahan Secara ringkasnya, mereka adalah antara muka yang perlu disahkan (dengan API KEY). Jenis antara muka ini dipanggil antara muka peribadi. Antara muka jenis ini biasanya berkaitan dengan beberapa operasi atau maklumat akaun anda, seperti menanyakan aset akaun, kedudukan akaun, pesanan yang belum selesai, pemindahan, penukaran mata wang, penyesuaian leverage, dan tetapan mod kedudukan, dll. Operasi ini mesti disahkan.

      Pada FMZ Quant, apabila memanggil fungsi API yang memerlukan pengesahan (antara muka peribadi, yang dikapsul dan memerlukan pengesahan platform). Jika konfigurasi API KEY salah, memanggil jenis fungsi ini akan melaporkan ralat, dan mengembalikan null.

    Jadi, bagaimana untuk menggunakan antara muka ini di FMZ Quant Trading Platform?

    FMZ Quant Trading Platform merangkumi antara muka platform dengan tindakan dan definisi yang dipersempit (seperti antara muka K-line, antara muka pasaran mendalam, antara muka pertanyaan aset semasa, antara muka pesanan, antara muka pembatalan pesanan, dll.).https://www.fmz.com/api).

    Jadi, bagaimana untuk menggunakan beberapa platform antara muka tanpa tindakan yang dipersempit dan definisi di FMZ Quant?

    Antara muka platform ini termasuk: pemindahan aset, pesanan bersyarat, pesanan batch, pembatalan pesanan batch, pengubahsuaian pesanan, dll. Sesetengah platform mempunyai antara muka ini, beberapa platform tidak, dan fungsi dan butiran penggunaan mungkin sangat berbeza, jadi antara muka ini boleh diakses melaluiexchange.IOfungsi pada FMZ Quant (untuk butiran, lihat dokumentasi API platform dagangan FMZ Quant:https://www.fmz.com/api#exchange.io..Terdapat juga beberapa strategi contoh IO praktikal dalam Square FMZ Quant.

Boleh semua fungsi API dalam dokumentasi FMZ API membuat permintaan rangkaian?

Kami perlu mengatakan bahawa API platform mempunyai had untuk kekerapan akses (contohnya, 5 kali dalam 1 saat). Akses tidak boleh terlalu kerap, atau ralat http 429 akan dilaporkan, dan akses akan ditolak (kebanyakkan platform melaporkan 429). Oleh itu, memanggil antara muka platform yang dikapsulkan di FMZ Quant juga mempunyai had, tetapi memanggil fungsi API yang tidak membuat permintaan rangkaian tidak mempunyai had seperti itu.
Tidak semua fungsi API di FMZ Quant boleh membuat permintaan rangkaian; beberapa fungsi API di FMZ hanya mengubah suai beberapa tetapan tempatan, seperti menetapkan pasangan dagangan semasa, kod kontrak dan fungsi pengiraan penunjuk, serta memperoleh nama objek pertukaran, dll. Pada asasnya, dari penggunaan fungsi a, anda boleh menentukan sama ada permintaan rangkaian akan dibuat; selagi ia adalah untuk memperoleh data platform, atau mengendalikan akaun platform, permintaan rangkaian akan dibuat; semua antara muka ini perlu memberi perhatian kepada kekerapan panggilan.

  • Mari kita bincangkan beberapa masalah biasa dan pengalaman menggunakan fungsi API pada FMZ Quant.

    • Toleransi ralat Ini adalah kesilapan yang paling biasa, yang telah mengganggu banyak pemula. Selalunya, strategi backtest adalah baik dan segala-galanya adalah normal. Mengapa bot berfungsi secara tidak normal selepas bot berjalan untuk sementara waktu (yang boleh dicetuskan pada bila-bila masa)?

      img

      Apabila menulis strategi, untuk data yang dikembalikan oleh antara muka perlu disahkan. Sebagai contoh, kod mendapatkan ticker pada FMZ Quant (yang sama dengan menulis program anda sendiri untuk mengakses antara muka platform secara langsung):var ticker = exchange.GetTicker()Jika kita perlu menggunakan dataLast(harga terkini) dalam pembolehubahticker(anda boleh merujuk kepada struktur pulangan fungsi GetTicker), kita perlu mendapatkan data (apa yang baruPrice? baru: yang terbaru; Harga: harga; itu betul, menggabungkan mereka!)

      Sekarang, ia adalah baik-baik saja jika fungsiGetTicker()mengembalikan data biasa; jika terdapat permintaan waktu, ralat rangkaian, platform menarik kabel, kabel pecah dengan menggali, atau kanak-kanak mematikan suis elektrik, fungsiGetTicker()akan kembalinullPada masa ini, nilaitickeradalahnull; apabila saya mengaksesLastDaripadanya, program strategi akan dihentikan oleh program pengecualian. Dari itu, nampaknya kegagalan panggilan antara muka (penyebutan GetTicker gagal dan mengembalikan null) bukan penyebab langsung berhenti bot strategi (penyebab langsung adalah bahawa atributnullkeadaan bahawa kegagalan panggilan antara muka melaporkan ralat tidak akan menyebabkan bot untuk berhenti (penekanan ditambah di sini).

      Jadi, apa yang perlu kita lakukan untuk mengelakkan berhenti bot yang tidak normal?
      Jawapannya adalah untuk melakukan proses toleransi ralat kepada data yang dikembalikan oleh antara muka; ia sangat mudah, dan anda hanya perlu menilai sama ada data yang dikembalikan adalahnull(di sini mengambil JavaScript sebagai contoh, untuk bahasa lain adalah sama). Tulis segmen kod kecil (yang hanya untuk arahan, dan tidak boleh dijalankan secara langsung!)

      var ticker = exchange.GetTicker()
      if (ticker) {
          var newPrice = ticker.Last
          Log("Print the latest price:", newPrice)
      } else {
          // data is null, so no operation will make no problem 
      }
      

      Bukan sahajaGetTickerantara muka perlu melakukan pemprosesan toleransi ralat, tetapi antara muka dengan permintaan rangkaian perlu melakukan pemprosesan toleransi ralat untuk nilai pulangan (jika anda menggunakan nilai pulangan fungsi) Terdapat banyak kaedah toleransi ralat._C()fungsi (lihat dokumentasi FMZ API) untuk menulis fungsi toleransi ralat anda sendiri dan merancang mekanisme dan logik toleransi ralat anda sendiri.

      Mengenai penggunaan_C()Fungsi, banyak pelajar baru juga sangat mungkin menggunakannya dengan tidak betul._C()fungsi adalah rujukan fungsi, bukan panggilan fungsi._C(funcName, param1, param2); panggilan adalah betul; funcName tidak mempunyai kurung, dan param1 dan param2 adalah parameter yang akan diimport ke fungsi funcName._C(funcName(param1, param2)); panggilan adalah salah; biasanya jika seorang pemula tidak membaca dokumentasi FMZ API dengan teliti, ia akan ditulis seperti ini.

    • Jumlah pesanan beli pasaran spot

      Pemula juga mudah membuat kesilapan dalam jumlah pesanan pesanan beli pasaran spot. Seperti yang disebutkan dalam artikel sebelumnya, jumlah pesanan pesanan beli pasaran spot biasanya jumlah wang (hanya beberapa platform mungkin mempunyai tetapan lain, dan umumnya tetapan platform khas ini akan dijelaskan dalam dokumentasi FMZ API). Sebagai contoh, saya menggunakan OKEX V5 simulasi bot untuk menguji:

      Tetapkan pasangan dagangan sebagai:LTC_USDT

      function main() {
          exchange.IO("simulate", true)   // switch to OKEX simulated bot 
          exchange.Buy(-1, 1)             // the price is -1, representing the placed order is market order; the amount of 1 means the order amount of 1 USDT
      }
      

      Oleh kerana platform umumnya mempunyai had jumlah pesanan, pesanan dengan jumlah yang lebih kecil daripada had tidak akan diletakkan (contohnya, Binance Spot hanya memerlukan pesanan dengan jumlah yang lebih besar daripada 5USDT dapat diletakkan dengan berjaya). Oleh itu, meletakkan pesanan seperti ini akan melaporkan ralat:

      error	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
      
    • Arah pesanan niaga hadapan

      Apabila membuat strategi niaga hadapan, pemula sering membuat kesilapan dalam arah pesanan.https://www.fmz.com/api#exchange.setdirection...

      img

      Kerana fungsi penempatan pesanan hanya mempunyaiBuydanSellWalau bagaimanapun, niaga hadapan (sudah tentu, tidak ada masalah untuk tempat, untuk tempat hanya mempunyai membeli dan menjual) mempunyai arah pembukaan panjang, menutup panjang, membuka pendek, dan menutup pendek, jadi jelas Buy dan Sell tidak boleh menyatakan operasi dalam banyak arah, maka adalah perlu untuk memperkenalkan fungsiexchange.SetDirection()untuk menetapkan arah perdagangan niaga hadapan. Di FMZ,exchange.SetDirection("buy")(yang pertama menetapkan arah pertama) digunakan bersama denganexchange.Buy, yang bermaksud bahawa pesanan yang diletakkan adalah pesanan untuk membuka kedudukan panjang. Dan seterusnya:

      Penggunaanexchange.SetDirection("sell")danexchange.Sellbersama-sama, yang mewakili pesanan yang diletakkan adalah pesanan untuk membuka kedudukan pendek. Penggunaanexchange.SetDirection("closebuy")danexchange.Sellbersama-sama, yang mewakili pesanan yang diletakkan adalah pesanan untuk menutup kedudukan panjang. Penggunaanexchange.SetDirection("closesell")danexchange.Buybersama-sama, yang mewakili pesanan yang diletakkan adalah pesanan untuk menutup kedudukan pendek. Pemula, biasanya akan menggunakanexchange.SetDirection("sell")danexchange.BuyKemudian, kesilapan akan dilaporkan (kesilapan tidak boleh dilaporkan dalam backtest, tetapi itu jelas kesilapan logik, yang tidak boleh diabaikan oleh orang obsesif-kompulsif seperti saya.) Inilah satu lagi kesilapan yang biasanya dilakukan oleh pemula.

      function main() {
          exchange.SetContractType("quarter")   // set the current contract to a quarterly contract 
          exchange.SetDirection("sell")
          var id = exchange.Sell(-1, 1)    
          Log("placed market order, executed, get positions", exchange.GetPosition())    
          exchange.SetDirection("closebuy")   // use closebuy and Sell together, yes, no problem 
          exchange.Sell(-1, 1)
      }
      

      img
      Apabila ia datang ke sini, anda mungkin bertanya:" Saya mempunyai kedudukan, dan menggunakan closebuy dan jual bersama-sama, jadi mengapa satu kesilapan dilaporkan dan saya tidak boleh menutup kedudukan? "Saya akan berkata:" arah yang salah untuk menutup kedudukan! Selain itu, kesilapan boleh berada dalam situasi lain: tetapan arah kedudukan dekat adalah betul, penggunaan fungsi meletakkan pesanan juga betul, dan anda juga memegang kedudukan dalam arah, tetapi kesilapan masih dilaporkan. Sebabnya mungkin: program anda telah meletakkan banyak pesanan, pesanan pada mulanya tidak dilaksanakan, dan pesanan kedudukan dekat kini berada di pasaran dan menunggu pelaksanaan. pada masa itu, program terus menutup kedudukan, yang akan mencetuskan ralat melebihi kedudukan dekat.

    • Paparkan maklumat eksport & perdagangan log Merancang dan menulis strategi perdagangan berprogram dan kuantitatif tidak dapat dipisahkan dari reka bentuk interaksi manusia-komputer, seperti paparan data dan eksport log operasi. Contohnya: kegunaan pythonprint. penggunaan javascriptconsole.log. Penggunaan Golangfmt.Println(). Penggunaan C++cout.

      Mari kita bercakap tentang paparan maklumat di FMZ. Di FMZ Quant, terdapat dua tempat utama untuk memaparkan maklumat.

      • Bar Status Selepas bot dimulakan, halaman bot ditunjukkan seperti berikut:

        img

        Bahagian paparan adalah maklumat bar status. Bar status terutamanya digunakan untuk memaparkan beberapa data perubahan masa nyata (kerana perubahan masa nyata perlu diperhatikan dalam masa nyata, dan tidak boleh dicetak sebagai log setiap kali, jadi jenis data ini boleh dipaparkan dalam bar status. Jika mencetak log setiap satu, akan ada banyak data berulang yang tidak bermakna, mempengaruhi pertanyaan). Data yang dipaparkan pada bar status menggunakanLogStatusUntuk butiran, sila rujuk dokumentasi FMZ API.

      • Bar log Ia juga di halaman bot, seperti yang ditunjukkan dalam gambar berikut:

        img

        Bahagian paparan adalah bar log. Bar log terutamanya digunakan untuk merakam data tertentu secara kekal pada masa tertentu, atau merakam operasi strategi tertentu pada masa tertentu. Log dibahagikan kepada pelbagai jenis:

        1. log biasa; strategi FMZ menggunakan fungsi Log untuk mengeluarkan dan mencetak dalam log strategi.

        img

        1. Log pesanan; menggunakanexchange.Sell/exchange.Buydalam strategi FMZ akan output secara automatik rekod dalam log.

        img

        1. Log pembatalan;exchange.CancelOrderdigunakan dalam strategi FMZ, dan log pembatalan akan output secara automatik dalam log.

        img

        1. Log ralat; apabila strategi FMZ sedang berjalan, dan antara muka untuk permintaan rangkaian mempunyai ralat panggilan, dan pengecualian dilemparkan (seperti pernyataan throw), log ralat akan output secara automatik dalam log.

        img

      Antara fungsi FMZ API, fungsi yang boleh menjana output log, seperti Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id), dan lain-lain, boleh diikuti oleh beberapa parameter output tambahan selepas parameter yang diperlukan, seperti: pertukaran. CancelOrder ((order[j].Id, order[j]); ia adalah untuk output maklumat pesanan tambahan apabila urutan pesanan[j] dibatalkan.

      function main() {
          Log("data1", "data2", "data3", "...")
          var data2 = 200
          var id = exchange.Sell(100000, 0.1, "additional data1", data2, "...")
          exchange.CancelOrder(id, "additional data1", data2, "...")
          LogProfit(100, "additional data1", data2, "...")
      }
      
    • Penggunaan fungsi penunjuk Sebelum kita bercakap mengenai fungsi penunjuk, mari kita faham terlebih dahulu apa itu penunjuk.

      T:bagaimana penunjuk-penunjuk itu dihasilkan? A: Mereka pasti dihasilkan oleh pengiraan.

      T: Mereka dikira berdasarkan apa? A: Data K-line.

      P: Bolehkah anda memberikan contoh? J: Mengambil indikator purata bergerak yang paling mudah sebagai contoh. Jika kita menggunakan data K-line harian (iaitu, garis yang atau garis yin mewakili hari) sebagai sumber data untuk pengiraan indikator. Parameter indikator purata bergerak adalah 10, maka indikator purata bergerak yang dikira adalah purata bergerak 10 hari.

      T: jika bilangan BAR K-garis kurang daripada 10, bolehkah penunjuk purata bergerak dikira? A: Bukan sahaja penunjuk purata bergerak tidak boleh dikira, tetapi mana-mana penunjuk tidak boleh mengira nilai penunjuk berkesan apabila bilangan data garis K BAR tidak memenuhi parameter tempoh penunjuk, dan kedudukan yang sepadan dalam array dikira akan diisi dengan nilai kosong, sepertinulldipaparkan apabilaJavaScriptstrategi mencetak data penunjuk yang dikira.

      Ada contoh pengajaran di Lapangan:https://www.fmz.com/strategy/125770Backtest ini pengajaran contoh strategi, dan anda boleh melihat carta yang dihasilkan oleh sistem backtest dan 10 tempoh purata bergerak:

      img

      Dengan strategi lukisan khusus, garis K yang digambar dan carta purata bergerak:

      img

      P: bagaimana jika saya mahu menggunakan purata bergerak 10 jam? A: gunakan data K-line untuk tempoh satu jam.

      Secara ringkasnya, K-line yang kita lihat adalah array selepas kita mendigitalisasikannya (jika anda tidak memahami konsep array, anda boleh mencarinya di Baidu), dan setiap elemen array adalah bar K-line, yang disusun mengikut urutan. Biasanya bar terakhir data K-line adalah bar tempoh semasa, yang berubah dalam masa nyata dan tidak selesai (anda boleh memerhatikan perubahan dengan log masuk ke halaman platform dan memerhatikan K-line). Penunjuk yang dikira juga dalam satu-ke-satu korespondensi dengan bar K-line. Dalam contoh di atas, anda dapat melihat bahawa nilai penunjuk sepadan dengan bar K-line. Perhatikan bahawa bar K-line terakhir berubah dalam masa nyata, dan penunjuk yang dikira juga akan berubah dengan perubahan bar K-line.

      Di Platform Perdagangan Kuantum FMZ, anda boleh menggunakan perpustakaan TA (perpustakaan yang dilaksanakan oleh FMZ, bersepadu dalam docker, dan boleh digunakan secara langsung dalam pelbagai bahasa) atau talib (perpustakaan penunjuk terkenal lama talib, bersepadu dalam JS, C ++; Python perlu dipasang secara tambahan). Sebagai contoh, pengiraan purata dalam contoh di atas: Gunakan perpustakaan FMZ TA:

      function main() {
          var records = exchange.GetRecords()
          var ma = TA.MA(records, 10)
          Log(ma)       // print average
      }
      

      Gunakan talib:

      function main() {
          var records = exchange.GetRecords()
          var ma = talib.MA(records, 10)
          Log(ma)       // print average 
      }      
      

      Data indeks yang dikira ma adalah array, dan setiap elemen sepadan dengan array K-garis (rekod) satu demi satu, iaitu,ma[ma.length -1]sama denganrecords[records.length - 1], dan sebagainya.

      Ia adalah sama untuk penunjuk lain yang lebih rumit, dan anda perlu memberi perhatian kepada penunjuk seperti MACD.

      var macd = TA.MACD(records)   // In this way, only the K-line data is passed in, and no indicator parameters are passed in. The indicator parameters use the default values, and that is the same for other indicator functions
      

      Pada masa ini, pembolehubah macd adalah array dua dimensi (anda boleh Baidu, jika anda tidak memahami konsep). array dua dimensi adalah hanya array, dan setiap elemen juga array.

      T: Mengapa data penunjuk MACD adalah array dua dimensi? A: Kerana penunjuk macd terdiri daripada dua garis (garis dif dan garis dea) dan satu set bar jumlah (data bar jumlah macd, sebenarnya juga boleh dianggap sebagai garis).

      var dif = macd[0]
      var dea = macd[1]
      var macdbar = macd[2]
      

      Berikut juga contoh pengajaran siap; jika anda berminat, anda boleh mempelajarinya:https://www.fmz.com/strategy/151972

      img


Lebih lanjut