Perdagangan Kuantitatif Lingkaran Mata Uang terlihat baru -- membawa Anda lebih dekat ke Kuantitatif Lingkaran Mata Uang (II)

Penulis:Mimpi kecil, Dibuat: 2021-04-19 14:16:21, Diperbarui: 2023-09-24 19:30:05

img

Perdagangan Kuantitatif Lingkaran Mata Uang Yang Baru Terlihat Yang Membawa Anda Mendekat Ke Kuantitatif Lingkaran Mata Uang (II)

Pada artikel sebelumnya, kami berbicara tentang skrip perdagangan terprogram. Pada kenyataannya, strategi perdagangan adalah skrip perdagangan. Artikel ini terutama berbicara tentang skrip perdagangan yang membutuhkan pembawa perangkat keras (di mana program berjalan), skrip perdagangan yang dapat ditulis dalam bahasa pemrograman komputer (mencantumkan tiga bahasa pemrograman yang digunakan oleh penemu pada platform perdagangan kuantitatif, tentu saja untuk melakukan perdagangan terprogram sendiri dapat menggunakan bahasa pemrograman mana pun untuk menerapkan strategi).

Skripsi transaksi terprogram

  • Jenis Strategi Perdagangan Para pemula dalam perdagangan terprogram, perdagangan kuantitatif, dan lain-lain mungkin tertipu dengan berbagai istilah seperti strategi tren, strategi opsi, strategi frekuensi tinggi, strategi grid, dan lain-lain.

    • Strategi lindung nilai Secara sederhana, strategi seperti memegang posisi banyak melihat dan memegang posisi sedikit melihat dapat diklasifikasikan sebagai strategi leverage. Ada banyak jenis spesifik, pasar spot cross, jangka panjang futures, leverage futures, leverage cross-variety, dll.
    • Strategi tren Dengan kata lain, ini adalah strategi untuk menindaklanjuti tren yang terjadi, seperti biner atau MACD.
    • Strategi Kembali Sebagai contoh, strategi jaring untuk mengambil keuntungan dari fluktuasi harga di pasar yang bergolak.
    • Strategi Frekuensi Tinggi Dengan kata lain, ini adalah strategi untuk melakukan perdagangan frekuensi tinggi melalui beberapa algoritma untuk menemukan struktur mikro pasar, aturan, peluang, dll.

    Di atas ini dibagi dari sudut pandang strategi perdagangan, dan dari sudut pandang desain strategi pada inventor platform perdagangan kuantitatif, strategi juga dapat dibagi menjadi:

    • Strategi Uniseluler Ini berarti bahwa strategi ini hanya beroperasi pada satu varietas, seperti melakukan perdagangan BTC atau melakukan perdagangan ETH.
    • Strategi Multivarietas Dengan kata lain, ini adalah strategi logis untuk mengoperasikan beberapa varietas.
    • Kebijakan multi-akun Dengan kata lain, ini adalah sebuah perangkat yang dapat mengkonfigurasi beberapa objek bursa di tempat kerja (yang telah diperkenalkan dalam artikel sebelumnya, dengan mengkonfigurasi objek bursa dengan API KEY untuk mewakili satu akun bursa). Misalnya, beberapa kebijakan daftar, beberapa akun mengikuti operasi bersama (bisa menjadi satu bursa, atau mungkin berbeda bursa), dan hanya mengelola beberapa objek bursa di tempat kerja (akun).
    • Strategi Multi Logika Pada sebuah disk, misalnya, strategi MACD, strategi linear, strategi grid, dll. (Tentu saja, untuk mengoperasikan objek yang berbeda, untuk mengoperasikan objek yang sama harus melihat apakah strategi tertentu secara logis bertentangan)
  • Interface API Bursa Bagaimana skrip perdagangan terprogram dapat mengoperasikan akun bursa? Jawabannya adalah dengan membuka API melalui bursa. Lalu, apa saja jenis antarmuka yang tersedia di bursa? Pada artikel sebelumnya, di bagian "bursa", kita membahas tentang antarmuka REST, Websocket. Di sini kita menambahkan sedikit konsep dari tingkat program kebijakan.

    • Antarmuka yang tidak perlu diverifikasi Umumnya disebut sebagai kerucut antarmuka publik, jenis antarmuka ini tidak memerlukan verifikasiAPI KEY(Lupakan apa itu API KEY Anda dapat mengklik artikel sebelumnya). Antarmuka ini biasanya merupakan antarmuka pasar, seperti menanyakan pasar yang mendalam, menanyakan data K-line, menanyakan tingkat dana, menanyakan informasi tentang jenis transaksi, menanyakan waktu server bursa, dll. Dengan kata lain, sebuah antarmuka yang tidak terkait dengan akun Anda dapat dipastikan bahwa itu adalah antarmuka publik (tidak perlu verifikasi).
      Pada platform perdagangan kuantitatif penemu, ketika memanggil fungsi API yang tidak diverifikasi (pertukaran yang dikemas dengan antarmuka yang tidak diverifikasi, antarmuka publik) data yang dikembalikan ke antarmuka dapat diperoleh dengan normal bahkan jika konfigurasi API KEY salah.

    • Antarmuka yang harus diverifikasi Secara sederhana, antarmuka yang harus diverifikasi (dengan verifikasi dengan API KEY) disebut antarmuka pribadi. Antarmuka ini biasanya terkait dengan beberapa operasi atau informasi yang berkaitan dengan akun Anda, seperti mencari aset akun, mencari stok akun, meminta penundaan, meminta transfer, transfer, mengubah mata uang, mengatur leverage, mengatur mode stok, dll. Operasi ini harus diverifikasi. Pada platform perdagangan kuantitatif penemu, ketika memanggil fungsi API yang membutuhkan validasi (interface yang membutuhkan validasi, antarmuka pribadi yang terbungkus), jika API KEY dikonfigurasi dengan salah, kesalahan akan muncul saat memanggil antarmuka, mengembalikan nilai kosong.

    Jadi bagaimana pengguna menggunakan antarmuka ini di platform inventor kuantitatif?

    Inventor Quantified Trading Platform mengemas perilaku pertukaran, mendefinisikan antarmuka yang konsisten (misalnya antarmuka K-line, antarmuka pasar dalam, antarmuka yang menanyakan aset saat ini, antarmuka yang menundukkan, antarmuka yang mencabut pesanan, dll.), yang disebut sebagai fungsi API Inventor Quantified Trading Platform di Inventor Quantified Trading Platform, yang dapat dilihat dengan menanyakan dokumentasi API.https://www.fmz.com/api )。

    Jadi bagaimana beberapa perilaku, definisi dan antarmuka pertukaran yang tidak seragam dapat digunakan pada platform perdagangan kuantitatif para penemu?

    Pertukaran ini memiliki antarmuka seperti: pembagian aset, penugasan kondisional, pemesanan dalam jumlah besar, penarikan dalam jumlah besar, pemesanan modifikasi, dll. Beberapa pertukaran memiliki antarmuka ini, beberapa tidak, dan fungsionalitas, detail penggunaan dapat sangat berbeda, sehingga antarmuka ini dapat digunakan pada platform perdagangan kuantitatif penemu.exchange.IOFungsi ini dapat diakses dengan melihat dokumen API inventor untuk detailnya:https://www.fmz.com/api#exchange.io................

    Apakah semua fungsi API dalam dokumentasi API inventor menghasilkan permintaan jaringan?

    Jika kita mengatakan bahwa antarmuka API pertukaran memiliki batas frekuensi akses (misalnya 5 kali per detik), akses tidak boleh terlalu sering atau akan melaporkan kesalahan http 429, maka akses ditolak (sebagian besar pertukaran adalah 429). Tidak semua fungsi API dari inventor menjumlahkan platform perdagangan yang menghasilkan permintaan jaringan, dan beberapa fungsi API hanya mengubah beberapa pengaturan lokal, seperti mengatur pasangan perdagangan saat ini, mengatur kode kontrak, fungsi perhitungan indikator, mendapatkan nama objek pertukaran, dll. Pada dasarnya dari penggunaan fungsi dapat dipastikan apakah terjadi permintaan jaringan, asalkan mendapatkan data bursa, operasi akun bursa, dll.

    • Berikut adalah beberapa pertanyaan dan pengalaman yang sering dialami oleh penemu ketika menggunakan fungsi API untuk platform perdagangan kuantitatif.

      • Bersalah Ini adalah kesalahan yang paling umum, yang mengganggu banyak inovasi, seringkali strategi untuk mengecek kembali semuanya baik-baik saja, mengapa hardisk berjalan untuk sementara waktu (bisa memicu kapan saja) dan hardisknya hang ~

        img

        Ketika menulis kebijakan, kita perlu menilai verifikasi data yang dikembalikan oleh antarmuka, misalnya, untuk mendapatkan pasar di platform perdagangan kuantitatif penemu (seperti menulis program sendiri untuk mengakses antarmuka pertukaran langsung):var ticker = exchange.GetTicker()Jika kita perlu menggunakan ini,tickerVariabel (lihat struktur yang dikembalikan oleh fungsi GetTicker)Last(Harga baru-baru ini) data ini, kita perlu menggunakannya.var newPrice = ticker.LastDengan cara ini kita mendapatkan data ((newPrice adalah???new: terbaru,Price: harga, ya! digabungkan!)GetTicker()Fungsi ini mengembalikan data yang normal, tetapi jika terjadi penundaan permintaan, kesalahan jaringan, pemotongan kabel, pemotongan kabel, anak beruang menarik kabel, dll.GetTicker()Fungsi kembalinull❖ Pada saat initickerJadi nilai ini adalahnullSaya akan kembali ke sana.LastJika tidak, maka akan terjadi kesalahan dalam program yang menyebabkan proses kebijakan berhenti. Dengan demikian, kegagalan panggilan antarmuka (GetTicker call failure returns null) bukan penyebab langsung kebijakan disk berhenti (penyebab langsung adalah akses ke salah satunullProperti variabel), panggilan antarmuka gagal melaporkan kesalahan yang tidak menyebabkan disk benar berhenti (digariskan). Jadi apa yang bisa kita lakukan untuk menghindari disk yang berhenti secara tidak teratur? Jawabannya adalah bahwa data yang dikembalikan oleh antarmuka akan diproses dengan kesalahan, dan itu sangat sederhana, hanya dengan menilai apakah data yang dikembalikan adalah data yang benar atau salah.null(Contoh bahasa JavaScript, bahasa lain hampir sama) Tuliskan kode singkat untuk menjelaskan (Ini hanya petunjuk, berjalan langsung adalah hal yang tidak mungkin!)

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("打印最新价格:", newPrice)
        } else {
            // 数据为null,不做操作就不会出问题
        }
        

        Tidak hanya itu.GetTickerInterface harus melakukan kesalahan, dan semua antarmuka yang memiliki permintaan jaringan harus melakukan kesalahan pada nilai pengembalian (jika Anda menggunakan nilai pengembalian fungsi) Ada banyak cara yang bisa digunakan untuk memaafkan kesalahan._C()Fungsi (lihat dokumentasi FMZ API), menulis sendiri fungsi error, merancang sendiri mekanisme error, logika. Tentang_C()Jika Anda menggunakan fungsi, banyak siswa baru yang mungkin juga salah._C()Parameter fungsi adalah referensi fungsi, bukan panggilan fungsi._C(funcName, param1, param2), disebut benar, funcName tidak memiliki tanda kurung kecil, param1, param2 adalah parameter yang akan dikirim ke fungsi funcName._C(funcName(param1, param2))Jika Anda tidak tahu apa yang Anda lakukan, Anda mungkin tidak tahu apa yang Anda lakukan.

      • Jumlah pesanan pesanan harga pasar langsung Dalam artikel sebelumnya, kami telah berbicara tentang jumlah pesanan pesanan pesanan pasar langsung (pertukaran yang sangat berbeda mungkin memiliki pengaturan lain, yang biasanya akan dijelaskan dalam dokumentasi FMZ API). Pasangan transaksi diatur sebagai berikut:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
            exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
        }
        

        Karena bursa umumnya memiliki batas jumlah pesanan, pesanan yang lebih kecil dari batas tidak akan ditagih terlebih dahulu (misalnya, Binance Cash memerlukan setiap pesanan yang lebih besar dari 5 USDT untuk berhasil ditagih).

        错误	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 waktu pengiriman Dalam strategi futures, salah satu cara yang sering dilakukan para pemula adalah dengan membuat kesalahan yang menyebabkan masalah, misalnya dengan menulis strategi pada inventor di platform perdagangan kuantitatif. Pertama, mari kita lihat deskripsi dalam dokumen API:https://www.fmz.com/api#exchange.setdirection...

        img

        Karena fungsi ini hanyaBuy,SellNamun, jika futures (tidak masalah, hanya jual beli saja) memiliki arah terbuka, terbuka, terbuka, kosong, maka jelas Buy/Sell tidak menunjukkan banyak arah operasi, maka perlu diperkenalkan fungsi ini untuk mengatur arah perdagangan futures.exchange.SetDirection()Saya tidak tahu. Di FMZexchange.SetDirection("buy")(Seterusan arah) danexchange.BuyJika digunakan bersama-sama, maka tanda di bawah ini menunjukkan bahwa pesanan telah dibuka. Seperti ini:exchange.SetDirection("sell")danexchange.SellJika digunakan bersama-sama, maka tanda di bawah ini adalah pesanan untuk toko kosong.exchange.SetDirection("closebuy")danexchange.SellJika digunakan bersama-sama, maka tanda di bawah ini adalah order dengan harga murah.exchange.SetDirection("closesell")danexchange.BuyJika digunakan bersama-sama, maka akan menunjukkan bahwa daftar di bawah ini adalah pesanan untuk gudang kosong. Umumnya, anak-anak baruexchange.SetDirection("sell")danexchange.BuyDengan menggunakan kombinasi dari kesalahan-kesalahan lain, atau kombinasi dari kesalahan-kesalahan lain. Kemudian kesalahan-kesalahan tersebut dilaporkan (mungkin tidak terjadi, tetapi ini adalah kesalahan logis yang jelas, obsesi tidak bisa ditoleransi...). Salah satu kesalahan lain yang sering dilakukan Liu Xiaobo

        function main() {
            exchange.SetContractType("quarter")   // 设置当前合约为季度合约
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
            exchange.Sell(-1, 1)
        }
        

        img
        Lihat di sini akan bertanya: kenapa saya memiliki saham dan closebuy dan sell juga digunakan bersama, bagaimana bisa laporan yang salah, tidak bisa ditargetkan? Kesalahan ini juga dapat terjadi pada situasi seperti: posisi posisi di atas ditetapkan dengan benar, penggunaan fungsi bawah juga benar, dan memegang posisi di arah ini, tetapi masih melaporkan kesalahan ini. Hal ini mungkin karena program Anda telah melakukan beberapa kali pesanan, pesanan awal tidak ditangani, order neraca tergantung di piringan menunggu transaksi, saat ini program melanjutkan untuk neraca, maka akan menunjukkan kesalahan di luar posisi neraca.

      • Ekspor log, tampilan informasi transaksi Desain menulis program, mengkuantifikasi strategi transaksi dari data yang tidak terbuka untuk menampilkan kerucut, kerucut log operasi output kerucut, dll. Desain interaksi mesin. Biasanya menggunakan bahasa pemrograman asli untuk menulis skrip disk nyata, program kebijakan. Menggunakan fungsi output langsung dari bahasa saat ini. Misalnya: menggunakan pythonprintSaya tidak tahu. menggunakan javascriptconsole.logSaya tidak tahu. Golangfmt.Println()Saya tidak tahu. C++ digunakancout

        Pada saat yang sama, informasi di platform FMZ menunjukkan bahwa ada dua lokasi utama di mana informasi ditampilkan pada platform perdagangan kuantitatif penemu.

        • Tombol status Setelah menjalankan hardisk, halaman hardisk terlihat seperti ini.

          img

          Bagian yang ditampilkan adalah informasi status bar, status bar terutama untuk menampilkan beberapa perubahan data secara real-time (karena perubahan real-time perlu diamati secara real-time, dan tidak dapat dicetak ke log setiap kali, maka data semacam ini dapat ditampilkan di status bar, jika setiap log dicetak akan banyak data berulang yang tidak berarti, mempengaruhi kueri). Tampilkan penggunaan data pada status barLogStatusFungsi-fungsi ini dapat dilihat pada dokumentasi API FMZ.

        • Kupu-kupu log Di halaman real disk juga, seperti yang ditunjukkan pada gambar:

          img

          Bagian yang ditampilkan adalah tab log, yang terutama digunakan untuk mencatat secara permanen data tertentu pada saat tertentu, atau mencatat suatu operasi yang dilakukan pada suatu waktu tertentu. Di sini kita akan membahas beberapa jenis log: 1, log biasa, log output menggunakan fungsi Log dalam kebijakan FMZ, dan log cetak dalam kebijakan.

          img

          2 Di bawah ini adalah log yang digunakan dalam kebijakan FMZexchange.Sell/exchange.BuyIni akan secara otomatis mengekspor catatan ke log.

          img

          3, Daftar Pengecualian, Strategi FMZexchange.CancelOrderJika Anda tidak memiliki akun Facebook, maka Anda tidak akan dapat mengakses akun Facebook Anda.

          img

          4, kesalahan log, kebijakan FMZ saat berjalan, kesalahan panggilan terjadi pada antarmuka yang melakukan permintaan jaringan, kesalahan log yang dikeluarkan secara otomatis di log (misalnya kalimat seperti throw).

          img

        Fungsi API FMZ, yang dapat menghasilkan fungsi output log seperti Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id) dan lain-lain dapat digunakan dengan beberapa parameter output tambahan setelah parameter yang diperlukan, seperti: exchange.CancelOrder ((orders[j].Id, orders[j]) sehingga saat membatalkan order order[j], informasi pesanan ini akan ditambahkan.

        function main() {
            Log("数据1", "数据2", "数据3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
            exchange.CancelOrder(id, "附带数据1", data2, "...")
            LogProfit(100, "附带数据1", data2, "...")
        }
        
      • Penggunaan fungsi indikator Sebelum kita membahas fungsi indikator, kita harus memahami apa itu indikator, yaitu garis rata, MACD, ATR, dll. Pertanyaan: Bagaimana indikator-indikator ini muncul? A: Tentu saja terhitung. Pertanyaan: Berdasarkan apa? Jawaban: Berdasarkan data garis K. Pertanyaan: Contoh? A: Dalam contoh indikator rata-rata yang paling sederhana, jika kita menggunakan garis K hari (yaitu sinar matahari atau garis kemerahan yang mewakili satu hari) sebagai sumber data untuk perhitungan indikator; parameter indikator rata-rata adalah 10, maka indikator rata-rata yang dihitung adalah garis rata-rata 10 hari. Pertanyaan: Apakah Anda dapat menghitung indikator rata-rata jika jumlah garis K BAR kurang dari 10 bit? A: Tidak hanya indikator rata-rata yang tidak dapat dihitung, indikator mana pun tidak dapat dihitung dengan nilai indikator yang efektif ketika jumlah data BAR pada K-line tidak memenuhi parameter siklus indikator, dan di tempat yang sesuai dengan array yang dihitung akan diisi dengan nilai kosong, misalnya.JavaScriptKebijakan bahasa akan menampilkan data indikator saat dicetaknull

        Salah satu contoh yang ada di Praha Strategy adalah:https://www.fmz.com/strategy/125770Dengan mengevaluasi strategi contoh pengajaran ini, Anda dapat melihat grafik yang dihasilkan oleh sistem revisi dan garis rata-rata 10 siklus:

        img

        Strategi untuk membuat grafik khusus, garis K yang digambar, dan grafik garis rata:

        img

        T: Bagaimana jika saya ingin garis rata-rata 10 jam? Jawaban: Data K-line dapat digunakan untuk data K-line dengan siklus jam.

        Secara umum, garis K yang kita lihat, setelah kita mengdatanya adalah sebuah matriks (konsep matriks tidak dipahami, bisa di bawah Bauda), di mana setiap elemen adalah sebuah kolom garis K, yang disusun dalam urutan, elemen pertama matriks adalah yang terjauh dari waktu saat ini, dan elemen terakhir matriks adalah yang terdekat dari waktu saat ini. Biasanya kolom garis terakhir data K-line adalah kolom garis dari siklus saat ini, yang berubah secara real-time, yang belum selesai (menonton halaman yang masuk ke sebuah bursa untuk melihat K-line-nya, perubahan dapat diamati). Indikator yang dihitung juga sesuai dengan kolom K-line satu per satu, contoh di atas dapat melihat nilai indikator yang sesuai dengan kolom K-line. Perhatikan bahwa kolom K-line terakhir berubah secara real-time, dan indikator yang dihitung juga akan berubah mengikuti perubahan kolom K-line.

        Di platform inventor kuantitatif, Anda dapat menggunakan TA library (FMZ platform implemented library, terintegrasi di host, berbagai bahasa dapat digunakan secara langsung) atau menggunakan talib library (talib trademark index library, JS, C ++ integrasi, Python perlu instalasi sendiri). Contoh di atas adalah garis rata perhitungan: Menggunakan TA:

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // 打印均线
        }
        

        Menggunakan Talib Library:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // 打印均线
        }      
        

        Data indikator yang dihitung ma adalah suatu array, dimana setiap elemen memiliki satu rekaman K, yaituma[ma.length -1]Tanda-tandarecords[records.length - 1]"Saya tidak tahu apa yang akan terjadi", katanya.

        Indikator lain yang lebih kompleks juga sama, yang perlu diperhatikan seperti MACD.

        var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
        

        Pada saat ini variabel macd adalah suatu matrix dua dimensi (tidak mengerti konsepnya), matrix dua dimensi secara sederhana adalah sebuah matrix yang setiap elemennya juga merupakan sebuah matrix. Pertanyaan: Mengapa data indikator macd adalah aritmatika 2D? Jawaban: Karena indikator macd terdiri dari dua garis (garis dif, garis dea) dan satu set kolom kuantitas (garis macd, yang pada kenyataannya data kolom kuantitas ini juga dapat dianggap sebagai sebuah garis) maka variabel macd dapat dibagi menjadi:

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

        Di sini juga ada contoh pengajaran siap pakai, penelitian yang menarik:https://www.fmz.com/strategy/151972

        img


Berkaitan

Lebih banyak