Yang terutama kita bicarakan di sini adalah penerapan kode real-time terprogram untuk strategi perdagangan frekuensi menengah dan rendah.

Strategi

Kelahiran strategi perdagangan kuantitatif umumnya didasarkan pada pengamatan dan pemahaman pasar, menghasilkan ide strategi, kemudian merancang rincian spesifik dari strategi tersebut, dan kemudian menguji kembali berbagai jenis data untuk mendapatkan dan memverifikasi pengaruh nilai parameter tertentu. . Jika efeknya bagus dan dapat diterapkan secara universal, maka langkah selanjutnya adalah menguji pasar riil dengan dana kecil. Jika penawaran nyata di luar sampel memungkinkan, pada akhirnya Anda dapat menambah dana dan menjalankannya untuk waktu yang lama.

Untuk mencegah leverage, izinkan saya menjelaskan bahwa tentu saja ada metode lain untuk menghasilkan strategi, seperti penambangan data, penggalian, penggalian, faktor penggalian. Ada juga faktor pembangkitan otomatis seperti pembelajaran mesin dan pembelajaran penguatan. Namun, metode black box semacam ini sulit untuk tetap dijalankan selama periode retracement strategi, karena Anda tidak tahu kapan dan mengapa faktor penggalian ini akan gagal. Saat melakukan perdagangan kuantitatif, hal terpenting adalah bersikeras pada perdagangan yang tegas. Jika pasar tidak bagus, Anda bisa mengecilkan posisi Anda, tapi Anda tidak bisa menutupnya. Tidak ada yang tahu kapan pasar besar akan pecah. Jika Anda melewatkannya, retracement Anda sebelumnya akan sia-sia.

Sebuah analogi adalah bahwa perancangan dan pengujian kembali strategi setara dengan “perhitungan kuil” yang disebutkan dalam “Seni Perang” oleh Sun Tzu. “Orang yang tidak memiliki pertempuran tetapi kuil adalah pemenangnya harus menghitung lebih banyak; siapa yang belum bertarung tapi kuilnya yang kalah harus menghitung. "Lebih sedikit lebih baik. Lebih banyak berarti kemenangan, lebih sedikit berarti lebih sedikit, dan tidak ada yang berarti!"

Oleh karena itu, strategi trading harus direncanakan dengan baik dan diperhitungkan dengan cermat sejak desain awal, jika tidak, Anda justru akan rugi sebelum penawaran sebenarnya dilakukan. Langkah ini adalah yang paling sulit. Meskipun kode sebenarnya selanjutnya tidak mudah, sebagian besar hanya membosankan. Jika Anda menghabiskan lebih banyak waktu dan tenaga, Anda selalu dapat melakukannya dengan baik. Kunci dari penawaran yang pasti adalah pengendalian risiko.

Strategi perdagangan, atau aturan perdagangan, memungkinkan kita untuk "melakukan hal yang benar", dan penerapan spesifik dari penawaran sebenarnya adalah "melakukan hal yang benar". Seringkali, mengetahui arah yang benar jauh lebih sulit daripada berjalan jauh. Sama seperti lelucon tentang memperbaiki peralatan, dibutuhkan biaya seribu yuan untuk menarik garis. Menggambar garis itu sendiri hanya bernilai 1 dolar, tetapi mengetahui di mana menggambarnya berharga 999.

Strategi + penawaran nyata bersama-sama membentuk sistem perdagangan. Mengenai desain sistem trading, Anda bisa merujuk pada artikel sebelumnya: Tujuh Elemen Sistem Trading yang Lengkap. Tawaran sebenarnya di sini sebenarnya adalah operasi spesifik dari 4 langkah berikutnya dari sistem perdagangan, "Masuk dan Keluar dari Untung dan Rugi". Tiga langkah pertama pada dasarnya ditentukan ketika desain strategi selesai.

Namun, meskipun strateginya bagus, jika implementasi sebenarnya tidak dilakukan, pengaruhnya akan sangat berkurang, dan bahkan strategi potensial yang awalnya bagus akan terhenti. Mengembangkan strategi yang baik tidaklah mudah, jadi jangan gagal dalam mengeksekusinya. Ide yang bagus perlu diterapkan dengan tegas pada akhirnya.

pertanyaan

1. Tren pasar yang tiba-tiba

Strategi semacam ini hanya akan ditemui jika ada sinyal di dalam bar. Di dalam bar, harga penutupan atau harga pembukaan garis K tertentu tidak digunakan, namun harga intraday digunakan untuk memicu sinyal.

Berikut adalah contoh masalah yang ditemui pada penawaran sebenarnya beberapa hari yang lalu. Contoh mikroskopis dari pasar perdagangan. Hal ini cukup umum terjadi di kalangan mata uang.

Gambar di bawah ini adalah garis K 10 detik dari kontrak abadi BNB beberapa hari yang lalu (2023.7.10 17:21) (batang adalah arti OHLCV yang dikumpulkan dari data transaksi dalam 10 detik).

Seperti yang Anda lihat, amplitudo garis positif besar adalah 3,53%, dan transaksinya sekitar 30 juta dolar. Selesai dalam 10 detik. Sebelum dimulainya pasar ini, trennya hampir lancar.

Perhatikan gambar di bawah ini yang merupakan garis k 1 detik pada saat itu, anda bisa mendapatkan lebih detailnya.

Pada dasarnya dibutuhkan sekitar 4 detik untuk naik sepenuhnya. Itu naik lebih dari 2 poin di detik pertama. Ini pada dasarnya adalah hasil dari strategi frekuensi tinggi (berbasis peristiwa, tren frekuensi tinggi, pembentukan pasar, dll.) dan perintah algoritmik yang dapat diatur sebelumnya.

Mari kita lihat K-line 4 jam BNB. Garis positif terbesar adalah periode waktu berita tersebut keluar. Amplitudo 4,05%.

Membandingkan garis-K pada periode-periode ini, kita dapat melihat bahwa fluktuasi yang didorong oleh berita semacam ini (kali ini beritanya adalah IEO baru Binance, ARKM), umumnya diselesaikan secara instan. Peningkatan 4 jam sebenarnya tidak jauh berbeda dengan 10 detik, dan start-up sebenarnya hanya sekitar 4 detik. Medan perang semacam ini termasuk dalam strategi frekuensi tinggi yang dipersenjatai habis-habisan. Namun, hal ini juga dapat mempengaruhi strategi frekuensi menengah dan rendah, sehingga menyebabkan slippage yang lebih besar.

Kami tidak akan mempelajari strategi frekuensi tinggi di sini. Apa artinya strategi frekuensi menengah dan rendah? Ada dua hal utama yang terlintas dalam pikiran:

1. Beberapa tren terjadi secara tiba-tiba dan selesai dalam waktu singkat, sehingga strategi tidak dapat ditunda begitu saja. Penawaran nyata dalam lingkaran mata uang harus dijamin online 24 jam sehari, terutama jika ada posisi, dan tidak dapat diputuskan.

2. Slippage sebenarnya bisa mencapai 2 poin persentase. Lihatlah garis K 1 detik di atas. Jika sinyal beli Anda didasarkan pada harga tertentu, dan harga ini kebetulan keluar di bagian bawah garis K besar, maka apa pun yang terjadi, harga setelah Anda masuk. pasar mungkin tergelincir 2~3 poin persentase. Yang terburuk bisa mencapai 4 poin persentase, dan pesanan pembelian tersebut berada di ujung tanduk. Namun, jika Anda menjualnya, Anda akan mendapat untung melebihi ekspektasi Anda. Namun menurut hukum Murphy, roti yang jatuh selalu mendarat dengan sisi yang diolesi mentega. Dalam jangka panjang, ada kemungkinan besar akan terjadi lebih banyak slippage.

Namun, hal baiknya adalah hal ini hanya terjadi dalam jumlah terbatas. Selama strateginya bagus dan slippagenya lebih besar, itu hanyalah aksi ambil untung dan tidak akan mempengaruhi keuntungan positif jangka panjang. Ini seperti menanggung guncangan dan keausan lagi.

Salah satu cara untuk mengurangi hal ini adalah dengan menggunakan websocket untuk mendapatkan harga terbaru. Dokumen tersebut menyatakan bahwa pembaruan dilakukan setiap 250 milidetik, namun terkadang pembaruan sebenarnya lebih cepat, sehingga memungkinkan untuk merespons dengan segera. Keuntungan lain dari websocket adalah tidak menempati batas frekuensi Restful API bursa. Hal ini akan disebutkan secara rinci nanti.

2. Kutipan per jam

Hal ini ditemui oleh banyak strategi tren, karena kebanyakan dari mereka menggunakan harga posisi saklar untuk menghitung sinyal masuk dan keluar. Kemudian begitu satu jam berlalu, semua orang mulai satu demi satu.

Pada jam tersebut, terutama kelipatan 8, karena apa pun siklus strategi Anda, ketiga titik ini harus memenuhi waktu pembagi yang sama. Mungkin strategi otomatis semua orang akan mengambil tindakan, dan frekuensi tinggi, menengah, dan rendah akan digabungkan menjadi satu menghasilkan sinyal mereka sendiri, saingan masing-masing.

Selain itu, saat ini bursa juga membutuhkan penyelesaian dan pengiriman. Meskipun kontrak abadi tidak dikirimkan, mungkin ada operasi lain untuk menghitung biaya modal pengiriman. Selama sekitar 6 detik setelah tiga jam pada 8/0/16, soket web Binance tidak memasukkan informasi K-line, melainkan berhenti! Tanyakan saja apa yang harus Anda lakukan? Kenyataannya, seringkali tidak ada solusi.

Yang lebih serius adalah pasar akan beresonansi, terutama ketika pasar sedang jatuh, dan kepanikan akan lebih menular. Server pertukaran bahkan lebih sibuk, dan banyak koin kecil dengan kondisi pasar yang ganas segera turun. Pesanan tidak dapat dilakukan, dan semuanya merupakan kesalahan 1001. Saat Anda melakukan pemesanan dengan tergesa-gesa dan berhasil, pesanan yang diperdagangkan di ujung pin mungkin menjadi milik Anda.

Oleh karena itu, slippage benar-benar tidak dapat dihindari. Ini adalah takdir. Terima saja. Optimasi kode yang berlebihan tidak akan banyak gunanya. Seperti disebutkan sebelumnya, perlakukan saja ini sebagai satu lagi stop loss.

Namun ada juga beberapa tips yang bisa dibagikan.

Kehabisan sinyal dapat dihitung terlebih dahulu n detik sebelum jam tersebut, pada saat itu, kemacetan belum dimulai, karena sebagian besar strategi otomatis mungkin menunggu hingga harga penutupan garis K pada jam tersebut keluar sebelum mulai menghitung sinyal. Namun, masalah yang disebabkan oleh operasi ini adalah dapat menghasilkan sinyal palsu. Misalnya, harga akan segera kembali. Tidak boleh ada sinyal, dan terjadi positif palsu. Pada titik ini tergantung pada pilihan Anda apakah Anda ingin melakukan ini atau tidak. Namun, Anda dapat menambahkan ambang batas tertentu dan memicunya ketika melebihi batas tersebut, untuk mencegah sinyal palsu yang disebabkan oleh pengembalian harga jangka pendek. Slippage bisa dikurangi sedikit.

Ada juga metode yang menggunakan sinyal offset seperti offset waktu atau shift k-line, yang tidak menghasilkan sinyal pada jam tersebut, tidak mengganggu yang lain, dan lebih baik menghindari kepadatan. Ada juga metode seperti TWAP.

Namun, ini memerlukan beberapa keterampilan dan akan membuat kode sebenarnya lebih sulit.

tawaran tegas

Strategi dasar CTA frekuensi menengah hingga rendah. Secara umum, kode sebenarnya sangat sederhana. Hanya ada satu strategi untuk variasi, dan tidak ada penambahan atau pengurangan posisi, dan tidak ada informasi silang yang tercampur. Maka kode lokal tidak perlu mempertahankan status apa pun, karena pertukaran mencatat semuanya untuk Anda. Apakah ada posisinya, berapa margin yang dibutuhkan, apakah pesanan sudah selesai, dll. Karena frekuensinya sedang hingga rendah, Anda dapat memeriksa informasi akun bursa kapan saja diperlukan, dan ini adalah cara yang paling cepat dan akurat. Hal ini menghilangkan kesulitan menggunakan database lokal untuk mencatat status transaksi.

Strategi sederhana ini sebenarnya bisa dilakukan, namun masalahnya adalah retracement mungkin lebih besar, tidak cukup terdiversifikasi, dan risikonya tinggi. Sebuah produk mungkin tidak memiliki pasar, mengalami guncangan dan kemunduran tanpa berbalik arah, atau menghadapi kondisi pasar yang ekstrim, dan lubang besar lainnya akan muncul pada kurva modal. Jika Anda menganggapnya serius, Anda akan takut dan menghentikan strategi Anda jika Anda tidak bisa menanggungnya, pengalaman trading akan jauh lebih buruk. Perhatikan bahwa ini semua berada dalam kondisi posisi yang wajar. Sebaliknya, jika posisinya terlalu ringan, retracementnya akan kecil, tetapi pendapatannya juga akan berkurang, dan untung dan ruginya akan datang dari sumber yang sama, dan sayang jika peluangnya dilewatkan; terlalu berat, itu akan menjadi kesalahan, dan cepat atau lambat akan selesai.

Namun, disarankan agar pemula memulai dengan penerapan strategi ini secara real-time. Hanya melalui latihan Anda dapat dengan cepat meningkatkan level trading Anda. Namun pastikan posisi Anda tetap ringan, dan leverage harus lebih rendah. Sebaiknya jangan menggunakan leverage, sehingga Anda dapat bertahan untuk jangka waktu yang lebih lama.

Jika Anda ingin lebih profesional, kurangi risiko satu titik, kurva modal akan lebih mulus, dan kekhawatiran Anda akan berkurang ketika penawaran dibuat (seperti disebutkan sebelumnya, dalam posisi wajar, hal ini sebenarnya sangat penting, karena itu lebih mudah untuk tetap berpegang pada strategi dan menunggu sampai risikonya ) umumnya model multivariasi, multistrategi, multiparameter, dan kemudian ada penambahan dan pengurangan posisi. Ini tidak berarti menambah atau mengurangi posisi pada satu strategi, tetapi juga dapat dicapai dengan beberapa sub-strategi untuk mencapai efek penambahan atau pengurangan posisi. Namun, dalam hal ini, strateginya akan lebih ramai. Jika Anda juga ingin meminimalkan slippage pembukaan dan penutupan posisi, kompleksitas kode akan meroket.

Mari kita bahas kesulitan yang disebabkan oleh model multivariasi, multistrategi, dan multiparameter ini.

kesulitan

1. Batas frekuensi API

Kesulitan pertama dengan beberapa strategi adalah batas frekuensi API. Ada banyak variasi dan strategi untuk mendapatkan harga, posisi, pesanan, dan informasi lainnya secara real-time, Anda harus terus-menerus mengunjungi bursa. Seperti disebutkan sebelumnya, jika frekuensinya rendah dan lambat, harga yang didapat mungkin bukan yang terbaru, dan slippage mungkin jauh lebih besar.

Sumber daya server pertukaran terbatas, sehingga ada batasan pada frekuensi akses API. Batasan Binance adalah 2.400 per menit, dan kemudian ada batas 10 detik, dan ada mode pembelajaran mesin lainnya untuk mendeteksi perilaku jahat tidak berhasil, pertukaran memiliki keputusan akhir. Dalam hal ini, Anda tahu, tidak ada formula.

Meskipun dikatakan 2400, saya mengujinya dengan santai menggunakan konkurensi. Jika saya meminta K baris, meskipun itu adalah 99 baris terpendek sekaligus (bobot API adalah 1), maka jika saya meminta sekitar 75 koin sekaligus. , saya akan dilarang selama beberapa menit. Oleh karena itu, seseorang tidak dapat dengan mudah menantang batasan tersebut.

Jika Anda melanggarnya, Anda akan menerima kesalahan 429, 418, dan IP Anda akan diblokir selama beberapa menit hingga beberapa hari. Saat ini, jika Anda memiliki posisi, itu akan menyedihkan (tidak ada batasan dalam melakukan pemesanan , terutama melikuidasi posisi yang ada, tetapi Anda tidak memiliki informasi harga, kecuali ada juga websocket)

Solusi untuk masalah ini adalah dengan menggunakan websocket untuk memperoleh data, sehingga pertukaran dapat secara aktif mengirimkannya tepat waktu tanpa menggunakan API. Dapat mengurangi beberapa selip. Masalahnya adalah Anda harus mempertahankan pusat pasar lain yang berbasis websocket. Kesulitan kode langsung meningkat dan menjadi lebih rumit. Itu tidak boleh terputus selama 24 jam, dan jika terputus, itu harus disambungkan kembali secara otomatis tepat waktu, dll.

2. Status strategi

Seperti disebutkan sebelumnya, jika strategi menjadi lebih kompleks, Anda harus mencatat status setiap strategi. Jika tidak, posisi bursa tidak akan mengetahui strategi mana yang dibuka, berapa banyak strategi yang dibuka, dll. Dan jika ingin meninjaunya nanti, Anda harus mencatat lebih banyak data.

Saat ini, Anda harus memperkenalkan database (tentu saja, Anda juga dapat menggunakan catatan file, ide yang sama).

Pengenalan database membawa permasalahan pada database. Namun, hal ini serupa dengan pengembangan perangkat lunak di industri lain dan bukanlah hal baru. Khususnya di industri e-commerce, karena semuanya tentang perimbangan dana, pengelolaan pesanan dan sejenisnya, mereka yang belum memiliki pengalaman bisa membaca buku dan artikel tersebut.

Perlu dicatat bahwa banyak langkah yang diperlukan untuk mencapai operasi atom yang mirip dengan transaksi basis data, yaitu serangkaian operasi atau semuanya berhasil. Setelah langkah tertentu gagal, Anda tidak perlu melakukan apa pun dan kembali ke keadaan semula.

Kemudian, karena ini adalah transaksi uang sungguhan, untuk operasi database informasi pesanan, yang terbaik adalah menggunakan level tertinggi dari empat level isolasi, Serializable, untuk menghilangkan kemungkinan semua pembacaan kotor, pembacaan yang tidak dapat diulang, dan hantu membaca. Artinya, tidak ada penggunaan konkurensi, multi-threading, atau bahkan asinkron yang digunakan untuk membaca dan menulis informasi penting dari database. Implementasi operasi.

Jangan anggap enteng tantangan pemrograman bersamaan. Jika ada masalah dengan sistem seperti ini, mungkin tidak mungkin untuk memperbaikinya. Ini adalah bug yang paling sulit ditemukan dalam pengembangan perangkat lunak. Mereka yang bisa menyelesaikan pekerjaan semacam ini dengan rapi adalah programmer dengan gaji bulanan 50.000+.

Tidak banyak yang terpikir oleh saya yang menggunakan multi-threading atau asynchronous (multi-threading dan asynchronous, disarankan menggunakan multi-threading, karena asynchronous itu seperti penyakit menular di Python. Sekali pakai harus digunakan di rantai panggilan) Yang benar-benar bermanfaat adalah mengirimkan sinyal peringatan DingTalk dan sejenisnya. Karena layanan DingTalk ada di Tiongkok, dan server penukaran mata uang berada di luar negeri, server kode Anda harus ditempatkan di luar negeri, lebih dekat dengan bursa, jadi saat mengirim DingTalk, terkadang perlu beberapa detik untuk kembali, dan terkadang bahkan diblokir berlangsung lebih dari sepuluh detik.

akhirnya

Sebenarnya tidak masalah jika Anda tidak bisa melakukan banyak hal. Selama Anda memiliki kesadaran untuk menerima slippage yang lebih besar, Anda bisa saja mengeluarkan keuntungan hampir 1/5 atau bahkan lebih. Yang terpenting adalah strateginya. Mengharapkan return yang positif dan mampu berjalan tanpa downtime adalah kuncinya.

Singkatnya, prioritas pertama dari tawaran tegas adalah melanjutkan dan secara stabil menjalankan logika strategi yang sudah ada. Slippage itu bagian dari trading, usahakan saja dikurangi asalkan tidak mematahkan otot Anda.

Strategi kelas satu, 2 dan 3 aliran diterapkan, tidak ada masalah besar. Tetapi jika strateginya tidak sesuai standar, kode perdagangan nyata teratas tidak akan membantu, dan kerugian tetap menjadi kerugian. Oleh karena itu, hanya menulis kode yang baik tidak dapat melakukan perdagangan kuantitatif dengan baik. Strateginya bagus dan kode langsungnya kuat. Namun, ketika waktu terbatas, fokuslah pada strategi.

Bersambung