Melanjutkan dari tiga artikel sebelumnya tentang kode nyata perdagangan terprogram:
Barang kering hard-core - detail dan pemikiran tentang perdagangan real-time otomatis dari sistem perdagangan kuantitatif (1. Masalah dan kesulitan)
Sistem Perdagangan Kuantitatif - Detail dan Pemikiran Penawaran Perusahaan Otomatis (2. Tujuan Penawaran Perusahaan)
Sistem Perdagangan Kuantitatif - Detail dan Pemikiran Penawaran Nyata Otomatis (3. Keterampilan Pemrosesan)
Di sini kita akan terus berbicara tentang sistem perdagangan multi-strategi dan pusat pasar dalam keseluruhan struktur kode penawaran sebenarnya.
Kata pengantar
Dalam industri perdagangan, khususnya kontrak berjangka, beberapa master perdagangan dengan leverage tinggi akan muncul sesekali, dan pokok 100.000 yuan dapat dengan mudah berubah menjadi puluhan juta. Namun, hampir semua orang ini seperti meteor yang melesat melintasi langit malam. Setelah beberapa saat yang mempesona, mereka menghilang tanpa suara.
Dan kelompok pedagang veteran lainnya yang telah lama berbisnis bersikap patuh sepanjang hari, membicarakan masa depan yang tidak dapat diketahui, takut terhadap pasar, dan angsa hitam yang datang kapan saja membuka posisi dan mencoba melakukan kesalahan. Arahnya seperti rumput di dinding, berayun ke kiri dan ke kanan, tanpa tekad dan keberanian seorang master. Namun entah kenapa, kelompok orang ini tetap aktif di pasar. Meski leverage-nya rendah, namun posisinya tidak sedikit.
Dalam sifat manusia di dunia perdagangan, bintang mudah didapat, tetapi bintang yang berulang tahun sulit ditemukan.
Sebagai trader kuantitatif yang masih bertahan, menurut saya salah satu poin terpenting dalam trading adalah menyadari perlunya berbagai strategi. Masih sulit untuk menerapkan multi-strategi dalam perdagangan subjektif karena tenaga kerja terbatas (kecuali jika perusahaan tersebut mempekerjakan banyak pedagang seperti sebuah institusi) dan pasar beroperasi 24/7 dan mudah untuk melewatkan titik masuk. Namun, perdagangan terprogram relatif mudah diterapkan. Pemrograman kehilangan kemampuan otak dan mata manusia untuk mengidentifikasi pola tren harga, namun memiliki kemampuan eksekusi yang lebih kuat dan kemampuan yang lebih kuat untuk menyalin strategi dan membubarkan posisi, yang memiliki kelebihan dan kekurangan.
Dengan multi-target, multi-strategi, dan multi-parameter, posisi modal tersebar secara alami. Tidak ada lagi pembukaan dan penutupan keuntungan atau kerugian yang menarik, namun upaya untuk menghaluskan kurva modal sebanyak mungkin.
Ringkasan
Gambar di bawah adalah diagram arsitektur umum dari kumpulan kode asli saya.
Keseluruhan arsitektur dibagi menjadi dua bagian. Salah satunya adalah pusat pasar independen, dan yang lainnya adalah program perdagangan yang bertanggung jawab menerapkan logika strategi.
Biasanya saya memulai program dengan satu akun, dan parameter kebijakan serta kunci akunnya dibedakan berdasarkan file konfigurasi, sehingga kode dapat dibagikan sepenuhnya dan versi kode lebih mudah dikelola. Beberapa parameter strategi mungkin sedikit berbeda, terutama untuk mengatur operasi tertentu agar tidak dijalankan secara tiba-tiba pada waktu yang sama.
Ketika sebelumnya hanya ada sedikit strategi, saya memulai program Python dengan masing-masing sub-strategi, tetapi kemudian saya menemukan bahwa memori server tidak cukup. Karena program Python saja memakan sekitar 60 juta memori. Jika ada lebih banyak strategi dan disalin ke beberapa akun, maka akan dengan cepat memakan banyak memori. Meskipun Anda dapat membayar lebih untuk server yang lebih kuat, pengelolaan dan pemeliharaannya juga merepotkan. Pada akhirnya diubah menjadi seperti sekarang. Berdasarkan akun, strategi serupa pada mata uang yang berbeda (beberapa mata uang dan beberapa parameter) dikelompokkan menjadi satu grup, dan kemudian grup strategi tersebut adalah aplikasi Python. Setelah menjalankannya, saya merasa model kombinasi ini sangat bagus untuk tata letak banyak akun dan banyak strategi. Sangat nyaman untuk manajemen kode serta pengoperasian dan pemeliharaan waktu nyata.
Keuntungan dari satu sub-strategi untuk satu aplikasi Python adalah kodenya bisa lebih sederhana. Namun bayangkan saja, jika strategi Anda berjalan pada 40 koin utama teratas, dan kemudian menjalankan 3 strategi berbeda pada setiap koin, maka akan menjadi 120 sub-strategi. Jika Anda menambahkan tiga akun lagi, maka akan menjadi 360 sub-strategi. strategi. Model ini tidak akan berkelanjutan.
Ketika hanya ada sedikit aplikasi, Anda dapat menggunakan terminal seperti tmux terlebih dahulu untuk mengeluarkan informasi log secara real time, yang sangat nyaman untuk pemantauan pada tahap awal pengoperasian program. Setelah kode stabil di periode selanjutnya, perangkat lunak operasi dan pemeliharaan seperti pm2 akan digunakan untuk manajemen. Analisis saja file log secara teratur di masa mendatang.
Dalam hal terdapat banyak target dan banyak strategi, pusat pasar yang independen harus menjadi standar. Berbagai informasi pasar yang diperoleh dapat dibagi ke beberapa program perdagangan, yaitu modul strategi di sisi kiri gambar di atas.
Pusat Kutipan
Gambar dibawah ini merupakan gambaran lebih detail mengenai modul market center.
Pertama-tama, Anda dapat mengatur simbol garis k yang akan diperoleh melalui file konfigurasi, sehingga lebih mudah untuk mengubah jenisnya di kemudian hari.
Jika multi-periode, maka Anda dapat memperoleh garis k periode pembagi umum, dan kemudian setiap strategi dapat mengambil sampel ulang sesuai dengan kebutuhannya masing-masing.
Jika Anda ingin menyederhanakan segala sesuatunya untuk selamanya, maka yang terbaik adalah langsung mendapatkan garis K 15 menit, karena strategi frekuensi menengah dan rendah, terutama mengikuti tren, dengan siklus kurang dari 15 menit, pada dasarnya adalah sulit menghasilkan uang dalam jangka panjang.
Misalnya, jika Anda memiliki strategi 15 menit, 1 jam, atau 4 jam, maka pusat pasar hanya perlu mendapatkan K-line 15 menit. Jika panjang k-line dalam periode besar setelah pengambilan sampel ulang tidak cukup, maka Anda harus menyimpan lebih banyak k-line 15 menit dalam database pada waktu startup.
Karena websocket hanya mendorong informasi k-line terbaru yang diperbarui, jika strategi Anda menggunakan siklus k-line yang relatif besar dan waktu lihat balik yang lama, seperti 4 jam ma150, maka akan menjadi 600 jam (25 hari) data, 15 Jika diperlukan satu k baris per menit, diperlukan 2.400. Hal ini bergantung pada akuisisi satu kali dan penyimpanan melalui rest api saat pusat pasar dimulai, sebagai dasar untuk pembaruan berkelanjutan berikutnya.
Saya membagi seluruh pusat pasar menjadi dua aplikasi. Sebenarnya bisa juga digabungkan menjadi satu aplikasi, namun lebih kuat jika dipisahkan. Mari kita bicara tentang Rencana B sekunder terlebih dahulu.
Rencana B
Seperti disebutkan dalam beberapa artikel sebelumnya, hal ini terutama untuk mencegah terputusnya websocket PlanA. Ini digunakan sebagai cadangan sementara, terutama pada saat keluar dari strategi, untuk menghindari harga telah berbalik pada jarak tertentu dan keluar. posisi belum keluar. Menyebabkan lebih banyak kerugian tak terduga.
PlanB sangat sederhana. PlanB terutama menggunakan fungsi public_get_ticker_price untuk mendapatkan harga terbaru dari semua kontrak abadi sekaligus. Ini juga merupakan informasi harga terbaru yang dihimpun oleh B An sendiri.
Saat ini, B'an memiliki lebih dari 200 kontrak abadi. Jika kita mendapatkan harga terbaru satu per satu, kita harus memastikan bahwa harga setiap produk diperbarui setiap 3 detik. API akan dipanggil lebih dari 4.000 kali dalam satu menit. yang harus melebihi batas. Tidak mungkin. Namun bobot api dari fungsi yang disebutkan tadi hanya 2. Jika digunakan setiap 3 detik sekali, hanya akan menghabiskan 40 kuota api per menit.
Setelah pengujian saya, pada dasarnya Binance mengagregasi harga semua kontrak satu kali dalam waktu sekitar 1 hingga 2 detik, jadi untuk harga cadangan strategi frekuensi menengah dan rendah, penundaan sekitar 5 detik sudah cukup.
Jika persyaratan Anda tidak tinggi, Anda bahkan dapat menggunakannya untuk mensintesis garis K kasar untuk semua kontrak, sepenuhnya menghindari penggunaan websocket. Meskipun K-line semacam ini tidak dapat digunakan untuk perdagangan, namun juga dapat digunakan untuk memindai seluruh informasi pasar, dan kemudian memberikan titik masuk bagi pedagang subjektif berdasarkan algoritma strategi yang mereka rancang sendiri, seperti divergensi dan konvergensi rata-rata bergerak. pengenalan pola sederhana, dll. Sinyal. Kalau tidak, bagaimana Anda bisa melihat begitu banyak koin? Jika Anda memiliki day trader yang baik, alat ini mungkin berguna untuk membantu dalam trading. Saya telah menulis alat serupa untuk orang lain sebelumnya. Sangat bagus ketika pasar sedang bagus, tetapi pasar belum bagus akhir-akhir ini.
Tentu saja, solusi ini hanya berguna secara praktis saat memperdagangkan banyak koin. Jika tidak, sebaiknya langsung dapatkan harga BBO handicap masing-masing varietas.
Perhatikan juga bahwa informasi harga cadangan harus sering digunakan dalam kode utama, misalnya digunakan untuk menghitung jumlah dana fiat yang sesuai dengan posisi dan perkiraan tingkat keuntungan dan kerugian, yang tidak memerlukan data yang sangat tepat. Karena cuplikan kode dan informasi yang jarang digunakan mungkin sudah lama rusak dan Anda bahkan mungkin tidak menyadarinya hingga digunakan. Siapa pun yang telah menulis banyak kode tahu bahwa kode lampiran semacam ini dapat dengan mudah diubah secara tidak sengaja tanpa disadari.
Rencana A
Kode utama pusat pasar. Aplikasi ini memiliki 4 fungsi utama.
Dapatkan kandil dasar historis. Seperti disebutkan sebelumnya dalam artikel, setiap kali Anda memulai, Anda harus memastikan bahwa setiap garis K yang dibutuhkan oleh semua strategi ada.
manajemen soket web. Modul ini sedikit lebih rumit dan perlu menangani berbagai situasi pemutusan sambungan, penyambungan kembali, dll. Setiap kali bursa mendorong data k-line baru, data bilah k-line terbaru dalam database diperbarui.
Selain data K-line, saya juga memasang update informasi keakuratan masing-masing variasi di pusat pasar. Artinya, fungsi public_get_exchangeinfo memperoleh berbagai harga pesanan dan presisi minimum jumlah pesanan, lalu mengubahnya menjadi tipe kamus yang mudah digunakan. Dengan cara ini semua strategi dapat dibagikan.
Langkah terakhir adalah pengecekan, pengecekan kewarasan sederhana saja sudah cukup. Periksa apakah K-line yang diperoleh kontinu dan tidak ada kelalaian, lalu bandingkan secara berkala satu per satu dengan K-line yang diperoleh rest api, apakah selisih harga dengan harga yang diperoleh PlanB terlalu besar, dll. Singkatnya, ini hanya soal perbandingan dan pemeriksaan agar kesalahan bisa diketahui lebih awal.
Ini mungkin adalah struktur inti dari pasar strategi frekuensi menengah hingga rendah saya. Jika diperlukan, informasi update akun juga dapat diperoleh melalui websocket. Namun ini sedikit lebih merepotkan dan tidak akan sering digunakan.