Artikel ini melanjutkan seri tentang perdagangan kuantitatif, yang dimulai dengan Panduan Pemula dan Identifikasi Strategi.
Algorithmic backtesting membutuhkan pengetahuan tentang banyak bidang, termasuk psikologi, matematika, statistik, pengembangan perangkat lunak dan mikrostruktur pasar / pertukaran. Saya tidak bisa berharap untuk mencakup semua topik tersebut dalam satu artikel, jadi saya akan membagi mereka menjadi dua atau tiga bagian yang lebih kecil. Apa yang akan kita bahas di bagian ini? Saya akan mulai dengan mendefinisikan backtesting dan kemudian saya akan menjelaskan dasar-dasar bagaimana hal itu dilakukan. Kemudian saya akan menjelaskan bias yang kami bahas dalam Beginner's Guide to Quantitative Trading. Selanjutnya saya akan menyajikan perbandingan berbagai pilihan perangkat lunak backtesting yang tersedia.
Dalam artikel berikutnya, kita akan melihat detail implementasi strategi yang seringkali jarang disebutkan atau diabaikan. Kita juga akan mempertimbangkan bagaimana membuat proses backtesting lebih realistis dengan memasukkan idiosinkrasis dari bursa perdagangan. Kemudian kita akan membahas biaya transaksi dan bagaimana memodelkannya dengan benar dalam pengaturan backtest.
Mari kita mulai dengan membahas apa backtesting dan mengapa kita harus melakukannya dalam perdagangan algoritmik kita.
Perdagangan algoritmik berbeda dari jenis kelas investasi lainnya karena kita dapat memberikan harapan yang lebih dapat diandalkan tentang kinerja masa depan dari kinerja masa lalu, sebagai akibat dari ketersediaan data yang melimpah.
Dalam istilah sederhana, backtesting dilakukan dengan mengekspos algoritma strategi tertentu Anda ke aliran data keuangan historis, yang mengarah ke serangkaian sinyal perdagangan. Setiap perdagangan (yang akan kami maksudkan di sini sebagai
Apa alasan utama untuk backtesting strategi algoritmik?
Backtesting memberikan sejumlah keuntungan untuk perdagangan algoritmik. Namun, tidak selalu mungkin untuk langsung backtest strategi. Secara umum, karena frekuensi strategi meningkat, menjadi lebih sulit untuk memodelkan secara benar efek mikrostruktur pasar dan bursa. Hal ini menyebabkan backtest kurang dapat diandalkan dan dengan demikian evaluasi strategi yang dipilih lebih rumit. Ini adalah masalah khusus di mana sistem eksekusi adalah kunci kinerja strategi, seperti halnya algoritma frekuensi ultra tinggi.
Sayangnya, backtesting penuh dengan bias dari segala jenis.
Ada banyak bias yang dapat mempengaruhi kinerja strategi backtested. Sayangnya, bias ini memiliki kecenderungan untuk membesarkan kinerja daripada mengurangi dari itu. Oleh karena itu Anda harus selalu menganggap backtest sebagai batas atas yang ideal pada kinerja sebenarnya dari strategi. Hampir tidak mungkin untuk menghilangkan bias dari perdagangan algoritmik sehingga tugas kita adalah meminimalkannya sebaik mungkin untuk membuat keputusan berdasarkan informasi tentang strategi algoritmik kita.
Ada empat bias utama yang ingin saya bahas: Bias Optimasi, Bias Menatap ke Depan, Bias Keberlanjutan dan Bias Toleransi Psikologis.
Ini mungkin yang paling licik dari semua bias backtest. Ini melibatkan penyesuaian atau pengenalan parameter perdagangan tambahan sampai kinerja strategi pada set data backtest sangat menarik. Namun, sekali hidup kinerja strategi dapat sangat berbeda. Nama lain untuk bias ini adalah
Bias optimasi sulit untuk dihilangkan karena strategi algoritmik sering melibatkan banyak parameter.
Salah satu metode untuk membantu mengurangi bias ini adalah dengan melakukan analisis sensitivitas. Ini berarti mengubah parameter secara inkremental dan memetakan
Jika kita menjalankan backtest secara kronologis dan kita mencapai titik waktu N, maka bias melihat ke depan terjadi jika data dimasukkan untuk setiap titik N + k, di mana k>0. Kesalahan bias melihat ke depan dapat sangat halus. Berikut adalah tiga contoh bagaimana bias melihat ke depan dapat diperkenalkan:
Seperti bias optimasi, seseorang harus sangat berhati-hati untuk menghindari pengenalannya.
Bias kelangsungan hidup adalah fenomena yang sangat berbahaya dan dapat menyebabkan kinerja yang meningkat secara signifikan untuk jenis strategi tertentu. Hal ini terjadi ketika strategi diuji pada kumpulan data yang tidak mencakup seluruh alam semesta aset sebelumnya yang mungkin telah dipilih pada titik waktu tertentu, tetapi hanya mempertimbangkan mereka yang telah "tertahan" hingga saat ini.
Sebagai contoh, pertimbangkan untuk menguji strategi pada seleksi acak saham sebelum dan setelah jatuhnya pasar tahun 2001. Beberapa saham teknologi bangkrut, sementara yang lain berhasil bertahan dan bahkan makmur. Jika kita membatasi strategi ini hanya untuk saham yang berhasil melewati periode penurunan pasar, kita akan memperkenalkan bias kelangsungan hidup karena mereka telah menunjukkan keberhasilan mereka kepada kita.
Ada dua cara utama untuk mengurangi bias kelangsungan hidup dalam backtest strategi Anda:
Kita sekarang akan mempertimbangkan fenomena psikologis tertentu yang dapat mempengaruhi kinerja perdagangan Anda.
Fenomena tertentu ini tidak sering dibahas dalam konteks perdagangan kuantitatif. Namun, ini dibahas secara ekstensif dalam hal metode perdagangan yang lebih diskresioner. Ini memiliki berbagai nama, tetapi saya telah memutuskan untuk menyebutnya bias toleransi psikologis karena menangkap esensi masalah. Ketika membuat backtest selama periode 5 tahun atau lebih, mudah untuk melihat kurva ekuitas yang cenderung naik, menghitung komposit pengembalian tahunan, rasio Sharpe dan bahkan karakteristik penarikan dan puas dengan hasilnya. Sebagai contoh, strategi mungkin memiliki penarikan relatif maksimum 25% dan durasi penarikan maksimum 4 bulan. Ini tidak akan tidak khas untuk strategi momentum. Namun, mudah untuk meyakinkan diri sendiri bahwa mudah untuk mentolerir periode kerugian seperti itu karena gambaran keseluruhan cerah.
Jika penarikan historis 25% atau lebih terjadi dalam backtest, maka kemungkinan besar Anda akan melihat periode penarikan yang sama dalam perdagangan langsung. Periode penarikan ini secara psikologis sulit untuk bertahan. Saya telah mengamati secara langsung seperti apa penarikan yang diperpanjang, dalam pengaturan institusional, dan itu tidak menyenangkan - bahkan jika backtest menunjukkan periode seperti itu akan terjadi. Alasan saya menyebutnya bias adalah karena seringkali strategi yang akan berhasil dihentikan dari perdagangan selama periode penarikan yang diperpanjang dan dengan demikian akan menyebabkan kinerja yang kurang dibandingkan dengan backtest. Dengan demikian, meskipun strategi bersifat algoritmik, faktor psikologis masih dapat memiliki pengaruh yang signifikan pada profitabilitas.
Pemandangan perangkat lunak untuk backtesting strategi sangat luas. Solusi berkisar dari perangkat lunak canggih tingkat institusi yang terintegrasi sepenuhnya hingga bahasa pemrograman seperti C ++, Python dan R di mana hampir semuanya harus ditulis dari awal (atau
Sekarang kita telah mendaftarkan kriteria yang kita butuhkan untuk memilih infrastruktur perangkat lunak kita, saya ingin berjalan melalui beberapa paket yang lebih populer dan bagaimana mereka membandingkan:
Catatan: Saya hanya akan menyertakan perangkat lunak yang tersedia untuk sebagian besar praktisi ritel dan pengembang perangkat lunak, karena ini adalah pembaca situs. Sementara perangkat lunak lain tersedia seperti alat kelas yang lebih institusional, saya merasa ini terlalu mahal untuk digunakan secara efektif dalam pengaturan ritel dan saya secara pribadi tidak memiliki pengalaman dengan mereka.
Perbandingan Perangkat Lunak Backtesting
Deskripsi: Perangkat lunak spreadsheet WYSIWYG (what-you-see-is-what-you-get). Sangat luas di industri keuangan. Data dan algoritma terikat erat.
Eksekusi: Ya, Excel dapat dihubungkan ke sebagian besar broker.
Kustomisasi: Makro VBA memungkinkan fungsionalitas yang lebih maju dengan mengorbankan menyembunyikan implementasi.
Kompleksitas Strategi: Alat statistik yang lebih canggih lebih sulit untuk diimplementasikan seperti strategi dengan ratusan aset.
Bias Minimisation: Bias Look-ahead mudah dideteksi melalui fungsi cell-highlighting (dengan asumsi tidak ada VBA).
Kecepatan Pengembangan: Cepat menerapkan strategi dasar.
Kecepatan eksekusi: Kecepatan eksekusi lambat - hanya cocok untuk strategi frekuensi rendah.
Biaya: Murah atau gratis (tergantung lisensi).
Alternatif: OpenOffice
Deskripsi: Lingkungan pemrograman yang awalnya dirancang untuk matematika komputasi, fisika dan teknik. Sangat cocok untuk operasi vektor dan yang melibatkan aljabar linier numerik. Menyediakan berbagai plugin untuk perdagangan kuantitatif. Dalam penggunaan luas dalam dana lindung nilai kuantitatif.
Eksekusi: Tidak ada kemampuan eksekusi asli, MATLAB membutuhkan sistem eksekusi terpisah.
Kustomisasi: Banyaknya plugin komunitas untuk hampir semua bidang matematika komputasi.
Kompleksitas Strategi: Banyak metode statistik canggih yang sudah tersedia dan diuji dengan baik.
Peminimalan bias: Lebih sulit untuk mendeteksi bias melihat ke depan, membutuhkan pengujian ekstensif.
Kecepatan Pengembangan: Skrip pendek dapat membuat backtest yang canggih dengan mudah.
Kecepatan pelaksanaan: Dengan asumsi algoritma vektorisasi/paralelisasi, MATLAB sangat dioptimalkan.
Biaya: ~ 1.000 USD untuk lisensi.
Octave, SciLab
Deskripsi: Bahasa tingkat tinggi yang dirancang untuk kecepatan pengembangan. Berbagai perpustakaan untuk hampir semua tugas program yang dapat dibayangkan. Mendapatkan penerimaan yang lebih luas di komunitas hedge fund dan bank investasi. Tidak secepat C / C ++ untuk kecepatan eksekusi.
Eksekusi: Plugin Python ada untuk broker yang lebih besar, seperti Interactive Brokers.
Kustomisasi: Python memiliki komunitas pengembangan yang sangat sehat dan merupakan bahasa yang matang.
Kompleksitas Strategi: Banyak plugin yang ada untuk algoritma utama, tetapi tidak cukup besar komunitas kuantum seperti yang ada untuk MATLAB.
Bias Minimisation: Masalah minimizasi bias yang sama ada untuk bahasa tingkat tinggi.
Kecepatan Pengembangan: Keuntungan utama Python adalah kecepatan pengembangan, dengan kemampuan pengujian yang kuat.
Kecepatan Eksekusi: Tidak cukup cepat seperti C ++, tetapi komponen komputasi ilmiah dioptimalkan dan Python dapat berbicara dengan kode C asli dengan plugin tertentu.
Biaya: Gratis / Open Source
Alternatif: Ruby, Erlang, Haskell
Deskripsi: Lingkungan yang dirancang untuk metode statistik canggih dan analisis deret waktu.
Eksekusi: R memiliki plugin untuk beberapa broker, khususnya Interactive Brokers.
Kustomisasi: R dapat disesuaikan dengan paket apa pun, tetapi kekuatannya terletak di domain statistik / ekonometri.
Kompleksitas Strategi: Sebagian besar berguna jika melakukan strategi ekonometrik, statistik atau pembelajaran mesin karena plugin yang tersedia.
Bias Minimisation: Kemungkinan bias tingkat yang sama untuk bahasa tingkat tinggi seperti Python atau C ++. Dengan demikian pengujian harus dilakukan.
Kecepatan Pengembangan: R cepat untuk menulis strategi berdasarkan metode statistik.
Kecepatan Eksekusi: R lebih lambat dari C ++, tetapi tetap relatif dioptimalkan untuk operasi vektor (seperti dengan MATLAB).
Biaya: Gratis / Open Source
Alternatif: SPSS, Stata
Deskripsi: Bahasa tingkat tinggi yang matang yang dirancang untuk kecepatan eksekusi. Berbagai keuangan kuantitatif dan perpustakaan numerik. Lebih sulit untuk debug dan sering membutuhkan waktu lebih lama untuk diimplementasikan daripada Python atau MATLAB. Sangat umum di kedua sisi beli dan jual.
Eksekusi: Sebagian besar API broker ditulis dalam C ++ dan Java.
Kustomisasi: C / C ++ memungkinkan akses langsung ke memori yang mendasari, sehingga strategi frekuensi ultra-tinggi dapat diimplementasikan.
Kompleksitas Strategi: C ++ STL menyediakan berbagai algoritma yang dioptimalkan. Hampir setiap algoritma matematika khusus memiliki implementasi C / C ++ sumber terbuka gratis di web.
Bias Minimisation: Bias Look-ahead bisa sulit untuk dihilangkan, tetapi tidak lebih sulit daripada bahasa tingkat tinggi lainnya.
Kecepatan Pengembangan: C++ cukup banyak kata dibandingkan dengan Python atau MATLAB untuk algoritma yang sama.
Kecepatan Eksekusi: C/C++ memiliki kecepatan eksekusi yang sangat cepat dan dapat dioptimalkan dengan baik untuk arsitektur komputasi tertentu.
Biaya: Berbagai compiler: Linux/GCC gratis, MS Visual Studio memiliki lisensi yang berbeda.
Alternatif: C#, Java, Scala
Strategi HFT dan UHFT akan ditulis dalam C / C ++ (saat ini mereka sering dilakukan pada GPU dan FPGA), sedangkan strategi ekuitas arah frekuensi rendah mudah diimplementasikan di TradeStation, karena sifat
Saya pribadi lebih suka Python karena menyediakan tingkat kustomisasi yang tepat, kecepatan pengembangan, kemampuan pengujian dan kecepatan eksekusi untuk kebutuhan dan strategi saya. Jika saya membutuhkan sesuatu yang lebih cepat, saya dapat
Dalam beberapa artikel berikutnya tentang backtesting kita akan melihat beberapa masalah khusus seputar implementasi sistem backtesting perdagangan algoritmik, serta bagaimana menggabungkan efek dari bursa perdagangan.