Cryptocurrency Quantitative Trading for Beginners - Membawa Anda Lebih Dekat dengan Cryptocurrency Quantitative (2)

Penulis:Lydia, Dibuat: 2022-07-27 16:34:41, Diperbarui: 2023-09-24 19:31:16

img

Cryptocurrency Quantitative Trading for Beginners - Membawa Anda Lebih Dekat dengan Cryptocurrency Quantitative (2)

Pada artikel sebelumnya, kami berbicara tentang skrip perdagangan programmatic. Pada kenyataannya, strategi perdagangan adalah program skrip perdagangan. Artikel ini terutama berbicara tentang kebutuhan akan pembawa perangkat keras untuk program skrip perdagangan (di mana program berjalan), dan program perdagangan skrip dapat ditulis dalam bahasa pemrograman komputer seperti apa (tiga bahasa pemrograman yang digunakan di FMZ Quant Trading Platform terdaftar. Tentu saja, Anda dapat menggunakan bahasa pemrograman apa pun untuk menerapkan strategi untuk perdagangan programmatic).

Skripsi perdagangan terprogram

  • Jenis strategi perdagangan Pemula untuk perdagangan terprogram dan perdagangan kuantitatif mungkin bingung dengan istilah, seperti berbagai strategi tren, strategi arbitrage, strategi frekuensi tinggi, strategi grid, dll.

    • Strategi lindung nilai arbitrase Secara sederhana, strategi yang memegang posisi panjang sementara memegang posisi pendek pada dasarnya dapat diklasifikasikan sebagai strategi arbitrase.
    • Strategi tren Sederhananya, ini adalah strategi untuk melacak tren untuk menempatkan pesanan dan memegang posisi, seperti rata-rata bergerak ganda, MACD dan strategi lainnya.
    • Strategi Regresi Sebagai contoh, strategi grid, membuat keuntungan dari fluktuasi harga di pasar yang tidak stabil.
    • Strategi frekuensi tinggi Sederhananya, ini adalah strategi untuk perdagangan frekuensi tinggi melalui beberapa algoritma untuk menemukan mikrostruktur pasar, pola, peluang, dll.

    Di atas dibagi dari perspektif strategi perdagangan. Dari perspektif desain strategi di Platform Perdagangan Kuantum FMZ, strategi juga dapat dibagi menjadi:

    • Strategi varietas tunggal Artinya, strategi ini hanya beroperasi pada satu spesies, seperti perdagangan BTC atau perdagangan ETH.
    • Strategi multi spesies Sederhananya, ini adalah untuk mengoperasikan beberapa spesies sesuai dengan logika strategis.
    • Strategi multi-akun Secara sederhana, beberapa objek pertukaran dikonfigurasi pada bot nyata (konsep pertukaran telah diperkenalkan dalam artikel sebelumnya, dan objek pertukaran dengan API KEY yang dikonfigurasi mewakili akun pertukaran).
    • Strategi logis ganda Misalnya, strategi MACD, strategi rata-rata bergerak, strategi grid dll dirancang pada saat yang sama dalam bot nyata (tentu saja, untuk mengoperasikan objek pertukaran yang berbeda, dan operasi objek pertukaran yang sama tergantung pada apakah strategi tertentu bertentangan secara logis)
  • Interface API Exchange Bagaimana skrip perdagangan programmatic mengoperasikan akun pertukaran? Jadi jenis antarmuka apa yang terbuka untuk pertukaran? Dalam artikel sebelumnya, kita berbicara tentang pertukaran memiliki antarmuka REST dan Websocket umumnya dalam bagian Exchange. Di sini kita menambahkan beberapa konsep dari tingkat prosedur strategi.

    • Antarmuka yang tidak memerlukan verifikasi Umumnya dikenal sebagai interface publik, jenis antarmuka ini tidak memerlukan verifikasiAPI KEY(jika Anda lupa apa itu API KEY, Anda dapat beralih ke artikel sebelumnya). Jenis antarmuka ini adalah antarmuka pasar pada umumnya, seperti menanyakan harga pasar yang mendalam, menanyakan data K-line, menanyakan tingkat pendanaan, menanyakan informasi tentang varietas perdagangan, menanyakan timestamp server pertukaran, dll. Sederhananya, antarmuka yang tidak terkait dengan akun Anda dapat ditentukan secara kasar untuk menjadi antarmuka publik (tidak perlu verifikasi)
      Di Platform Perdagangan Kuantum FMZ, ketika memanggil fungsi API yang tidak diverifikasi (menkapsulkan antarmuka yang tidak diverifikasi, antarmuka publik), bahkan jika konfigurasi API KEY tidak benar, data yang dikembalikan oleh antarmuka dapat diperoleh secara normal (karena tidak verifikasi).

    • Antarmuka yang membutuhkan verifikasi Sederhananya, ini adalah antarmuka yang perlu diverifikasi (melalui API KEY), antarmuka semacam ini disebut antarmuka pribadi. Biasanya terkait dengan beberapa operasi atau informasi akun Anda, seperti menanyakan aset akun, menanyakan posisi akun, menanyakan pesanan tertunda, menanyakan transfer, mentransfer mata uang, menyesuaikan leverage, mengatur mode posisi, dll. Semua operasi ini harus diverifikasi. Di Platform Perdagangan Kuantum FMZ, ketika memanggil fungsi API yang perlu diverifikasi (interface yang perlu diverifikasi untuk pertukaran yang dikapsulkan, antarmuka pribadi), jika KEY API dikonfigurasi dengan salah, kesalahan akan dilaporkan ketika antarmuka dipanggil, dan nilai nol akan dikembalikan.

    Jadi bagaimana antarmuka ini digunakan di FMZ Quant Trading Platform?

    FMZ Quant Trading Platform merangkum perilaku pertukaran dan antarmuka dengan definisi yang konsisten (seperti antarmuka K-line, antarmuka pasar mendalam, antarmuka kueri aset saat ini, antarmuka pesanan, antarmuka pembatalan pesanan, dll.), antarmuka ini disebut fungsi API FMZ Quant Trading Platform pada FMZ Quant Trading Platform, dan dapat diakses dari dokumentasi API (https://www.fmz.com/api).

    Jadi bagaimana beberapa antarmuka pertukaran dengan perilaku dan definisi yang berbeda digunakan pada FMZ Quant Trading Platform?

    Antarmuka pertukaran ini meliputi: transfer aset, pesanan bersyarat, penempatan pesanan batch, pembatalan pesanan batch, modifikasi pesanan, dll. Beberapa pertukaran memiliki antarmuka ini, beberapa tidak, dan fungsi dan rincian penggunaannya mungkin sangat berbeda sehingga antarmuka ini dapat diakses melaluiexchange.IOfungsi pada Platform Perdagangan Kuantum FMZ (untuk rincian, silakan lihat dokumentasi API Platform Perdagangan Kuantum FMZ:https://www.fmz.com/api#exchange.io..Ada juga beberapa contoh strategi IO praktis di kotak strategi Platform Perdagangan Kuantum FMZ.

    Apakah semua fungsi API pada dokumen FMZ Quant Trading Platform API menghasilkan permintaan jaringan?

    Pertama dan terpenting, antarmuka API dari bursa memiliki pembatasan frekuensi akses (seperti 5 kali per detik), dan akses tidak bisa terlalu sering, jika tidak akan melaporkan kesalahan http 429, dan akses akan ditolak (sebagian besar bursa melaporkan 429). Ada batasan yang sama untuk memanggil antarmuka pertukaran yang dikapsulkan pada Inventor Quantitative Trading Platform, tetapi tidak ada batasan tersebut pada fungsi API yang tidak menghasilkan permintaan jaringan pada FMZ Trading Quant Platform. Tidak semua fungsi API dari FMZ Quant Trading Platform akan menghasilkan permintaan jaringan. Beberapa dari mereka hanya memodifikasi beberapa pengaturan lokal, seperti mengatur pasangan perdagangan saat ini, mengatur kode kontrak, fungsi perhitungan indikator dan mendapatkan nama objek pertukaran, dll. Secara umum, dapat dinilai apakah permintaan jaringan terjadi dari tujuan fungsi. Selama data pertukaran, operasi akun pertukaran dan sebagainya adalah permintaan jaringan yang dihasilkan, antarmuka ini perlu memperhatikan frekuensi panggilan.

    • Mari kita bicara tentang beberapa masalah umum dan pengalaman saat menggunakan fungsi API di Platform Perdagangan Kuantum FMZ

      • Toleransi kesalahan Ini adalah kesalahan yang paling umum, yang telah mengganggu pemula yang tak terhitung jumlahnya. semuanya dari strategi backtesting sering normal, mengapa bot nyata berjalan untuk sementara (bisa dipicu kapan saja) dan kemudian gagal?

        img

        Saat menulis strategi, kita semua perlu menilai dan memverifikasi data yang dikembalikan oleh antarmuka. misalnya baris kode harga pasar untuk diperoleh di FMZ Quant Trading Platform (sama seperti menulis program untuk mengakses antarmuka pertukaran secara langsung sendiri):var ticker = exchange. GetTicker(), jika kita perlu menggunakanLast(harga akhir) data ditickervariabel (lihat struktur yang dikembalikan oleh fungsi GetTicker), kita perlu menggunakanvar newPrice = ticker.LastUntuk mendapatkan data seperti ini (apa newPrice? baru: terbaru, Harga: harga, ya!GetTicker()fungsi kembali ke data normal, itu OK, tapi jika ada request timeout, kesalahan jaringan, pertukaran menarik kabel jaringan, kabel terputus, anak menarik saklar listrik, dll... itu akan menyebabkanGetTicker()fungsi untuk kembali kenullPada saat ini, nilaitickeradalahnull, dan jika saya pergi untuk mengaksesnyaLast, program pengecualian akan terjadi dan program strategi akan berhenti. Tampaknya bahwa kegagalan panggilan antarmuka (GetTicker panggilan gagal dan mengembalikan null) bukan alasan langsung dari berhenti strategis bot nyata (alasan langsung adalah bahwa atribut darinullvariabel diakses). Laporan kesalahan kegagalan panggilan antarmuka tidak akan menyebabkan bot berhenti yang sebenarnya (penekanan). Jadi apa yang bisa kita lakukan untuk menghindari berhenti yang tidak normal dari bot nyata? Jawabannya adalah untuk melakukan pemrosesan fault-tolerant pada data yang dikembalikan oleh antarmuka.null(contoh bahasa JavaScript, bahasa lain biasanya sama) Tulis segmen kode singkat untuk deskripsi (ini hanya deskripsi, Anda tidak dapat menjalankannya secara langsung!)

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

        Tidak hanyaGetTickerantarmuka harus toleransi kesalahan, tetapi antarmuka dengan permintaan jaringan harus toleransi kesalahan untuk nilai kembali (jika Anda menggunakan nilai kembali fungsi) Ada banyak metode fault-tolerant, Anda dapat menggunakan_C()fungsi (lihat dokumentasi FMZ API) untuk menulis fungsi fault-tolerant dan merancang mekanisme fault-tolerant dan logika sendiri. Untuk penggunaan_C()fungsi, banyak pemula biasa menggunakannya dengan salah._C()fungsi adalah referensi fungsi, bukan panggilan fungsi._C(funcName, param1, param2), panggilan adalah benar, funcName adalah tanpa tanda kurung, dan param1 dan param2 adalah parameter yang akan diteruskan ke fungsi funcName._C(funcName(param1, param2)), panggilan tidak benar, biasanya ditulis oleh pemula yang tidak membaca dokumentasi FMZ API serius.

      • Jumlah pesanan dari pesanan pembelian pasar spot Jumlah pesanan pesanan beli pasar spot juga mudah untuk membuat kesalahan oleh pemula, seperti yang disebutkan dalam artikel sebelumnya, jumlah pesanan pesanan beli pasar spot biasanya jumlah (sangat sedikit bursa mungkin pengaturan lain, umumnya, pengaturan pertukaran khusus ini pada FMZ akan dijelaskan dalam dokumen FMZ API), misalnya saya menggunakan OKEX V5 demo untuk menguji: Pasangan perdagangan ditetapkan sebagai:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // Switch to the demo of OKEX exchange
            exchange.Buy(-1, 1)             // The price is -1, indicating that the order placed is a market order, and the quantity is 1, indicating that the order amount is 1USDT
        }
        

        Karena bursa umumnya memiliki batas jumlah pesanan, pesanan yang lebih kecil dari batas tidak akan ditempatkan (misalnya, Binance Spot membutuhkan setiap pesanan lebih dari 5USDT sebelum dapat ditempatkan dengan sukses). Oleh karena itu, akan melaporkan kesalahan jika Anda menempatkan pesanan seperti ini:

        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 dalam menempatkan pesanan di masa depan Ketika membuat strategi berjangka, arah penempatan order seringkali dibuat kesalahan oleh pemula, yang menyebabkan masalah. Mari kita lihat deskripsi pada dokumentasi API pertama:https://www.fmz.com/api#exchange.setdirection...

        img

        Karena fungsi order hanyaBuy, SellNamun, berjangka (tentu saja, tidak ada masalah dengan spot, spot hanya dibeli dan dijual) memiliki arah pembukaan panjang, menutup panjang, membuka pendek dan menutup pendek, jadi jelas bahwa Beli / Jual tidak dapat mengekspresikan operasi di begitu banyak arah.exchange.SetDirection(), yang menentukan arah perdagangan berjangka. Di FMZ,exchange.SetDirection("buy")(set the direction first) digunakan bersama denganexchange.Buy, itu berarti bahwa pesanan yang ditempatkan adalah pesanan untuk membuka posisi panjang. Dan seterusnya:exchange.SetDirection("sell")digunakan bersama denganexchange.Sell, itu berarti bahwa pesanan yang ditempatkan adalah perintah untuk membuka posisi pendek.exchange.SetDirection("closebuy")digunakan bersama denganexchange.Sell, itu berarti bahwa pesanan yang ditempatkan adalah perintah untuk menutup posisi panjang.exchange.SetDirection("closesell")digunakan bersama denganexchange.Buy, itu berarti bahwa pesanan yang ditempatkan adalah perintah untuk menutup posisi pendek. Pemula biasanya menggunakanexchange.SetDirection("sell")bersama denganexchange.Buy, atau kombinasi yang salah lainnya. kemudian kesalahan dilaporkan (backtesting mungkin tidak melaporkan kesalahan, tetapi ini jelas kesalahan logis, gangguan obsesif-kompulsif tidak bisa ditoleransi...). Kesalahan umum lainnya yang dilakukan oleh pemula

        function main() {
            exchange.SetContractType("quarter")   // Set the current contract as a quarterly contract
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("See my market order is placed and the transaction is completed, there is a position", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy is used in conjunction with Sell, yes~
            exchange.Sell(-1, 1)
        }
        

        img
        Di sini Anda mungkin bertanya: Mengapa saya memiliki posisi dan closebuy dan Sell juga digunakan bersama-sama, mengapa saya mendapatkan kesalahan dan tidak dapat menutup posisi? Saya akan menjawab: Anda telah menutup arah yang salah! Posisi panjang harus ditutup. Salah satu situasi yang mungkin terjadi dalam laporan kesalahan di atas adalah: arah penutupan ditetapkan dengan benar, fungsi order digunakan dengan benar, dan posisi di arah ini juga dipegang, tetapi kesalahan masih dilaporkan. Alasannya adalah bahwa program Anda mungkin telah menempatkan beberapa pesanan, tetapi pesanan awal belum diisi, dan pesanan penutupan sedang menunggu di pasar. Pada saat ini, program terus menutup posisi, dan kesalahan melebihi posisi penutupan akan diminta.

      • Log output, tampilan informasi transaksi Desain strategi perdagangan terprogram dan kuantitatif tidak dapat dipisahkan dari desain interaksi manusia-komputer, seperti data display dan operation log output. Misalnya: penggunaan pythonprintAku tidak tahu. penggunaan javascriptconsole.logAku tidak tahu. Penggunaan Golangfmt.Println()Aku tidak tahu. Penggunaan C++cout

        Mari kita bicara tentang tampilan informasi di platform FMZ, di FMZ Quant Trading Platform, ada dua tempat utama di mana informasi ditampilkan.

        • Kolom Status Setelah bot yang sebenarnya berjalan, halaman bot yang sebenarnya adalah seperti yang ditunjukkan pada gambar:

          img

          Bagian tampilan adalah informasi kolom status. Kolom status terutama digunakan untuk menampilkan beberapa data perubahan real-time (karena perubahan real-time perlu diamati secara real-time, dan tidak dapat dicetak sebagai log setiap kali, jenis data ini dapat ditampilkan di kolom status. Log akan mengulangi banyak data duplikat dan tidak berarti, mempengaruhi kueri jika setiap log dicetak). Data yang ditampilkan pada kolom status menggunakanLogStatusUntuk rincian, silakan lihat dokumentasi FMZ API.

        • Kolom log Juga dihapus pada halaman bot nyata, seperti yang ditunjukkan pada gambar:

          img

          Bagian tampilan adalah kolom log. Kolom log terutama digunakan untuk merekam data tertentu pada waktu tertentu secara permanen, atau merekam operasi strategi tertentu pada waktu tertentu. Ada berbagai jenis log:

          1. Log umum, strategi di FMZ mengadopsi fungsi Log untuk output dan mencetak di log strategi.

            img

          2. Pesan log, penggunaanexchange.Sell/exchange.Buydalam strategi FMZ akan mencatat dalam log output secara otomatis.

            img

          3. Log pembatalan,exchange.CancelOrderdigunakan dalam strategi FMZ, yang akan output log pembatalan dalam log secara otomatis.

            img

          4. Log kesalahan, ketika strategi di FMZ sedang berjalan, kesalahan panggilan terjadi pada antarmuka yang membuat permintaan jaringan, pengecualian dilemparkan (seperti pernyataan lempar), log kesalahan output di log secara otomatis.

            img

        Fungsi API pada FMZ, fungsi yang dapat menghasilkan output log seperti Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id), dll, semuanya dapat diikuti oleh beberapa parameter output tambahan setelah parameter yang diperlukan, seperti: exchange. CancelOrder ((orders[j].Id, orders[j]), ini adalah untuk output informasi pesanan ketika urutan pesanan[j] dibatalkan.

        function main() {
            Log("data1", "data2", "data3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "Attached data1", data2, "...")
            exchange.CancelOrder(id, "Attached data1", data2, "...")
            LogProfit(100, "Attached data1", data2, "...")
        }
        
      • Penggunaan fungsi indikator Sebelum membahas fungsi indikator, mari kita mengerti dulu apa itu indikator. Sederhananya, ini adalah garis, seperti moving average, MACD dan ATR. T: Dari mana indikator ini berasal? A: Tentu saja itu dihitung. T: Apa dasar perhitungan ini? A: Perhitungan berdasarkan data garis K. P: Ambil contoh? A: Mengambil indikator rata-rata bergerak yang paling sederhana sebagai contoh, jika kita menggunakan data K-line harian (yaitu, garis positif atau negatif mewakili satu hari) sebagai sumber data untuk perhitungan indikator. T: Dapatkah indikator rata-rata bergerak dihitung jika jumlah BAR garis K kurang dari 10? A: Tidak hanya indikator rata-rata bergerak tidak dapat dihitung, tetapi indikator tidak dapat menghitung nilai indeks efektif ketika jumlah data garis K BAR tidak memenuhi parameter periode indikator, dan posisi yang sesuai dari array yang dihitung akan diisi dengan nilai kosong, misalnya,JavaScriptstrategi bahasa akan ditampilkannullsaat mencetak data indikator yang dihitung.

        Ternyata ada contoh tutorial di kotak strategi:https://www.fmz.com/strategy/125770Backtest strategi contoh tutorial, kita dapat melihat grafik yang dihasilkan oleh sistem backtesting dan rata-rata bergerak 10 periode:

        img

        Strategi gambar khusus, K-line ditarik serta grafik rata-rata bergerak.

        img

        T: Bagaimana jika saya ingin rata-rata bergerak 10 jam? A: Menggunakan data K-line dengan data K-line periode per jam akan baik-baik saja.

        Dalam istilah awam, K-line yang kita lihat adalah array setelah kita mendigitalkannya (Anda dapat bertanya kepada Baidu jika Anda tidak mengerti konsep array), yang setiap elemen adalah kolom K-line, yang diatur dalam urutan, elemen pertama dalam array adalah yang terjauh dari waktu saat ini, dan elemen terakhir array adalah yang paling dekat dengan waktu saat ini. Biasanya, bar terakhir dari data K-line adalah bar periode saat ini, yang berubah secara real time dan tidak lengkap (Anda dapat mengamati perubahan dengan masuk ke halaman pertukaran dan mengamati K-line). Indikator yang dihitung juga sesuai dengan bar K-line. Dalam contoh di atas, kita dapat melihat bahwa nilai indikator sesuai dengan bar K-line. Perhatikan bahwa bar K-line terakhir berubah secara real time, dan indikator yang dihitung juga akan berubah dengan perubahan bar K-line.

        Di Platform Perdagangan Kuantum FMZ, kita dapat menggunakan perpustakaan TA (perpustakaan yang diimplementasikan oleh platform FMZ, terintegrasi dalam docker, dan berbagai bahasa dapat digunakan secara langsung) atau perpustakaan talib (perpustakaan indikator talib lama, integrasi JS, C ++, Python perlu diinstal sendiri). Misalnya, untuk menghitung rata-rata bergerak dalam contoh di atas: Gunakan perpustakaan TA:

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

        Gunakan perpustakaan talib:

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

        Data indikator yang dihitung ma adalah array, dan setiap elemen sesuai dengan array K-line (rekaman) satu-ke-satu, yaitu,ma[ma.length -1]sesuai denganrecords[records.length - 1], dan sebagainya.

        Hal yang sama berlaku untuk indikator kompleks lainnya, dan kita perlu memperhatikan indikator seperti MACD.

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

        Pada saat ini, variabel macd adalah array dua dimensi (Anda dapat bertanya kepada Baidu jika Anda tidak mengerti konsepnya). T: Mengapa data indikator macd adalah array dua dimensi? A: Karena indikator macd terdiri dari dua garis (garis dif, garis dea) dan seperangkat batang volume (garis volume macd, pada kenyataannya data batang volume ini juga dapat dianggap sebagai garis).

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

        Berikut juga contoh tutorial siap pakai, jika Anda tertarik, Anda dapat belajar di:https://www.fmz.com/strategy/151972

        img


Berkaitan

Lebih banyak