Kata pengantar
Mengapa mempelajari kursus ini?
Apa yang Anda peroleh dari mempelajari kursus ini? Pertama-tama, kursus ini berbasis pada bahasa pemrograman JavaScript dan Python. Bahasa hanyalah sebuah teknologi, dan pada akhirnya kita masih harus menerapkan teknologi ini ke dalam sebuah industri. Perdagangan kuantitatif adalah industri yang sedang berkembang pesat saat ini dan membutuhkan banyak tenaga berbakat.
Melalui studi sistematis kursus ini, Anda dapat memiliki pemahaman yang lebih dalam tentang bidang perdagangan kuantitatif. Jika Anda seorang mahasiswa yang sedang mempersiapkan diri untuk memasuki bidang perdagangan kuantitatif, ini juga akan membantu Anda. Jika Anda seorang investor saham atau penggemar investasi berjangka, maka Perdagangan kuantitatif dapat sepenuhnya membantu perdagangan subjektif Anda. Dengan mengembangkan strategi perdagangan, Anda dapat memperoleh laba di pasar keuangan dan memperluas saluran serta platform investasi dan manajemen keuangan Anda.
Sebelumnya, izinkan saya bercerita tentang pengalaman trading pribadi saya. Saya bukan mahasiswa jurusan keuangan, tetapi jurusan statistik. Ia mulai terlibat dalam perdagangan saham subjektif saat masih menjadi mahasiswa. Kemudian, secara kebetulan, ia menjadi praktisi perdagangan kuantitatif dari sebuah dana ekuitas swasta domestik, yang terutama bergerak dalam penelitian dan pengembangan strategi.
Saya telah berkecimpung di dunia perdagangan selama lebih dari sepuluh tahun dan telah mengembangkan berbagai jenis strategi. Filosofi investasi saya adalah: pengendalian risiko di atas segalanya, fokus pada pengembalian absolut. Judul kursus kami adalah: Dari perdagangan kuantitatif hingga manajemen aset – pengembangan strategi CTA untuk pengembalian absolut.
1. Logika menghasilkan uang dengan strategi CTA berjangka
1.1 Memahami CTA Berjangka
Beberapa orang mungkin bertanya apa itu CTA? Apa sebenarnya CTA itu? CTA disebut penasihat perdagangan komoditas di luar negeri dan biasanya disebut manajer investasi di dalam negeri. CTA tradisional mengumpulkan dana dari sejumlah besar investor, lalu mempercayakannya kepada lembaga investasi profesional, dan akhirnya berinvestasi dalam indeks saham berjangka, komoditi berjangka, dan obligasi pemerintah berjangka melalui penasihat perdagangan (yaitu, CTA).
Namun pada kenyataannya, seiring pasar berjangka global terus tumbuh dan berkembang, konsep CTA juga terus berkembang, dan cakupannya jauh melampaui berjangka tradisional. Tidak hanya dapat berinvestasi di pasar berjangka, tetapi juga berinvestasi di pasar suku bunga, pasar saham, pasar valuta asing, pasar opsi, dll. Selama produk ini memiliki sejumlah data historis, strategi CTA yang sesuai dapat dikembangkan berdasarkan data historis ini.
Sebelum tahun 1980-an, teknologi perdagangan elektronik belum terlalu matang. Saat itu, sebagian besar pedagang menilai tren masa depan komoditas berjangka dengan menggambar indikator teknis secara manual seperti indikator Williams, KDJ, RSI, MACD, CCI, dll. Kemudian, beberapa pedagang menyiapkan dana CTA khusus untuk membantu klien mengelola aset. Baru pada saat perdagangan elektronik dipopulerkan pada tahun 1980-an, dana CTA dalam arti sebenarnya mulai muncul.
Perubahan Skala Pengelolaan Dana CTA

Satuan: Miliaran dolar AS
Jika kita melihat grafik di atas, terutama dengan meningkatnya perdagangan kuantitatif, ukuran dana CTA global telah meningkat dari US$130,6 miliar pada tahun 2005 menjadi lebih dari US$300 miliar pada tahun 2015. Selain itu, strategi CTA juga telah menjadi salah satu strategi investasi umum para hedge fund global.
Kinerja dana CTA juga meningkat seiring dengan skalanya. Mari kita lihat Indeks Barlake CTA pada gambar di bawah ini. Indeks Barlake CTA merupakan tolok ukur industri yang representatif bagi penasihat perdagangan komoditas global. Dari akhir tahun 1979 hingga akhir tahun 2016, pengembalian kumulatif Indeks Dana Barlake CTA mencapai 28,95 kali, dengan pengembalian tahunan sebesar 9,59%, rasio Sharpe sebesar 0,37, dan penarikan maksimum sebesar 15,66%.
Karena dalam portofolio alokasi aset, strategi CTA biasanya mempertahankan korelasi yang sangat rendah dengan strategi lain. Seperti yang ditunjukkan dalam lingkaran merah pada gambar di bawah ini, selama pasar saham global yang sedang lesu dari tahun 2000 hingga 2002 dan krisis hipotek subprime global pada tahun 2008, Indeks Barlake CTA Fund tidak hanya tidak turun tetapi juga mencapai pengembalian positif. Ketika krisis terjadi di pasar saham dan obligasi, CTA dapat memberikan pendapatan yang kuat. Selain itu, kita juga dapat melihat bahwa tingkat keuntungan Indeks Barclays Commodity CTA sejak tahun 1980 selalu lebih tinggi daripada S&P 500, dan penurunannya juga jauh lebih rendah daripada S&P 500.
Perkembangan CTA di negara saya baru dalam satu dekade terakhir, namun momentumnya sangat kuat. Hal ini sebagian besar disebabkan oleh lingkungan perdagangan berjangka komoditas domestik yang relatif terbuka, ambang batas modal perdagangan yang rendah, sistem margin yang memungkinkan dua posisi beli dan dua posisi jual. - perdagangan satu arah, dan biaya transaksi yang rendah. , arsitektur teknis bursa lebih maju daripada saham dan lebih mudah diperdagangkan dalam sistem, dll.
Sejak tahun 2010, dana CTA sebagian besar berbentuk dana ekuitas swasta. Seiring dengan kebijakan domestik yang secara bertahap membuka ruang lingkup investasi rekening khusus dana, dana CTA mulai hadir dalam bentuk rekening khusus dana. Metode operasinya yang lebih transparan dan terbuka juga telah menjadi alat yang diperlukan untuk alokasi aset bagi lebih banyak investor.
Seperti terlihat pada gambar di atas, baik dari segi kesulitan memulai, ambang modal, metode pelaksanaan strategi perdagangan, dan docking API, strategi CTA juga lebih cocok untuk pedagang individu dibandingkan strategi perdagangan lainnya. Kontrak berjangka domestik sangat kecil. Misalnya, satu lot jagung atau bungkil kedelai dapat diperdagangkan dengan harga beberapa ribu yuan, hampir tanpa ambang batas modal. Selain itu, karena beberapa strategi CTA berasal dari analisis teknis tradisional, relatif mudah dibandingkan ke strategi lainnya. .
Proses perancangan strategi CTA juga relatif sederhana. Pertama, data historis diproses terlebih dahulu dan kemudian dimasukkan ke dalam model kuantitatif. Model kuantitatif mencakup strategi perdagangan yang dibentuk oleh pemodelan matematika, desain pemrograman, dan alat lainnya, dan menghasilkan sinyal perdagangan dengan menghitung dan menganalisis data ini. Tentu saja, dalam pengembangan sebenarnya, hal ini tidak sesederhana yang ditunjukkan pada gambar di atas. Ini hanya untuk memberikan gambaran umum kepada semua orang.
1.2 Jenis Strategi CTA Berjangka
Dari perspektif strategi perdagangan, strategi CTA juga beragam: bisa berupa strategi tren atau strategi arbitrase; bisa berupa strategi jangka menengah dan panjang dalam siklus besar atau strategi jangka pendek dalam sehari; logika strategi dapat didasarkan pada analisis teknis atau fundamental. Analisis permukaan; bisa berupa perdagangan subjektif atau perdagangan sistematis.
Terdapat berbagai metode klasifikasi untuk strategi CTA. Berdasarkan metode perdagangan, strategi ini dapat dibagi menjadi: perdagangan subjektif dan perdagangan sistematis. Pengembangan strategi CTA di luar negeri relatif maju, dan strategi CTA perdagangan sistematis telah mencapai hampir 100%. Menurut metode analisisnya, dapat dibagi menjadi: analisis fundamental dan analisis teknis. Menurut sumber pendapatannya, dapat dibagi menjadi: perdagangan tren dan perdagangan ayunan.
Secara umum, di seluruh pasar perdagangan, strategi tren mencakup sekitar 70% strategi CTA, strategi pembalikan rata-rata mencakup sekitar 25%, dan strategi kontra-tren atau pembalikan tren mencakup sekitar 5%. Di antara semuanya, strategi tren, yang mencakup proporsi terbesar, dapat dibagi menjadi: perdagangan frekuensi tinggi, perdagangan intraday, perdagangan jangka menengah-pendek, dan perdagangan jangka menengah-panjang sesuai dengan periode kepemilikan.
Strategi pembuatan pasar frekuensi tinggi
Saat ini ada dua strategi perdagangan frekuensi tinggi yang umum di pasaran, satu adalah strategi pembuatan pasar frekuensi tinggi, dan yang lainnya adalah strategi arbitrase frekuensi tinggi. Strategi pembuatan pasar adalah menyediakan likuiditas di pasar perdagangan. Artinya, di pasar perdagangan dengan pembuat pasar, jika seseorang ingin membeli atau menjual, pembuat pasar harus memastikan bahwa pesanannya dapat dieksekusi. Jika likuiditas di pasar tidak mencukupi dan pesanan tidak dapat dieksekusi, pembuat pasar harus membeli dan menjual rekanan orang lain.
Strategi arbitrase frekuensi tinggi
Arbitrase frekuensi tinggi adalah perdagangan dua saham atau ETF yang sangat berkorelasi dan kombinasi ETF. Berdasarkan metode perhitungan ETF, metode yang sama dapat digunakan untuk menghitung harga yang diharapkan dari suatu ETF. Harga indeks ETF dapat dikurangi dari harga ETF yang diharapkan untuk memperoleh selisih harga. Biasanya, selisih harga ini akan beroperasi dalam saluran harga. Jika selisih harga menembus saluran atas dan bawah, Anda dapat memperdagangkan selisih harga ini dan menunggu agar selisih harganya dapat dikembalikan untuk memperoleh laba.
Strategi intraday
Jika kita mengikuti makna harfiahnya, selama posisi tersebut tidak ditahan semalaman, maka itu dapat disebut strategi perdagangan harian. Karena periode holding pada perdagangan intraday relatif pendek, biasanya setelah memasuki pasar, seseorang tidak dapat langsung mendapat keuntungan dan akan segera keluar pasar. Oleh karena itu, metode perdagangan ini memiliki risiko pasar yang lebih rendah. Namun, karena pasar berubah dengan cepat dalam waktu singkat, strategi intraday biasanya memiliki persyaratan lebih tinggi bagi para pedagang.
Strategi jangka menengah dan panjang
Secara teori, semakin lama periode kepemilikan, semakin besar kapasitas strategi dan semakin rendah rasio risiko-imbal hasil. Khususnya dalam transaksi institusional, karena kapasitas strategi jangka pendek terbatas dan dana besar tidak dapat masuk dan keluar pasar dalam waktu singkat, maka akan dialokasikan lebih banyak strategi jangka menengah dan panjang. Biasanya masa penahanan berlangsung beberapa hari, bulan, atau bahkan lebih lama.
Data Strategi CTA
Secara umum, strategi CTA menggunakan data menit, jam, dan harian sebagai objek penelitian, termasuk harga pembukaan, harga tertinggi, harga terendah, harga penutupan, volume perdagangan, dll. Hanya sejumlah kecil strategi CTA yang menggunakan data tick. Misalnya, data mendalam seperti harga beli, harga jual, volume pembelian, volume penjualan, dll. dalam data L2.
Ketika membahas ide dasar strategi CTA, hal pertama yang kita pikirkan adalah indikator teknis tradisional, karena ada lebih banyak materi referensi publik dalam hal ini, logikanya biasanya lebih sederhana, dan sebagian besar didasarkan pada prinsip statistik. Misalnya, berbagai indikator teknis yang sudah dikenal semua orang: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, dan seterusnya.
Ada juga beberapa model perdagangan klasik di pasaran yang dapat digunakan sebagai referensi dan ditingkatkan, termasuk: kombinasi multi-moving average, DualThrust, R-Breaker, Metode Perdagangan Turtle, Metode Perdagangan Grid, dll.
Semua hal di atas adalah strategi perdagangan yang didasarkan pada analisis teknis tradisional. Prosesnya adalah mengekstrak faktor atau kondisi jual beli dengan keuntungan probabilistik berdasarkan data historis dan konsep perdagangan yang benar, dan berasumsi bahwa pasar akan tetap memiliki pola ini di masa mendatang. Terakhir, gunakan kode Terapkan strategi perdagangan dan otomatisasi sepenuhnya perdagangan Anda. Membuka posisi, mengambil untung, menghentikan kerugian, menambah posisi, mengurangi posisi, dan sebagainya, umumnya tidak memerlukan campur tangan manusia. Sebenarnya, ini adalah strategi membeli saat mahal dan menjual saat murah dengan memanfaatkan koefisien autokorelasi positif dari deret waktu harga.
Keuntungan terbesar dari strategi CTA adalah dapat memperoleh pengembalian absolut terlepas dari apakah pasar saat ini sedang naik atau turun, terutama ketika pasar berubah dengan cepat antara pasar bull dan bear, atau ketika tren pasar jelas-jelas mulus. Keuntungan dari Strategi ini sangat besar. Singkatnya, ada tren. Ada keuntungan. Akan tetapi, jika pasar sedang bergejolak atau trennya tidak jelas, strategi ini dapat mengakibatkan pembelian pada harga tinggi dan penjualan pada harga rendah, sambil terus bergerak maju mundur untuk menghentikan kerugian.
1.3 Prinsip Keuntungan Strategi CTA Berjangka
Alasan mengapa strategi CTA berjangka dapat menghasilkan uang terutama disebabkan oleh alasan-alasan berikut:
- Pergerakan harga bersifat refleksif dan selalu berlanjut dalam bentuk tren. Ketika investor mengamati harga naik, mereka membeli, yang menyebabkan harga naik lebih lanjut. Hal yang sama berlaku untuk penurunan harga. Karena investor berperilaku lebih tidak rasional, terkadang kita melihat harga naik ke tingkat abnormal saat naik, dan turun ke tingkat abnormal saat turun.
- Setiap investor memiliki toleransi asimetris terhadap rasio laba rugi, dan memiliki toleransi risiko yang berbeda-beda. Bagi sebagian besar investor ritel, mereka lebih suka memilih metode perdagangan mengikuti tren yang lebih konservatif, dan pasar lebih cenderung bergerak mengikuti tren.
- Pembentukan harga ditentukan oleh transaksi, dan transaksi digerakkan oleh manusia. Namun, sifat manusia sulit diubah, itulah sebabnya pola tetap muncul berulang kali. Strategi ini efektif jika diuji ulang pada data historis. Ini menunjukkan bahwa strategi ini mungkin efektif. di masa mendatang.
Karakteristik lain dari trading mengikuti tren adalah Anda kehilangan sejumlah kecil uang ketika tidak ada pasar, dan menghasilkan banyak uang ketika pasar datang. Namun, setiap orang yang telah melakukan trading tahu bahwa pasar berada dalam kondisi yang tidak stabil. dari waktu ke waktu, dan hanya dalam waktu yang singkat hal itu menjadi tren. Kutipan. Oleh karena itu, strategi mengikuti tren memiliki persentase kemenangan yang lebih rendah saat berdagang, tetapi secara keseluruhan keuntungan dan kerugian dari setiap transaksi relatif besar.
Karena strategi mengikuti tren memiliki hasil yang tidak stabil, banyak lembaga investasi akan membangun portofolio investasi menggunakan berbagai variasi dan berbagai strategi, yang juga akan mencakup sejumlah strategi pembalikan. Strategi pembalikan adalah bahwa deret waktu harga memiliki koefisien autokorelasi negatif, yang berarti menjual tinggi dan membeli rendah.
Korelasi antara CTA dan aset tradisional

Jika kita perhatikan grafik di atas, secara teori, ketika menghadapi berbagai perubahan harga pasar pada saat yang bersamaan, beberapa strategi dengan gaya yang berbeda atau korelasi yang rendah akan menghasilkan sinyal perdagangan yang terkadang sama dan terkadang berbeda. Karena beberapa kurva imbal hasil saling tumpang tindih, keseluruhan imbal hasil saling melengkapi, dan kurva imbal hasil menjadi lebih datar, sehingga mengurangi volatilitas imbal hasil.
Dari sudut pandang di atas, dapat disimpulkan bahwa daripada mengembangkan strategi tingkat master, lebih baik mengembangkan beberapa sub-strategi yang biasa-biasa saja. Jadi, bagaimana cara mengendalikan strategi-strategi ini? Di sini kita dapat merujuk pada algoritma random forest dalam machine learning. Random forest bukanlah algoritma yang berdiri sendiri, melainkan kerangka kerja pengambilan keputusan yang mencakup beberapa pohon keputusan. Ini setara dengan strategi induk di atas sub-strategi pohon keputusan. Mengatur dan mengendalikan kelompok kebijakan anak melalui kebijakan induk.
Selanjutnya, kita perlu merancang strategi induk. Kita dapat mengevaluasi likuiditas, profitabilitas, dan stabilitas berbagai komoditas di seluruh pasar berjangka komoditas, menyaring portofolio berjangka komoditas dengan volatilitas rendah, dan kemudian melakukan netralitas industri. Melalui pemilihan yang beragam dari industri, volatilitas keseluruhan dapat dikurangi lebih lanjut. Terakhir, portofolio multivariasi komoditas berjangka yang sebenarnya dibangun melalui pencocokan nilai pasar untuk perdagangan.
Setiap produk juga dapat dikonfigurasikan dengan beberapa strategi parameter. Anda dapat memilih kombinasi parameter yang memiliki kinerja backtest yang baik. Ketika tren pasar terlihat jelas, beberapa strategi parameter biasanya bekerja secara konsisten, yang setara dengan menambahkan posisi. Ketika pasar dalam pasar yang bergejolak, beberapa strategi parameter dapat digunakan untuk meningkatkan kinerja. Strategi sering kali berperilaku tidak konsisten, sehingga masing-masing mengambil posisi beli atau jual untuk melindungi risiko, yang setara dengan mengurangi posisi. Hal ini selanjutnya dapat mengurangi tingkat pengembalian maksimum portofolio sambil menjaga tingkat pengembalian keseluruhan tidak berubah.
2. Kasus Strategi CTA Berjangka Klasik
Newton pernah berkata: Jika saya dapat melihat lebih jauh daripada orang lain, itu karena saya berdiri di atas bahu para raksasa.
Strategi CTA yang tersedia secara umum di pasar meliputi strategi rata-rata bergerak, strategi Bollinger Band, Metode Perdagangan Turtle, strategi momentum, strategi arbitrase, dll. Semua strategi perdagangan kuantitatif memiliki satu karakteristik, yaitu strategi tersebut akan mati di hadapan publik. Begitu strategi tersebut dipublikasikan, strategi tersebut secara bertahap akan menjadi tidak efektif. Tetapi hal itu tidak mempengaruhi pembelajaran kita tentang strategi-strategi tersebut dan mengambil intisarinya, sehingga kita dapat melihat masalah dari sudut pandang berdiri di atas bahu para raksasa.
2.1 Analisis fundamental berjangka (persediaan, basis, harga)
Analisis fundamental tidak perlu mengkhawatirkan tren harga jangka pendek. Analisis ini meyakini bahwa nilai pada akhirnya akan tercermin dalam harga. Analisis ini lebih tentang menganalisis faktor-faktor di balik harga dan menilai seberapa besar nilai varietas ini. Pada umumnya, metode analisis yang dipakai adalah top-down: dari faktor makro, faktor varietas, dan faktor lainnya.
Jika kita perhatikan gambar di atas, ada banyak faktor yang memengaruhi harga komoditas, jumlahnya mencapai puluhan item. Jika dipecah lebih lanjut, jumlahnya masih puluhan lagi, dan data ini terus berubah. Merupakan hal yang di luar kemampuan investor ritel individu untuk memperoleh data dalam jumlah besar, apalagi melakukan analisis objektif.
Faktanya, analisis fundamental komoditas berjangka tidak berarti menganalisis semua faktor. Kita hanya perlu memahami elemen inti analisis fundamental untuk menemukan pola dari informasi yang kompleks.
Faktor Makro
Data ekonomi makro bersifat kompleks dan dapat berubah-ubah. Setiap hari dan setiap saat, banyak data ekonomi yang dirilis oleh politisi, bank sentral, dan bank investasi di berbagai negara, baik resmi maupun tidak resmi. Selain krisis politik dan ekonomi, analisis makro merupakan bahan pembicaraan yang baik tetapi kurang praktis. Peter Lynch, pakar manajemen dana ternama asal Amerika, pernah mengutarakan pendapatnya: "Saya menghabiskan tidak lebih dari lima belas menit setiap tahun untuk menganalisis tren ekonomi."
Faktor Variasi
Dalam analisis fundamental, analisis produk terutama menganalisis premi dan diskon, hubungan penawaran dan permintaan, inventaris komoditas, laba industri, dll. Dapat dikatakan bahwa menguasai analisis faktor produk berjangka komoditas pada dasarnya dapat menentukan sebagian besar tren pasar.
Teman-teman yang pernah melakukan perdagangan berjangka tahu bahwa komoditas berjangka dalam negeri secara sederhana dapat dibagi menjadi: produk industri dan produk pertanian. Metode analisis untuk produk industri dan produk pertanian berbeda. Kami akan menjelaskan dari dua aspek penawaran dan permintaan. Untuk produk industri, pasokan relatif stabil. Kecuali jika ada terobosan teknologi besar, tidak mungkin kapasitas produksi akan peningkatan dalam jangka pendek. Terjadi perubahan besar dari waktu ke waktu, sehingga faktor yang memengaruhi harga produk industri terutama adalah permintaan. Permintaan produk pertanian relatif stabil. Dalam jangka panjang, permintaan produk pertanian mengalami perubahan, namun dalam jangka pendek, permintaan produk pertanian cenderung stabil. Oleh karena itu, faktor yang mempengaruhi harga produk pertanian terutama pasokan.
Oleh karena itu, menurut hukum ekonomi, hubungan penawaran dan permintaanlah yang pada akhirnya menentukan harga suatu komoditas. Secara teori, selama kita dapat memperoleh data penawaran dan permintaan, kita dapat menilai harga komoditas di masa mendatang. Untuk produk industri, data pasokan relatif mudah diperoleh, tetapi data permintaan sulit diperoleh. Untuk produk pertanian, data permintaan relatif mudah diperoleh, tetapi data pasokan sulit diperoleh.
Bahkan, kita dapat melangkah lebih jauh dan melakukan pengurangan. Hasil timbal balik dari penawaran dan permintaan di pasar ekonomi adalah persediaan. Kita dapat menggunakan data persediaan untuk menilai kekuatan hubungan antara penawaran dan permintaan pasar. Apabila persediaan suatu komoditi sangat banyak, berarti kekuatan penawaran pasar lebih besar daripada permintaan, dan harga komoditi tersebut akan turun apabila kondisi eksternal tetap tidak berubah. Apabila persediaan suatu komoditi sangat rendah, berarti kekuatan permintaan pasar lebih besar daripada penawaran, dan harga komoditi tersebut akan segera naik apabila kondisi eksternal tetap tidak berubah.
Selain menganalisis persediaan komoditas, perlu juga menganalisis perbedaan harga antara pasar spot dan pasar berjangka, yang disebut basis. Jika harga berjangka lebih besar daripada harga spot, kita menyebutnya premium; jika harga berjangka lebih kecil daripada harga spot, kita menyebutnya diskonto. Menurut sistem pengiriman berjangka, pada tanggal pengiriman berjangka, harga berjangka harus sama dengan harga spot.
Terlepas dari apakah itu premium atau diskon, karena kendala sistem pengiriman berjangka, secara teori harga berjangka pada tanggal pengiriman harus sama dengan harga spot. Saat tanggal pengiriman mendekat, harga spot dan harga berjangka akan cenderung konsisten, salah satunya adalah pengembalian berjangka terhadap spot, yang lainnya adalah pengembalian spot terhadap berjangka.
Berdasarkan prinsip-prinsip di atas, kita dapat menggunakan inventaris dan basis untuk secara bersamaan menentukan harga berjangka di masa mendatang. Jika persediaan suatu komoditas rendah, dan harga berjangka jauh lebih rendah daripada harga spot, maka kita dapat menyimpulkan bahwa permintaan di pasar spot lebih besar daripada penawaran, dan kemungkinan kenaikan harga spot di masa mendatang tinggi. Saat tanggal pengiriman mendekat, harga berjangka akan naik untuk menyamai harga spot, dan kemungkinan kenaikan harga berjangka di masa mendatang lebih besar.
Akhirnya, kami telah menentukan arah harga masa depan yang paling mungkin melalui inventaris dan basis, tetapi tidak ada titik beli dan jual yang lebih tepat, sehingga analisis teknis diperlukan untuk memberikan sinyal masuk dan keluar yang jelas. Seluruh kerangka analisis fundamental adalah: inventaris rendah + diskon besar + sinyal bullish analisis teknis = panjang; inventaris tinggi + premium besar + sinyal bearish analisis teknis = pendek.
2.2 Aturan Perdagangan Kura-kura
Bila berbicara tentang strategi perdagangan, kita harus membicarakan tentang Aturan Perdagangan Turtle yang representatif. Turtle Trading Rules berasal dari salah satu eksperimen paling terkenal dalam sejarah perdagangan, ketika spekulator komoditi Richard Dennis ingin mengetahui apakah pedagang hebat dilahirkan atau dibuat. Untuk tujuan ini, pada tahun 1983 ia merekrut 13 orang dan mengajarkan mereka konsep dasar perdagangan berjangka, serta metode dan prinsip perdagangannya sendiri. Para siswa ini disebut "penyu laut".
Selama empat tahun berikutnya, Turtles memperoleh laba gabungan tahunan rata-rata sebesar 80%. Dennis juga menunjukkan bahwa dengan menggunakan sistem dan aturan yang sederhana, orang-orang dengan sedikit atau tanpa pengalaman perdagangan dapat menjadi pedagang yang hebat. Namun, beberapa Turtle menjual Aturan Perdagangan Turtle di situs web untuk mendapatkan keuntungan. Untuk menghentikan perilaku ini, dua Turtle asli, Curtis Faith dan Arthur Maddock, memutuskan untuk membuat Aturan Perdagangan Turtle tersedia untuk umum secara gratis di sebuah situs web.
Setelah kebenaran terungkap, orang-orang menemukan bahwa Turtle Trading Rules mengadopsi Donchian Channel yang dioptimalkan dan menggunakan indikator ATR untuk manajemen posisi. Setelah puluhan tahun pengujian historis, ini telah menjadi metode perdagangan yang dapat digunakan oleh investor ritel biasa untuk menghasilkan uang dengan mudah, dan masih efektif untuk produk tertentu.
Prinsip Inti Penyu
- Dapatkan keunggulan: Temukan strategi perdagangan yang memiliki nilai yang diharapkan positif karena akan menghasilkan keuntungan positif dalam jangka panjang.
- Kelola risiko: Kendalikan risiko dan pertahankan pendirian Anda, jika tidak, Anda mungkin tidak akan mampu melihat hari ketika Anda menciptakan hasil.
- Komitmen yang teguh: Hanya dengan menerapkan strategi Anda dengan teguh, Anda dapat benar-benar mencapai hasil yang sistematis.
- Kesederhanaan dan kejelasan: Dalam jangka panjang, sistem yang sederhana lebih layak daripada sistem yang rumit.
Jadi selanjutnya, mari kita lihat apa sebenarnya isi Turtle Trading Rules?
- Pasar - apa yang akan dibeli dan dijual, pada dasarnya, di pasar mana untuk berdagang. Turtles adalah pedagang berjangka, dan mereka hanya memilih pasar dengan volume perdagangan besar dan likuiditas tinggi, karena memilih pasar dengan volume perdagangan rendah akan meningkatkan risiko kerugian. uang. Selisih tambahan saat keluar dari pasar juga akan menyebabkan Anda kehilangan banyak peluang tren.
- Ukuran posisi - Berapa banyak yang akan dibeli atau dijual merupakan bagian yang sangat penting dari keseluruhan strategi, tetapi kebanyakan orang biasanya mengabaikan atau memperlakukannya dengan tidak benar. Aturan Perdagangan Turtle menggunakan ATR, atau indikator Average True Range, untuk menghitung posisi pembukaan, menambahkan sinyal, dan sinyal stop-loss. Ini adalah desain yang sangat pintar, yang dimaksudkan untuk menyesuaikan ukuran posisi sesuai dengan volatilitas absolut pasar. Ketika volatilitas pasar kuat, ukuran posisi dikurangi, dan ketika volatilitas pasar lemah, ukuran posisi ditingkatkan. . Pertama-tama mendefinisikan suatu unit, rumus unit tersebut adalah: (total aset*1%)/ATR. Posisi awal adalah 1 unit. Bahkan jika penurunan produk pada hari itu mencapai level ATR, kerugian pada hari itu dapat dikendalikan dalam 1% dari total aset. Jika harga naik 0,5 unit, posisi panjang akan ditingkatkan 1 unit, hingga maksimum 4 unit.
- Memasuki pasar - Masuknya Turtle ke pasar memanfaatkan Donchian Channel. Ketika harga naik di atas harga tertinggi dari 20 atau 55 garis K sebelumnya, ia memasuki pasar untuk melakukan long. Ketika harga turun di bawah harga terendah dari 20 atau 55 K-line sebelumnya, ia memasuki pasar untuk melakukan posisi long. , cukup masuk pasar dan short. Masuki pasar saat sinyal muncul, tanpa menunggu penutupan atau garis K berikutnya.
- Stop loss - Dalam jangka panjang, transaksi tanpa stop loss tidak akan berhasil, tetapi sebagian besar trader bertahan pada posisi yang merugi dengan harapan pasar akan berbalik arah. Turtles memiliki aturan ketat tentang kapan harus keluar dari posisi yang merugi. Jika posisi long ditahan dan harga turun 2 unit, posisi long akan ditutup dengan stop loss. Jika Anda memegang posisi short dan harga naik 2 unit, posisi short akan ditutup dengan stop loss.
- Take profit - Take profit Turtle berarti kehilangan banyak keuntungan mengambang, yang juga merupakan bagian yang sulit diterima oleh banyak trader. Jika Anda saat ini memegang posisi long dan harga turun di bawah jalur bawah Donchian Channel 10 hari, tutup semua posisi long; jika Anda saat ini memegang posisi short dan harga naik di atas jalur atas Donchian Channel 10 hari, tutup semua posisi long. Saluran Donchian, tutup semua posisi pendek.
Dari sini kita dapat melihat bahwa meskipun Turtle Trading Rules terlihat sederhana, pada kenyataannya, Turtle Trading Rules telah membentuk prototipe sistem perdagangan yang sebenarnya. Turtle Trading Rules mencakup semua aspek sistem perdagangan yang lengkap dan tidak memberikan ruang bagi para pedagang. Ada ruang untuk imajinasi subjektif. dan pengambilan keputusan, yang memungkinkan untuk menonjolkan keuntungan dari operasi sistem yang terprogram. Termasuk: aturan masuk dan keluar, pengelolaan dana dan pengendalian risiko, dll.
Keuntungan terbesar dari Metode Turtle Trading adalah membantu kita membangun metode trading yang efektif. Ini adalah strategi yang menggabungkan pembukaan batch, stop-profit dan stop-loss yang dinamis, dan mengikuti tren pasar, terutama penggunaan nilai ATR dan posisi. manajemen. Konsep ini layak dipelajari. Tentu saja, strategi mengikuti tren juga memiliki masalah umum, yakni pengambilan keuntungan yang belum terealisasi. Keuntungan mengambang yang diperoleh dari mengejar kenaikan kemungkinan besar akan hilang karena penurunan tajam berikutnya. Sangat kuat dalam tren besar, tetapi berkinerja buruk dalam pasar yang bergejolak.
3. Pengembangan praktis strategi CTA masa depan
3.1 Pengembangan strategi tren CTA berdasarkan bahasa Mai
Pada akhir abad lalu, sebuah metode perdagangan ajaib mulai menjadi populer di bidang investasi keuangan di Amerika Serikat. Setelah ribuan orang mempraktikkannya, orang-orang menemukan bahwa metode ini efektif dan memiliki nilai praktis yang besar. Pada saat yang sama , hal ini diakui oleh banyak pakar investasi. Hal ini diakui oleh para pedagang profesional dan masih dapat diterapkan dengan sempurna pada hampir semua bidang investasi keuangan, baik itu valuta asing, emas, saham, berjangka, minyak mentah, atau indeks dan obligasi. Hal ini metode operasi kekacauan.
Kata chaos pada awalnya merujuk pada deskripsi keadaan alam semesta yang kacau. Idenya adalah bahwa hasilnya tidak dapat dihindari, tetapi tidak dapat dihitung karena pengetahuan yang ada, karena perhitungan itu sendiri juga mengubah hasilnya, dan maksimum atau minimum hasil mungkin tampak di akhir, tetapi tidak ada yang tak terelakkan. hasil. Hal ini sangat mirip dengan perdagangan pasar, di mana para peserta mengubah pasar saat mereka menganalisis pasar dan membeli serta menjual perdagangan. Pasar selalu berubah-ubah. Ketika peserta mempelajari bentuk pasar baru, pasar juga mengetahui bahwa bentuk pasar tersebut dikenali oleh peserta, dan kemudian terjadi mutasi. Dan itu pasti akan cenderung bermutasi ke arah yang tidak diketahui oleh para peserta. Ia memiliki cukup kebijaksanaan untuk mencegah para peserta menangkap pola-polanya yang berubah. Dengan kata lain, pasar tidak stabil, dan pemahaman tentang masa lalu pasar tidak dapat mewakili masa depan.
Metode operasi kekacauan adalah seperangkat lengkap ide investasi, strategi perdagangan, serta sinyal masuk dan keluar yang diciptakan oleh Bill Williams. Saat ini, banyak investor internasional menggunakan metode operasi chaos untuk berpartisipasi dalam transaksi pasar. Karena perkembangan pasar keuangan negara saya yang lambat dan fakta bahwa teori chaos merupakan ide yang relatif baru, hanya sedikit orang di Tiongkok yang mempelajari metode operasi chaos. Karena Metode Operasi Chaos adalah strategi perdagangan yang sangat universal yang dapat diterapkan ke hampir semua bidang investasi keuangan, termasuk saham, obligasi, futures, valuta asing, dan mata uang digital, kursus ini menggunakan versi sederhana dari Strategi Chaos sebagai titik awal. Meningkatkan minat dan keuntungan investasi setiap orang.
Seperti namanya, dasar teori metode operasi chaos adalah teori chaos, yang dikemukakan oleh ahli meteorologi Edward Lorenz dan merupakan salah satu penemuan ilmiah terbesar di akhir abad ke-20. Dialah yang mengusulkan "efek kupu-kupu" yang terkenal. Bill Williams secara kreatif menerapkan teori kekacauan pada bidang investasi keuangan, dan menggabungkannya dengan geometri fraktal, dinamika nonlinier, dan disiplin ilmu lainnya untuk menciptakan serangkaian indikator analisis teknis yang sangat efektif.
Seluruh metode operasi kekacauan terdiri dari lima dimensi (indikator teknis):
Mari kita lihat gambar di atas. Alligator Line adalah sekumpulan garis keseimbangan yang menggunakan geometri fraktal dan dinamika nonlinier. Esensinya adalah moving average tertimbang eksponensial yang diperluas, yang merupakan jenis moving average, tetapi metode perhitungannya sedikit lebih rumit. daripada rata-rata bergerak biasa. Beberapa. Selanjutnya, mari kita lihat cara mendefinisikan garis Alligator dalam bahasa Mai:
// 参数
N1:=11;
N2:=21;
// 定义价格中线
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;
// 鳄鱼线
Y^^SMA(REF(HL,N3),N4,1);
R:=SMA(REF(HL,N2),N3,1);
G:=SMA(REF(HL,N1),N2,1);
Pertama, kita tentukan dua parameter eksternal N1 dan N2, lalu hitung rata-rata HL harga tertinggi dan harga terendah berdasarkan parameter eksternal tersebut. Kemudian, kita hitung rata-rata HL dengan parameter yang berbeda-beda. Untuk ciuman bibir, itu adalah siklus kecil garis tengah. Untuk merata-ratakannya lagi, gigi adalah rata-rata periode sedang garis tengah, dan rahang adalah rata-rata periode besar garis tengah. Dalam strategi ini, kami menggunakan rahang.
Konsep fraktal didefinisikan dengan sangat jelas dalam Metode Operasi Chaos. Kita dapat menggunakan analogi: buka telapak tangan Anda dengan jari-jari menghadap ke atas. Jari tengah adalah fraktal atas, jari kelingking dan jari manis di sebelah kiri, dan jari telunjuk jari tengah dan ibu jari di sebelah kanan mewakili area yang tidak cedera. Garis K tinggi baru. Fraktal dasar tersusun dari 5 garis K ini. Kemudian Anda dapat mendefinisikan fraktal menggunakan kode berikut:
// 分形
TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2;
BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2;
TOP:=REF(H,TOP_N);
BOTTOM:=REF(L,BOTTOM_N);
MAX_YRG^^MAX(MAX(Y,R),G);
MIN_YRG^^MIN(MIN(Y,R),G);
TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP);
BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);
Setelah menghitung garis Alligator dan fraktal, kita dapat menulis strategi operasi kekacauan sederhana berdasarkan kedua kondisi ini, menggunakan serangkaian rata-rata pergerakan berbobot eksponensial sebagai harga patokan untuk menghitung garis Alligator dan indikator fraktal. Tentu saja, strategi operasi kekacauan aslinya lebih rumit. Kodenya adalah sebagai berikut:
// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);
// 如果收盘价跌破鳄鱼的下巴时,多头平仓
C<Y,SP(BKVOL);
// 如果收盘价升破鳄鱼的下巴时,空头平仓
C>Y,BP(SKVOL);
Agar mudah dipahami, saya telah menyertakan komentar terperinci dalam kode. Kita dapat dengan mudah mencantumkan logika perdagangan strategi ini sebagai berikut:
- Buka posisi panjang: Jika tidak ada order panjang saat ini, dan harga penutupan menembus fraktal atas, dan fraktal atas berada di atas garis Alligator.
- Buka posisi short: jika saat ini tidak ada order short, dan harga penutupan turun di bawah fraktal bawah, dan fraktal bawah berada di bawah garis Alligator.
- Keluar dari posisi panjang: Jika harga penutupan turun di bawah rahang Alligator.
- Keluar dari posisi short: Jika harga penutupan menembus Alligator's Jaw.
Selanjutnya, mari kita lihat hasil backtest dari strategi operasi kekacauan sederhana ini. Untuk membuat pengujian ulang lebih mendekati lingkungan perdagangan riil, biaya transaksi ditetapkan dua kali lipat dari biaya bursa, dan slippage 2 lompatan ditambahkan untuk membuka dan menutup posisi. Tipe data untuk pengujian ulang adalah indeks rebar, tipe perdagangan adalah rebar utama kontinu, dan posisi pembukaan ditetapkan pada 1 lot. Di bawah ini adalah laporan kinerja uji ulang awal pada level 1 jam.
Dilihat dari kurva modal dan data kinerja uji ulang, strategi tersebut berkinerja baik dan kurva modal keseluruhan terus meningkat. Namun, karakteristik pasar tulangan telah berubah sejak akhir tahun 2016, dari tren unilateral dengan volatilitas tinggi sebelumnya menjadi berbagai fluktuasi. Dilihat dari kurva modal, laba jelas melemah sejak 2017.
Singkatnya, inti dari metode operasi chaos adalah menemukan titik balik. Anda tidak perlu khawatir tentang bagaimana pasar berjalan, atau apakah itu terobosan yang benar atau salah. Jika Anda menembus fraktal, Anda dapat masuk pasar secara langsung. Jangan pernah mencoba memprediksi pasar, tetapi jadilah pengamat dan pengikut.
3.2 Pengembangan strategi arbitrase CTA berdasarkan bahasa JavaScript
Dalam bukunya "The Alchemy of Finance" yang ditulis pada tahun 1987, Soros pernah mengemukakan proposisi penting: Saya percaya bahwa harga pasar selalu salah dalam artian bahwa harga tersebut bias terhadap masa depan. Ia berpendapat bahwa hipotesis efisiensi pasar hanyalah asumsi teoritis. Faktanya, pelaku pasar tidak selalu rasional, dan pada setiap titik waktu, tidak mungkin bagi para pelaku untuk memperoleh dan menafsirkan semua informasi secara objektif. Selain itu, meskipun informasi yang sama Informasi, tanggapan setiap orang berbeda-beda. Dengan kata lain, harga itu sendiri sudah mencakup ekspektasi keliru dari para pelaku pasar, sehingga harga pasar pada hakikatnya selalu salah. Ini mungkin menjadi sumber keuntungan bagi para pelaku arbitrase.
Berdasarkan prinsip-prinsip di atas, kita tahu bahwa dalam pasar berjangka yang tidak efisien, dampak pasar terhadap kontrak pengiriman di berbagai periode tidak selalu sinkron, dan harganya tidak sepenuhnya efektif. Kemudian, berdasarkan harga kontrak pengiriman subjek perdagangan yang sama dalam periode yang berbeda, jika ada perbedaan harga yang besar antara kedua harga tersebut, Anda dapat membeli dan menjual kontrak berjangka dari periode yang berbeda pada saat yang sama untuk melakukan arbitrase lintas periode.
Seperti komoditas berjangka, mata uang digital juga memiliki kombinasi kontrak arbitrase lintas periode yang terkait dengannya. Misalnya, di bursa OkEX, ada: ETC Mingguan, ETC Dua Mingguan, dan ETC Triwulanan. Misalnya, anggaplah perbedaan harga antara ETC mingguan dan ETC triwulanan tetap sekitar 5 untuk waktu yang lama. Jika selisihnya mencapai 7 pada suatu hari, kami perkirakan selisihnya akan kembali ke 5 pada suatu titik di masa mendatang. Selanjutnya Anda dapat menjual ETC setiap minggu dan membeli ETC setiap tiga bulan untuk memperpendek spread. sebaliknya.
Meskipun perbedaan harga ini ada, arbitrase manual sering kali melibatkan banyak ketidakpastian karena operasi manual yang memakan waktu, akurasi yang buruk, dan dampak perubahan harga. Pesona arbitrase kuantitatif terletak pada penangkapan peluang arbitrase melalui model kuantitatif dan perumusan strategi perdagangan arbitrase, serta penempatan perintah perdagangan secara otomatis ke bursa melalui algoritma terprogram, sehingga dapat menangkap peluang dengan cepat dan akurat serta memperoleh laba secara efisien dan stabil.
Kursus ini akan mengajarkan Anda cara menggunakan Platform Perdagangan Kuantitatif Inventor dan kontrak berjangka ETC di bursa OkEX dalam perdagangan mata uang digital, dan menggunakan strategi arbitrase sederhana untuk menunjukkan cara menangkap peluang arbitrase instan dan memanfaatkan setiap peluang untuk melihat Dapatkan keuntungan sambil melindungi dari kemungkinan risiko.
Membuat Strategi Arbitrase Lintas Periode Mata Uang Kripto
Kesulitan: Normal
Lingkungan Strategis
- Subjek transaksi: Ethereum Classic (ETC)
- Data perbedaan harga: ETC mingguan - ETC triwulanan (pengujian kointegrasi dihilangkan)
- Siklus perdagangan: 5 menit
- Pencocokan posisi: 1:1
- Jenis transaksi: Produk yang sama lintas periode
Logika Strategi
- Kondisi pembukaan spread panjang: Jika akun berjalan tidak memiliki posisi dan spread lebih kecil dari jalur boll bawah, ambil posisi panjang pada spread. Yaitu: beli ETC selama seminggu dan jual ETC selama seperempat tahun.
- Ketentuan untuk membuka posisi short spread: Jika rekening giro tidak memiliki posisi dan spread lebih besar dari boll upper track, short spread. Yaitu: jual ETC selama seminggu dan beli ETC selama seperempat tahun.
- Ketentuan untuk menutup spread panjang: Jika akun berjalan memiliki posisi panjang mingguan di ETC dan posisi pendek triwulanan di ETC, dan spread lebih besar dari jalur tengah boll, spread panjang akan ditutup. Yaitu: jual ETC selama seminggu dan beli ETC selama seperempat tahun.
- Ketentuan untuk menutup spread short: Jika akun berjalan memiliki posisi short untuk ETC minggu ini dan posisi long untuk ETC pada kuartal ini, dan spread kurang dari jalur tengah boll, spread short akan ditutup. Yaitu: beli ETC selama seminggu dan jual ETC selama seperempat tahun.
Di atas adalah deskripsi sederhana tentang logika strategi arbitrase lintas periode mata uang digital. Jadi, bagaimana Anda menerapkan ide-ide Anda dalam program tersebut? Kami mencoba membangun kerangka kerja pada Platform Perdagangan Kuantitatif Inventor terlebih dahulu.
function Data() {} // 基础数据函数
Data.prototype.mp = function () {} // 持仓函数
Data.prototype.boll = function () {} // 指标函数
Data.prototype.trade = function () {} // 下单函数
Data.prototype.cancelOrders = function () {} // 撤单函数
Data.prototype.isEven = function () {} // 处理单只合约函数
Data.prototype.drawingChart = function () {} // 画图函数
function onTick() {
var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
var accountStocks = data.accountData.Stocks; // 账户余额
var boll = data.boll(dataLength, timeCycle); // 计算boll技术指标
data.trade(); // 计算交易条件下单
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约
}
//入口函数
function main() {
while (true) { // 进入轮询模式
onTick(); // 执行onTick函数
Sleep(500); // 休眠0.5秒
}
}
Bayangkan seperti apa proses transaksi kita dalam perdagangan pengawas? Tidak ada perbedaan mendasar dalam sistem perdagangan, tidak lebih dari: memperoleh data, menghitung data, menempatkan pesanan, dan memproses setelah menempatkan pesanan. Hal yang sama juga berlaku pada program. Pertama, program akan menjalankan fungsi utama pada baris 20. Ini adalah sebuah konvensi. Ketika program menyelesaikan praproses strategi perdagangan (jika ada), program akan memasuki mode loop tak terbatas, yaitu, mode Polling bulat. Dalam mode polling, fungsi onTick akan dijalankan berulang kali.
Kemudian pada fungsi onTick, kita memiliki proses perdagangan dalam perdagangan subjektif: pertama dapatkan data harga dasar, lalu dapatkan saldo akun, lalu hitung indikatornya, lalu mulailah menghitung kondisi perdagangan dan lakukan pemesanan, dan terakhir pemrosesan setelah menempatkan pesanan. pesanan, termasuk: Membatalkan pesanan, menggambar gambar, dan memproses kontrak tunggal.
Dengan membandingkan ide-ide strategis dan proses perdagangan, Anda dapat dengan mudah membangun kerangka strategi. Seluruh strategi dapat disederhanakan menjadi tiga langkah:
- Pemrosesan pra-transaksi.
- Mendapatkan dan menghitung data.
- Tempatkan pesanan dan tangani tindak lanjutnya.
Setelah kerangka strategi perdagangan dibangun, Anda perlu mengisi kode detail yang diperlukan dalam kerangka strategi berdasarkan proses perdagangan aktual dan detail transaksi.
1. Pemrosesan pra-transaksi
1. Mendeklarasikan variabel global yang diperlukan
- Nyatakan objek bagan untuk mengonfigurasi bagan
var chart = {} - Panggil fungsi Bagan untuk menginisialisasi bagan
var ObjChart = Chart ( chart ) - Nyatakan array kosong untuk menyimpan urutan perbedaan harga
var bars = [] - Nyatakan variabel untuk merekam stempel waktu data historis
var oldTime = 0
2. Konfigurasikan parameter eksternal strategi
var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量
3. Definisikan fungsi pemrosesan data
- Fungsi data dasar: Data ( )
Buat konstruktor Data dan tentukan properti internalnya. Meliputi: data akun, data posisi, stempel waktu data K-line, harga bid/ask kontrak arbitrase A/B, dan spread arbitrase forward/reverse.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
this.accountData = _C(exchange.GetAccount); // 获取账户信息
this.positionData = _C(exchange.GetPosition); // 获取持仓信息
var recordsData = _C(exchange.GetRecords); //获取K线数据
exchange.SetContractType(tradeTypeA); // 订阅套利A合约
var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
exchange.SetContractType(tradeTypeB); // 订阅套利B合约
var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
// 正套价差(合约A卖一价 - 合约B买一价)
this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
// 反套价差(合约A买一价 - 合约B卖一价)
this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
- Dapatkan fungsi posisi: mp ( )
Lintasi seluruh susunan posisi dan kembalikan jumlah posisi kontrak dan arah yang ditentukan. Jika tidak ada, kembalikan false
Data.prototype.mp = function (tradeType, type) {
var positionData = this.positionData; // 获取持仓信息
for (var i = 0; i < positionData.length; i++) {
if (positionData[i].ContractType == tradeType) {
if (positionData[i].Type == type) {
if (positionData[i].Amount > 0) {
return positionData[i].Amount;
}
}
}
}
return false;
}
- Fungsi garis K dan indikator: boll ( )
Mensintesiskan sekuens K-line baru berdasarkan data sebaran arbitrase maju/terbalik. Dan mengembalikan data rel atas, rel tengah, dan rel bawah yang dihitung oleh indikator boll.
Data.prototype.boll = function (num, timeCycle) {
var self = {}; // 临时对象
// 正套价差和反套价差中间值
self.Close = (this.basb + this.sabb) / 2;
if (this.timeA == this.timeB) {
self.Time = this.time;
} // 对比两个深度数据时间戳
if (this.time - oldTime > timeCycle * 60000) {
bars.push(self);
oldTime = this.time;
} // 根据指定时间周期,在K线数组里面传入价差数据对象
if (bars.length > num * 2) {
bars.shift(); // 控制K线数组长度
} else {
return;
}
var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
return {
up: boll[0][boll[0].length - 1], // boll指标上轨
middle: boll[1][boll[1].length - 1], // boll指标中轨
down: boll[2][boll[2].length - 1] // boll指标下轨
} // 返回一个处理好的boll指标数据
}
- Fungsi pesanan: perdagangan ( )
Masukkan nama kontrak pesanan dan jenis pesanan, lalu tempatkan pesanan pada harga pertimbangan, dan kembalikan hasilnya setelah tempatkan pesanan. Karena perlu menempatkan dua pesanan ke arah berbeda pada saat yang sama, harga beli/jual dikonversi dalam fungsi sesuai dengan nama kontrak pesanan.
Data.prototype.trade = function (tradeType, type) {
exchange.SetContractType(tradeType); // 下单前先重新订阅合约
var askPrice, bidPrice;
if (tradeType == tradeTypeA) { // 如果是A合约下单
askPrice = this.askA; // 设置askPrice
bidPrice = this.bidA; // 设置bidPrice
} else if (tradeType == tradeTypeB) { // 如果是B合约下单
askPrice = this.askB; // 设置askPrice
bidPrice = this.bidB; // 设置bidPrice
}
switch (type) { // 匹配下单模式
case "buy":
exchange.SetDirection(type); // 设置下单模式
return exchange.Buy(askPrice, unit);
case "sell":
exchange.SetDirection(type); // 设置下单模式
return exchange.Sell(bidPrice, unit);
case "closebuy":
exchange.SetDirection(type); // 设置下单模式
return exchange.Sell(bidPrice, unit);
case "closesell":
exchange.SetDirection(type); // 设置下单模式
return exchange.Buy(askPrice, unit);
default:
return false;
}
}
- Fungsi pembatalan pesanan: cancelOrders()
Dapatkan serangkaian pesanan yang tidak terpenuhi dan batalkan satu per satu. Dan jika ada pesanan yang tidak terpenuhi, maka akan mengembalikan nilai false, dan jika tidak ada pesanan yang tidak terpenuhi, maka akan mengembalikan nilai true.
Data.prototype.cancelOrders = function () {
Sleep(500); // 撤单前先延时,因为有些交易所你懂的
var orders = _C(exchange.GetOrders); // 获取未成交订单数组
if (orders.length > 0) { // 如果有未成交的订单
for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
Sleep(500); //延时0.5秒
}
return false; // 如果取消了未成交的单子就返回false
}
return true; //如果没有未成交的订单就返回true
}
- Menangani penyimpanan satu kontrak: isEven()
Saat berhadapan dengan situasi single-leg dalam perdagangan arbitrase, kami cukup menutup semua posisi untuk menanganinya. Tentu saja Anda juga dapat mengubahnya ke metode pemesanan lanjutan.
Data.prototype.isEven = function () {
var positionData = this.positionData; // 获取持仓信息
var type = null; // 转换持仓方向
// 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
if (positionData.length % 2 != 0 || positionData.length != 2) {
for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组
if (positionData[i].Type == 0) { // 如果是多单
type = 10; // 设置下单参数
} else if (positionData[i].Type == 1) { // 如果是空单
type = -10; // 设置下单参数
}
// 平掉所有仓位
this.trade(positionData[i].ContractType, type, positionData[i].Amount);
}
}
}
- Fungsi menggambar: drawingChart ( )
Panggil metode ObjChart.add() untuk menggambar data pasar dan data indikator yang diperlukan dalam grafik: jalur atas, jalur tengah, jalur bawah, dan spread positif/negatif.
Data.prototype.drawingChart = function (boll) {
var nowTime = new Date().getTime();
ObjChart.add([0, [nowTime, boll.up]]);
ObjChart.add([1, [nowTime, boll.middle]]);
ObjChart.add([2, [nowTime, boll.down]]);
ObjChart.add([3, [nowTime, this.basb]]);
ObjChart.add([4, [nowTime, this.sabb]]);
ObjChart.update(chart);
}
4. Pada fungsi entri main(), jalankan kode praproses pratransaksi. Kode ini hanya dijalankan sekali setelah program dimulai. termasuk:
- Filter informasi yang kurang penting di konsol
SetErrorFilter ( ) - Tetapkan mata uang digital yang akan diperdagangkan
exchange.IO ( ) - Hapus grafik yang digambar sebelumnya sebelum program dimulai
ObjChart.reset ( ) - Hapus informasi bilah status sebelumnya sebelum program dimulai
LogProfitReset ( )
Setelah mendefinisikan pra-pemrosesan perdagangan di atas, kita akan beralih ke langkah berikutnya, memasuki mode pemungutan suara, dan berulang kali mengeksekusi fungsi onTick(). Dan atur waktu tidur saat Sleep() melakukan polling, karena beberapa API pertukaran mata uang kripto memiliki batas akses bawaan dalam jangka waktu tertentu.
function main() {
// 过滤控制台中不是很重要的信息
SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种
ObjChart.reset(); //程序启动前清空之前绘制的图表
LogProfitReset(); //程序启动前清空之前的状态栏信息
while (true) { // 进入轮询模式
onTick(); // 执行onTick函数
Sleep(500); // 休眠0.5秒
}
}
2. Mendapatkan dan menghitung data
- Dapatkan objek data dasar, saldo akun, dan data indikator boll untuk digunakan dalam logika perdagangan.
function onTick() {
var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
var accountStocks = data.accountData.Stocks; // 账户余额
var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据
if (!boll) return; // 如果没有boll数据就返回
}
3. Lakukan pemesanan dan tindak lanjut
- Menurut logika strategi di atas, jalankan operasi beli dan jual. Pertama, menentukan apakah kondisi harga dan indikator terpenuhi, kemudian menentukan apakah kondisi posisi terpenuhi, dan akhirnya mengeksekusi fungsi order perdagangan ( ).
// 价差说明
// basb = (合约A卖一价 - 合约B买一价)
// sabb = (合约A买一价 - 合约B卖一价)
if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨
if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
data.trade(tradeTypeA, "closebuy"); // 合约A平多
}
if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
data.trade(tradeTypeB, "closesell"); // 合约B平空
}
} else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨
if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
data.trade(tradeTypeA, "closesell"); // 合约A平空
}
if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
data.trade(tradeTypeB, "closebuy"); // 合约B平多
}
}
if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额
if (data.basb < boll.down) { // 如果basb价差低于下轨
if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
data.trade(tradeTypeA, "buy"); // 合约A开多
}
if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
data.trade(tradeTypeB, "sell"); // 合约B开空
}
} else if (data.sabb > boll.up) { // 如果sabb价差高于上轨
if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
data.trade(tradeTypeA, "sell"); // 合约A开空
}
if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
data.trade(tradeTypeB, "buy"); // 合约B开多
}
}
}
- Setelah pesanan dilakukan, perlu ditangani situasi abnormal seperti pesanan yang tidak terpenuhi dan menahan satu kontrak. dan menggambar grafik.
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约
Di atas, kami telah membuat strategi arbitrase antar-periode mata uang digital sederhana hanya dalam 200 baris. Kode lengkapnya adalah sebagai berikut:
// 全局变量
// 声明一个配置图表的 chart 对象
var chart = {
__isStock: true,
tooltip: {
xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
},
title: {
text: '交易盈亏曲线图(详细)'
},
rangeSelector: {
buttons: [{
type: 'hour',
count: 1,
text: '1h'
}, {
type: 'hour',
count: 2,
text: '3h'
}, {
type: 'hour',
count: 8,
text: '8h'
}, {
type: 'all',
text: 'All'
}],
selected: 0,
inputEnabled: false
},
xAxis: {
type: 'datetime'
},
yAxis: {
title: {
text: '价差'
},
opposite: false,
},
series: [{
name: "上轨",
id: "线1,up",
data: []
}, {
name: "中轨",
id: "线2,middle",
data: []
}, {
name: "下轨",
id: "线3,down",
data: []
}, {
name: "basb",
id: "线4,basb",
data: []
}, {
name: "sabb",
id: "线5,sabb",
data: []
}]
};
var ObjChart = Chart(chart); // 画图对象
var bars = []; // 存储价差序列
var oldTime = 0; // 记录历史数据时间戳
// 参数
var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量
// 基础数据
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
this.accountData = _C(exchange.GetAccount); // 获取账户信息
this.positionData = _C(exchange.GetPosition); // 获取持仓信息
var recordsData = _C(exchange.GetRecords); //获取K线数据
exchange.SetContractType(tradeTypeA); // 订阅套利A合约
var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
exchange.SetContractType(tradeTypeB); // 订阅套利B合约
var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
// 正套价差(合约A卖一价 - 合约B买一价)
this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
// 反套价差(合约A买一价 - 合约B卖一价)
this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
// 获取持仓
Data.prototype.mp = function (tradeType, type) {
var positionData = this.positionData; // 获取持仓信息
for (var i = 0; i < positionData.length; i++) {
if (positionData[i].ContractType == tradeType) {
if (positionData[i].Type == type) {
if (positionData[i].Amount > 0) {
return positionData[i].Amount;
}
}
}
}
return false;
}
// 合成新K线数据和boll指标数据
Data.prototype.boll = function (num, timeCycle) {
var self = {}; // 临时对象
// 正套价差和反套价差中间值
self.Close = (this.basb + this.sabb) / 2;
if (this.timeA == this.timeB) {
self.Time = this.time;
} // 对比两个深度数据时间戳
if (this.time - oldTime > timeCycle * 60000) {
bars.push(self);
oldTime = this.time;
} // 根据指定时间周期,在K线数组里面传入价差数据对象
if (bars.length > num * 2) {
bars.shift(); // 控制K线数组长度
} else {
return;
}
var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
return {
up: boll[0][boll[0].length - 1], // boll指标上轨
middle: boll[1][boll[1].length - 1], // boll指标中轨
down: boll[2][boll[2].length - 1] // boll指标下轨
} // 返回一个处理好的boll指标数据
}
// 下单
Data.prototype.trade = function (tradeType, type) {
exchange.SetContractType(tradeType); // 下单前先重新订阅合约
var askPrice, bidPrice;
if (tradeType == tradeTypeA) { // 如果是A合约下单
askPrice = this.askA; // 设置askPrice
bidPrice = this.bidA; // 设置bidPrice
} else if (tradeType == tradeTypeB) { // 如果是B合约下单
askPrice = this.askB; // 设置askPrice
bidPrice = this.bidB; // 设置bidPrice
}
switch (type) { // 匹配下单模式
case "buy":
exchange.SetDirection(type); // 设置下单模式
return exchange.Buy(askPrice, unit);
case "sell":
exchange.SetDirection(type); // 设置下单模式
return exchange.Sell(bidPrice, unit);
case "closebuy":
exchange.SetDirection(type); // 设置下单模式
return exchange.Sell(bidPrice, unit);
case "closesell":
exchange.SetDirection(type); // 设置下单模式
return exchange.Buy(askPrice, unit);
default:
return false;
}
}
// 取消订单
Data.prototype.cancelOrders = function () {
Sleep(500); // 撤单前先延时,因为有些交易所你懂的
var orders = _C(exchange.GetOrders); // 获取未成交订单数组
if (orders.length > 0) { // 如果有未成交的订单
for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
Sleep(500); //延时0.5秒
}
return false; // 如果取消了未成交的单子就返回false
}
return true; //如果没有未成交的订单就返回true
}
// 处理持有单个合约
Data.prototype.isEven = function () {
var positionData = this.positionData; // 获取持仓信息
var type = null; // 转换持仓方向
// 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
if (positionData.length % 2 != 0 || positionData.length != 2) {
for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组
if (positionData[i].Type == 0) { // 如果是多单
type = 10; // 设置下单参数
} else if (positionData[i].Type == 1) { // 如果是空单
type = -10; // 设置下单参数
}
// 平掉所有仓位
this.trade(positionData[i].ContractType, type, positionData[i].Amount);
}
}
}
// 画图
Data.prototype.drawingChart = function (boll) {
var nowTime = new Date().getTime();
ObjChart.add([0, [nowTime, boll.up]]);
ObjChart.add([1, [nowTime, boll.middle]]);
ObjChart.add([2, [nowTime, boll.down]]);
ObjChart.add([3, [nowTime, this.basb]]);
ObjChart.add([4, [nowTime, this.sabb]]);
ObjChart.update(chart);
}
// 交易条件
function onTick() {
var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
var accountStocks = data.accountData.Stocks; // 账户余额
var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据
if (!boll) return; // 如果没有boll数据就返回
// 价差说明
// basb = (合约A卖一价 - 合约B买一价)
// sabb = (合约A买一价 - 合约B卖一价)
if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨
if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
data.trade(tradeTypeA, "closebuy"); // 合约A平多
}
if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
data.trade(tradeTypeB, "closesell"); // 合约B平空
}
} else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨
if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
data.trade(tradeTypeA, "closesell"); // 合约A平空
}
if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
data.trade(tradeTypeB, "closebuy"); // 合约B平多
}
}
if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额
if (data.basb < boll.down) { // 如果basb价差低于下轨
if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
data.trade(tradeTypeA, "buy"); // 合约A开多
}
if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
data.trade(tradeTypeB, "sell"); // 合约B开空
}
} else if (data.sabb > boll.up) { // 如果sabb价差高于上轨
if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
data.trade(tradeTypeA, "sell"); // 合约A开空
}
if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
data.trade(tradeTypeB, "buy"); // 合约B开多
}
}
}
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约
}
//入口函数
function main() {
// 过滤控制台中不是很重要的信息
SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种
ObjChart.reset(); //程序启动前清空之前绘制的图表
LogProfitReset(); //程序启动前清空之前的状态栏信息
while (true) { // 进入轮询模式
onTick(); // 执行onTick函数
Sleep(500); // 休眠0.5秒
}
}
Perdagangan arbitrase berawal dari strategi perdagangan saham Morgan Stanley. Konsepnya adalah: fluktuasi perbedaan harga dari dua produk yang sangat berkorelasi sesuai dengan "proses popcorn", yaitu, perbedaan harga terus-menerus kembali ke rata-rata dari posisi yang menyimpang dari rata-rata historis. , dan kemudian Penyimpangan lain dari rata-rata.
Dari sini kita bisa mendapatkan keuntungan dengan cara membeli di harga rendah dan menjual di harga tinggi berdasarkan selisih harga. Kemudian, berdasarkan prinsip standar deviasi dalam statistik, Bollinger Bands terdiri dari rel tengah dan rel atas dan bawah yang dihitung dengan standar deviasi untuk membentuk tiga jaring. Sangat berguna dalam perdagangan arbitrase spread.
Setelah dilakukan pengujian, ditemukan bahwa jika strategi tersebut diikuti, tanpa memperhitungkan biaya penanganan dan biaya dampak, meskipun keuntungan tiap kali tidak terlalu tinggi, namun keuntungan keseluruhan relatif stabil. Perlu dicatat bahwa karena ini adalah arbitrase statistik, ada risiko bahwa perbedaan harga akan melebar ke arah yang berlawanan, dan kita harus mempertimbangkan masalah stop loss saat merancangnya. Kedua, kita juga perlu memperhatikan biaya dampak. Ketika likuiditas kedua kontrak yang terlibat dalam transaksi menurun, hal itu akan berdampak signifikan pada keuntungan, dan investor harus menghindarinya sebagaimana mestinya.
4. Iterasi lanjutan dari pengembangan strategi CTA
4.1 Menghindari jebakan strategi CTA berjangka
Dalam dua kelas terakhir, kami menulis strategi tren dalam bahasa Mai dan strategi arbitrase dalam JavaScript, dan tidak menemukan masalah apa pun dalam pengujian ulang strategi tersebut. Namun, perdagangan kuantitatif bukan hanya tentang menulis program dan kemudian langsung memperdagangkannya setelah pengujian ulang berhasil.
Faktanya, pengujian ulang hanyalah simulasi suatu strategi, yang hanya digunakan untuk mengevaluasi kinerja strategi dalam data historis, yang memungkinkan pedagang untuk dengan cepat mengevaluasi dan meninggalkan beberapa strategi perdagangan.
Dalam banyak kasus, strategi yang terlihat bagus dalam pengujian ulang sering kali gagal memenuhi standar pengujian ulang dalam perdagangan nyata. Ada banyak alasan, beberapa di antaranya berada di luar kendali pedagang, tetapi beberapa kegagalan disebabkan oleh kesalahan umum, atau kesalahan potensial. .
Data statis vs. data dinamis
Ketika kita melakukan analisis kuantitatif, pertama-tama kita harus memiliki konsep data statis dan data dinamis. Dalam pengujian ulang, kita menggunakan data historis statis. Harga setiap garis K lengkap, dan setiap sinyal perdagangan dapat dijual 100%. Namun data di pasar nyata bersifat dinamis. Misalnya, jika harga tertinggi lebih besar dari harga tertinggi dalam waktu 1 jam setelah pembukaan, maka beli. Namun, jika garis K saat ini belum selesai, maka harga tertinggi bersifat dinamis dan sinyal perdagangan dapat berkedip bolak-balik. . Situasi ini menunjukkan bahwa strategi tersebut menggunakan fungsi masa depan dalam menentukan kondisi transaksi jual beli.
Fungsi Masa Depan
Apa itu fungsi masa depan? Mari kita lihat dulu bagaimana Ensiklopedia Baidu menjelaskannya: Jika suatu kuantitas bergantung pada kuantitas lain, seperti kuantitas A dan kuantitas B, dan perubahan B menyebabkan perubahan A, maka A adalah fungsi B. Jika B adalah kuantitas berikutnya, maka A adalah fungsi B. kuantitas, A adalah Untuk kuantitas sebelumnya, A berubah dengan B, dan A adalah fungsi masa depan B. Semua orang mungkin bingung.
Secara sederhana, ini adalah fungsi yang mereferensikan data masa depan, seperti menggunakan harga besok untuk memprediksi harga besok. Jika indikator teknis berisi fungsi masa depan, sinyalnya tidak pasti. Sering kali, sinyal perdagangan dikeluarkan saat itu juga, tetapi ketika garis K berikutnya muncul, sinyal tersebut menghilang atau berubah posisi.
Harga penutupan adalah fungsi masa depan. Sebelum garis K terakhir selesai, harga penutupan selalu berubah. Anda harus menunggu hingga garis K selesai untuk menentukan harga penutupan. Karena harga penutupan itu sendiri merupakan fungsi masa depan, semua indikator teknis yang didasarkan pada harga penutupan juga merupakan fungsi masa depan.
Oleh karena itu, jika indikator teknis menggunakan harga penutupan yang dikonfirmasi sebagai data dasarnya, dan sinyal beli dan jual tidak berubah tidak peduli berapa lama waktu telah berlalu, dapat dikatakan bahwa indikator teknis ini tidak merujuk pada fungsi masa depan. Namun, data dasar yang digunakannya adalah harga penutupan yang belum dikonfirmasi, sehingga indikator teknis ini mengacu pada fungsi masa depan, dan sinyal beli dan jual dapat berubah dalam aplikasi sebenarnya.
Harga Sebelumnya
Fungsi future menggunakan harga masa depan, tetapi dapat juga menggunakan harga masa lalu. Ini adalah masalah yang sering diabaikan oleh banyak pemula. Untuk lebih menggambarkan masalah ini di masa mendatang, mari kita ambil contoh: jika harga tertinggi saat ini lebih besar dari harga tertinggi dalam 1 jam setelah pembukaan, beli pada harga pembukaan. Jelas tidak ada yang salah dengan kondisi sinyal beli dan jual ini, tetapi harga yang digunakan untuk menempatkan pesanan adalah harga masa lalu.
Dalam backtest, strateginya normal, karena mesin backtest yang berbasis data statis dapat menyelesaikan transaksi 100% sepanjang waktu selama ada sinyal beli. Namun, di pasar riil, ketika harga tertinggi lebih besar dari harga tertinggi dalam 1 jam setelah pembukaan, Saat ini, Anda tentu tidak dapat lagi menggunakan harga pembukaan sebelumnya untuk melakukan pemesanan.
Harga vakum
Yang disebut dengan price vacuum mengacu pada harga yang ditampilkan pada grafik K-line, tetapi harga tersebut tidak dapat diperdagangkan di pasar riil. Hal ini terutama dibagi menjadi beberapa situasi berikut:
- Siapa pun yang pernah berdagang tahu bahwa sulit untuk membeli saat harga mencapai batas atas, dan sulit untuk menjual saat harga mencapai batas bawah. Namun, perdagangan dapat dilakukan melalui backtest.
- Mekanisme pencocokan bursa adalah: prioritas harga dan prioritas waktu. Beberapa produk sering kali memiliki jumlah pesanan yang sangat besar. Jika Anda menempatkan pesanan untuk membeli atau menjual secara real time, Anda harus menunggu di belakang pesanan orang lain dan menunggu hingga pesanan orang lain dieksekusi sebelum Anda dapat menyelesaikan transaksi. Dalam beberapa kasus, harga mungkin telah berubah sebelum Anda dapat menyelesaikan transaksi. Namun, selama pengujian ulang, jika strategi Anda adalah menempatkan pesanan, maka transaksi akan diselesaikan tepat waktu, yang berbeda dari lingkungan perdagangan nyata.
- Jika Anda menggunakan strategi arbitrase, maka keuntungan dari pengujian ulang sangat tinggi, karena setiap kali Anda melakukan pengujian ulang, Anda berasumsi bahwa Anda telah meraih perbedaan harga ini. Pada kenyataannya, banyak spread tidak tersedia, atau hanya satu leg yang tersedia. Secara umum, yang tidak menguntungkan bagi arah Anda akan diperdagangkan terlebih dahulu, jadi Anda perlu segera mengisi leg lainnya. Pada saat ini, slippage telah sudah terjadi. Bukan 1 atau 2 poin, tetapi strategi arbitrase itu sendiri menghasilkan uang dari perbedaan harga poin-poin ini. Situasi ini tidak dapat disimulasikan dalam pengujian ulang. Keuntungan sesungguhnya tidak sebaik hasil backtest.
- Meskipun peristiwa angsa hitam tidak umum, peristiwa tersebut tetap memiliki dampak besar pada perdagangan kuantitatif. Misalnya, dalam peristiwa angsa hitam franc Swiss, grafik menunjukkan bahwa ada pembukaan tinggi dan penutupan rendah. Faktanya, dalam ekstrem kondisi pasar saat ini, Harga di tengah adalah kekosongan, sejumlah besar perintah stop-loss menyebabkan penyerbuan, likuiditas nol, dan transaksi sangat sulit, tetapi stop loss dapat dicapai dalam pengujian ulang.

Pemasangan berlebih
Overfitting merupakan kesalahan umum yang dilakukan oleh pemula dalam trading kuantitatif. Apa itu overfitting? Mari kita ambil contoh sederhana: ketika mengikuti ujian di sekolah, sebagian orang menggunakan taktik mengerjakan banyak soal dan menghafal setiap soal. Jika pertanyaannya sedikit diubah selama ujian, dia tidak akan bisa menjawabnya. Karena dia menghafal pendekatan pada setiap pertanyaan dengan cara yang sangat rumit, tetapi tidak mengabstraksikan aturan umumnya.

Seperti ditunjukkan pada gambar di atas, selama suatu model cukup kompleks, model tersebut dapat beradaptasi dengan data dengan sempurna. Hal yang sama berlaku untuk overfitting dalam perdagangan kuantitatif. Jika strategi Anda rumit dan memiliki banyak parameter eksternal, maka dalam backtest data historis yang terbatas, akan selalu ada satu atau beberapa parameter yang dapat secara sempurna menyesuaikan strategi tersebut. Sejalan dengan kondisi pasar historis .
Namun, dalam perdagangan riil di masa mendatang, perubahan harga dapat melampaui batasan strategi Anda. Faktanya, inti dari pengembangan strategi perdagangan kuantitatif adalah proses pencocokan data lokal non-acak dari sejumlah besar data yang tampaknya acak. Oleh karena itu, Kita perlu menggunakan statistik. Bagaimana kita dapat menggunakan pengetahuan untuk menghindari jebakan ini?
Solusi kompromi adalah menggunakan data dalam sampel dan luar sampel. Membagi seluruh data menjadi dua bagian, menggunakan data dalam sampel sebagai set pelatihan, dan bertanggung jawab atas pengujian ulang data. Data di luar sampel digunakan sebagai set uji untuk verifikasi. Jika data historisnya sedikit, Anda juga dapat menggunakan metode pengujian silang.
Jika Anda menemukan bahwa data out-of-sample tidak berkinerja baik, tetapi Anda merasa sayang untuk membuang model tersebut atau Anda tidak mau mengakui bahwa model Anda tidak baik, dan Anda terus mengoptimalkan model pada out-of-sample, Anda mungkin ingin membuang model tersebut. -data sampel hingga berkinerja sama baiknya pada data di luar sampel, maka yang akan dirugikan pada akhirnya adalah Itu pasti uang Anda yang sebenarnya.
Bias bertahan hidup
Bias bertahan hidup dapat dijelaskan dengan contoh-contoh berikut:
- Jika Anda berdiri di tempat yang tepat, bahkan babi pun bisa terbang.
- Semua ulasan untuk parasut yang dijual daring bersifat positif, karena tidak ada orang yang mengalami masalah dengan parasut mereka.
- Reporter mewawancarai orang-orang di dalam bus untuk mengetahui apakah mereka telah membeli tiket, karena mereka yang tidak dapat membeli tiket tidak dapat naik bus sama sekali.
- Media mempromosikan kemungkinan memenangkan lotere, karena media tidak akan secara aktif mempromosikan orang yang belum memenangkan lotere.
Dari contoh-contoh di atas, kita dapat melihat bahwa informasi yang biasanya diterima orang sebenarnya telah disaring, yang menyebabkan sejumlah besar data atau sampel diabaikan secara selektif. Hasilnya adalah bahwa kesimpulan berdasarkan bias penyintas telah menyimpang dari waktu sebenarnya. Kemudian dalam perdagangan kuantitatif, kita juga perlu mempertimbangkan apakah hasil backtest tersebut disebabkan oleh keberuntungan. Dalam banyak kasus, hasil backtest mungkin merupakan kinerja terbaik di seluruh backtest. Perhatikan gambar berikut:

Gambar di sebelah kiri adalah strategi perdagangan yang sangat bagus. Strategi ini memiliki kurva modal yang baik, tidak ada penarikan besar, dan dapat memperoleh laba yang stabil. Namun, harap lihat gambar di sebelah kanan, ini hanyalah gambar dengan performa terbaik di antara ratusan backtest trading ini. Di sisi lain, ketika kita melihat pasar keuangan, selalu ada lebih banyak bintang daripada yang berumur panjang. Jika strategi pedagang sejalan dengan kondisi pasar, maka kondisi pasar setiap tahun dapat menciptakan sekumpulan bintang, tetapi itu jarang sekali melihat bintang yang dapat bertahan lebih dari tiga tahun berturut-turut. Orang yang berulang tahun dengan keuntungan yang stabil.
Dampak biaya
Kecuali Anda menempatkan order tertunda, Anda mungkin mengalami penurunan harga saat berdagang. Untuk produk yang diperdagangkan secara aktif, harga bid dan harga ask biasanya memiliki perbedaan satu poin. Untuk produk yang kurang aktif diperdagangkan, spread mungkin lebih besar. Setiap kali Anda ingin berdagang secara aktif, Anda memerlukan setidaknya satu spread, atau bahkan lebih. Namun, dalam pengujian ulang, kita tidak perlu mempertimbangkan masalah transaksi. Selama ada sinyal, transaksi dapat diselesaikan. Oleh karena itu, untuk mensimulasikan lingkungan perdagangan yang sebenarnya, setidaknya satu slippage harus ditambahkan.
Khusus untuk strategi dengan frekuensi perdagangan yang relatif tinggi, saat melakukan backtesting strategi, jika slippage tidak disertakan, kurva modal akan selalu miring ke atas. Begitu slippage yang wajar ditambahkan, hal itu akan langsung berubah menjadi kerugian. Selain itu, fenomena ini tidak hanya disebabkan oleh masalah spread. Dalam lingkungan perdagangan nyata, masalah seperti keterlambatan jaringan, sistem perangkat lunak dan perangkat keras, serta respons server juga perlu dipertimbangkan.
Kapasitas Kebijakan
Strategi yang sama dapat menimbulkan dampak yang sangat berbeda, atau bahkan sepenuhnya berlawanan, di pasar yang efisien dan tidak efisien. Misalnya, di pasar yang tidak efisien seperti pasar saham domestik, komoditas berjangka, dan mata uang digital asing, kapasitas strategi frekuensi tinggi sendiri tidak terlalu besar karena basis volume perdagangan yang kecil. Jika lebih banyak orang menggunakannya, akan ada tidak ada margin keuntungan, dan bahkan strategi frekuensi tinggi yang asli tidak akan menguntungkan. Strategi yang menguntungkan berubah menjadi strategi yang merugi. Namun dalam pasar valuta asing yang efisien, terdapat ruang untuk berbagai jenis strategi frekuensi tinggi.
Di atas adalah masalah dan jebakan yang mungkin muncul selama pengembangan dan penggunaan strategi. Bagi pengembang sistem perdagangan yang berpengalaman, pengujian ulang adalah suatu keharusan. Karena dapat memberi tahu Anda apakah suatu ide strategi dapat diverifikasi keefektifannya dalam transaksi historis. Tetapi sering kali pengujian ulang tidak menjamin keuntungan di masa mendatang. Karena terlalu banyak jebakan dalam pengujian ulang, Anda tidak akan memahaminya kecuali Anda menghabiskan uang untuk mempelajari beberapa pelajaran. Dan pelajaran ini dipelajari dengan uang sungguhan. Kursus ini setidaknya dapat membantu Anda menghindari banyak jalan memutar dan jebakan kuantitatif.
4.2 Menetapkan manajemen posisi yang optimal
Dalam Reminiscences of a Stock Operator, ada episode yang menarik: Old Turkey (awalnya bernama Partridge), yang bekerja di perusahaan sekuritas yang sama dengan protagonis Livermore, selalu melakukan pembelian dan penjualan dalam jumlah besar. Setiap kali seseorang menyarankan agar dia Menjualnya setelah menghasilkan keuntungan, dan kemudian membelinya kembali setelah harga saham turun. Kalkun Tua selalu berkata dengan sungguh-sungguh: Tidak, Anda tahu, ini adalah pasar saham!
Livermore pun akhirnya mendesah: Tidak ada yang hebat dalam memprediksi tren dengan benar. Di pasar, Anda selalu dapat menemukan banyak orang yang optimis di pasar bullish dan pesimis di pasar bearish. Tetapi mereka selalu pandai menawar pasar, mencoba membeli pada harga terendah dan menjual pada harga tertinggi. Sama seperti kalkun tua, mereka yang benar-benar menghasilkan banyak uang adalah mereka yang melihat pasar dengan benar dan mempertahankan posisi mereka dengan erat. Ini juga merupakan hal yang paling sulit untuk dipelajari. Ini tidak hanya melibatkan pemilihan target dan waktu, tetapi juga pertanyaan yang lebih penting: seberapa besar posisi (risiko) yang harus dipegang (diambil)?
Semua trader yang gagal memiliki pola pikir yang sepihak. Ketika trading, orang yang tamak hanya melihat keuntungan dan tidak melihat risiko, sedangkan orang yang penakut hanya melihat risiko dan tidak melihat keuntungan. Mereka yang tamak dan penakut melupakan risiko ketika Pasar sedang naik. Lupakan keuntungan saat turun. Namun pedagang yang sukses akan mempertimbangkan risiko dan imbalan, artinya, untuk setiap dolar yang diperoleh, mereka menanggung beberapa dolar risiko. Maka indikator untuk mengukur return dan risiko adalah rasio return-risiko.
Banyak orang tahu bahwa semakin besar keuntungan, semakin besar pula risikonya, artinya, pengembalian sebanding dengan risikonya. Menurut pendapat sebagian orang, hubungan antara keuntungan dan risiko adalah sebagai berikut, dengan sumbu horizontal mewakili persentase risiko dan sumbu vertikal mewakili persentase keuntungan:

Namun, dalam transaksi sesungguhnya, laba dan risiko jauh dari sekadar garis lurus antara dua titik, setidaknya tidak selalu bergerak linier. Risiko sesungguhnya adalah kerugian maksimum yang dapat Anda tanggung berdasarkan pengembalian yang diharapkan, yang kami sebut volatilitas maksimum. Walaupun kadang kala kerugian mengambang maksimum belum tentu sama dengan kerugian penutupan dari hasil transaksi, namun kerugian mengambang maksimum itu nyata adanya.
Dari sini, kita dapat mengetahui bahwa rasio risiko-laba pada gambar di atas bukanlah representasi yang sebenarnya. Dalam lingkungan perdagangan yang sebenarnya, rasio risiko-laba seharusnya seperti yang ditunjukkan pada gambar di bawah ini:

Mari kita lihat gambar di atas. Kurva kuning menggambarkan fluktuasi nilai bersih dalam berbagai risiko. Seiring dengan terus meningkatnya imbal hasil yang diharapkan, risiko juga meningkat secara bertahap. Kalau kebangkrutan ditetapkan pada angka 0,5 yang artinya kerugian maksimal mencapai 50% maka strategi perdagangan ini adalah strategi yang gagal. Meskipun hasil akhir dari strategi ini positif, namun strategi ini sebenarnya bangkrut di tengah jalan.
Sekalipun strategi Anda adalah strategi ekspektasi positif, strategi tersebut tetap akan bangkrut akibat manajemen posisi yang salah. Jadi dari perspektif ini, berapa banyak yang harus dibeli atau dijual lebih penting daripada kapan harus membeli atau menjual. Bagaimana mengelola posisi secara ilmiah telah menjadi isu mendasar dalam transaksi keuangan. Jadi sebelum mencoba memecahkan masalah ini, mari kita lihat cara memasang taruhan secara ilmiah dalam perjudian.

Mari kita ambil contoh melempar koin. Dengan asumsi bahwa kedua sisi koin memiliki bobot yang sama, jika sisi depan muncul, keuntungannya adalah 2 yuan, dan jika sisi belakang muncul, kerugiannya adalah 1 yuan. Jelas, ini permainan harapan positif, dengan tingkat kemenangan 50% dan kerugian 2 yuan. Di sinilah pertanyaannya: Sekarang Anda punya 100 yuan, jadi bagaimana Anda bisa memasang taruhan berulang kali agar 100 yuan mencapai 1 juta yuan secepat mungkin.
Kalau tidak dipikirkan secara matang, kita akan mengira karena keuntungan setiap taruhan adalah 50%,*2-50%*1, yaitu 50%. Agar dapat segera memperoleh keuntungan maksimal, Anda harus menginvestasikan modal sebanyak mungkin dalam setiap perjudian. Taruhan harus 100%.
Namun tentu saja tidak masuk akal apabila Anda menginvestasikan 100% modal Anda pada setiap permainan judi, karena jika Anda kalah sekali saja, maka modal Anda akan habis meskipun kemungkinannya sangat kecil. Sebab selama Anda berjudi cukup sering, kehilangan uang pasti akan terjadi.
Seseorang mungkin bertanya, karena taruhan 100% tidak masuk akal, bagaimana dengan taruhan 90% atau lebih rendah? Sebenarnya, untuk menyelesaikan masalah ini, kita dapat melakukan percobaan untuk mensimulasikan permainan judi ini dan melihat apa hasil dari setiap taruhan. Seperti yang ditunjukkan pada gambar berikut:
Dari gambar tersebut, kita dapat melihat bahwa ketika kita secara bertahap mengurangi posisi dari 90%, 80%, 70%, 60%, dan 50%, hasil dari taruhan yang sama benar-benar berbeda. Teman-teman yang berhati-hati mungkin sudah memperhatikan bahwa seiring dengan mengecilnya posisi secara bertahap, dana akhir sebenarnya meningkat secara bertahap.
Seseorang mungkin bertanya, apakah lebih baik bertaruh lebih kecil setiap kali, seperti 10%? Anda tidak dapat menghitung setiap rasio taruhan, bukan? Inilah masalah yang ingin dipecahkan oleh rumus Kelly yang terkenal. Dalam statistik, rumus Kelly dapat memaksimalkan tingkat pertumbuhan jangka panjang suatu strategi dengan taruhan berulang yang diharapkan positif dengan menghitung rasio taruhan optimal dalam setiap pertaruhan.
Tidak hanya itu, dengan asumsi bahwa pokok dan pertaruhan dapat dibagi tanpa batas, penggunaan rumus Kelly akan membuat mustahil untuk bangkrut dalam pertaruhan apa pun. Terutama dalam penerapan transaksi keuangan sebenarnya, ini adalah strategi manajemen posisi yang menggabungkan serangan dan pertahanan. Mari kita lihat bagaimana rumus Kelly dihitung, lihat gambar berikut:
- f adalah rasio taruhan optimal dari pokok yang ada
- b adalah peluang, yang juga bisa disebut rasio untung rugi dalam perdagangan.
- p adalah tingkat keberhasilan
- q adalah tingkat kegagalan
Kemudian kita bisa menggunakan rumus Kelly untuk menghitung contoh perjudian di kelas ini. Dengan modal awal 100 yuan, jika tingkat kemenangan 50% dan peluangnya 2, rasio taruhan apa yang harus digunakan agar modalnya paling banyak? menguntungkan? Kecepatan tercepat mencapai 1 juta yuan. Dengan menggunakan rumus Kelly, proses perhitungannya adalah:
(0.5*(2+1) -1)/2=0.25
Persentase kemenangan 50% adalah 0,5, dikalikan dengan odds 2 ditambah 1, kemudian dikurangi 1, dan terakhir dibagi 2. Hasilnya adalah 0,25, yang berarti bahwa dalam setiap taruhan, 25% dari pokok digunakan untuk taruhan. dapat mencapai 1 juta yuan dengan kecepatan tercepat. Kita dapat mensimulasikannya secara manual berdasarkan hasil perhitungan untuk melihat apakah perhitungannya benar.
Gambar di atas adalah hasil simulasi manual. Silakan lihat baris terakhir. Untuk taruhan yang sama, setelah lebih dari 100 putaran, 25% posisi mencapai 1 juta yuan terlebih dahulu. Hasil dari 90%, 80%, 70% dan 60% posisi adalah negatif, yang sepenuhnya menunjukkan bahwa bahkan strategi perdagangan dengan ekspektasi positif akan bangkrut karena manajemen posisi yang salah.
Kita juga dapat melihat bahwa 50% posisi tidak akan rugi maupun untung pada akhirnya, yang juga sejalan dengan hasil hukum bilangan besar. Untuk lebih menggambarkan masalah tersebut, posisi 10% juga ditambahkan selama simulasi manual. Meskipun hasil akhirnya adalah pengembalian positif, efeknya beberapa kali lipat lebih buruk daripada posisi 25%.
Anda telah melihat kekuatan rumus Kelly. Jika Anda memilih posisi pokok 10% dalam aplikasi aktual, maka dalam lebih dari 100 taruhan, pokok Anda akan menjadi lebih dari 30.000. Meskipun keuntungannya sangat besar, Namun, dibandingkan dengan hasil posisi pokok 25%, itu setara dengan tidak menghasilkan uang. Inilah kekuatan pengetahuan.
Jika Anda ingin menggunakan rumus Kelly untuk menghasilkan uang dalam hidup, Anda harus memenuhi persyaratan penerapan rumus Kelly. Tidak diragukan lagi bahwa pertaruhan ini harus berasal dari pasar keuangan. Khususnya dalam perdagangan kuantitatif, dengan menguji ulang data historis, tingkat kemenangan dan peluang yang sesuai dapat dihitung secara kasar.
Tentu saja, penerapan rumus Kelly dalam transaksi keuangan tidaklah sesederhana itu. Masih banyak hal yang perlu dibahas, seperti biaya dana dalam transaksi leverage, ketidakmampuan memisahkan dana dan posisi dalam transaksi riil, dan perbedaan antara tingkat kemenangan dan posisi dalam transaksi. Peluang berubah secara dinamis, dll. Tetapi apa pun yang terjadi, rumus Kelly menunjukkan kepada kita cara menetapkan metode manajemen posisi terbaik.
















