Sukses Backtesting dari Strategi Perdagangan Algoritma - Bagian I

Penulis:Kebaikan, Dibuat: 2019-03-20 17:00:16, Diperbarui:

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.

Apa itu Backtesting?

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 round-trip dari dua sinyal) akan memiliki keuntungan atau kerugian yang terkait. akumulasi keuntungan / kerugian ini selama durasi backtest strategi Anda akan menyebabkan total keuntungan dan kerugian (juga dikenal sebagai P&L atau PnL). Itulah esensi dari ide, meskipun tentu saja setan selalu ada dalam detail!

Apa alasan utama untuk backtesting strategi algoritmik?

  • Filtrasi - Jika Anda ingat dari artikel tentang Identifikasi Strategi, tujuan kami pada tahap penelitian awal adalah untuk menyiapkan pipa strategi dan kemudian menyaring setiap strategi yang tidak memenuhi kriteria tertentu.
  • Pemodelan - Backtesting memungkinkan kita untuk menguji (dengan aman!) model baru dari fenomena pasar tertentu, seperti biaya transaksi, routing pesanan, latensi, likuiditas atau masalah mikrostruktur pasar lainnya.
  • Optimasi - Meskipun optimasi strategi penuh dengan bias, backtesting memungkinkan kita untuk meningkatkan kinerja strategi dengan memodifikasi kuantitas atau nilai parameter yang terkait dengan strategi tersebut dan menghitung ulang kinerjanya.
  • Verifikasi - Strategi kami seringkali berasal dari luar, melalui pipa strategi kami. Backtesting strategi memastikan bahwa itu tidak telah dilaksanakan dengan salah. Meskipun kita jarang akan memiliki akses ke sinyal yang dihasilkan oleh strategi eksternal, kita sering akan memiliki akses ke metrik kinerja seperti rasio Sharpe dan karakteristik penarikan. Dengan demikian kita dapat membandingkannya dengan implementasi kita sendiri.

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.

Bias yang Mempengaruhi Strategi Backtest

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.

Bias Optimasi

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 curve fitting atau data-snooping bias.

Bias optimasi sulit untuk dihilangkan karena strategi algoritmik sering melibatkan banyak parameter. Parameter dalam hal ini mungkin kriteria masuk/keluar, periode look-back, periode rata-rata (yaitu parameter perataan rata-rata bergerak) atau frekuensi pengukuran volatilitas. Bias optimasi dapat diminimalkan dengan menjaga jumlah parameter menjadi minimum dan meningkatkan jumlah titik data dalam set pelatihan.

Salah satu metode untuk membantu mengurangi bias ini adalah dengan melakukan analisis sensitivitas. Ini berarti mengubah parameter secara inkremental dan memetakan permukaan kinerja. Mendengar, penalaran mendasar untuk pilihan parameter harus, dengan semua faktor lainnya dipertimbangkan, menyebabkan permukaan parameter yang lebih halus. Jika Anda memiliki permukaan kinerja yang sangat gelisah, itu sering berarti bahwa parameter tidak mencerminkan fenomena dan merupakan artefak dari data uji. Ada literatur yang luas tentang algoritma optimasi multidimensi dan ini adalah bidang penelitian yang sangat aktif. Saya tidak akan tinggal di sini, tetapi simpan di belakang pikiran Anda ketika Anda menemukan strategi dengan backtest yang fantastis!

Perselisihan Mengenai Masa Depan

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:

  • Bug Teknis - Array/vektor dalam kode sering memiliki iterator atau variabel indeks. Penghapusan indeks yang salah dapat menyebabkan bias melihat ke depan dengan memasukkan data pada N + k untuk k non-nol.
  • Perhitungan Parameter - Contoh umum lain dari bias melihat ke depan terjadi ketika menghitung parameter strategi optimal, seperti dengan regresi linier antara dua deret waktu.
  • Maxima/Minimum - Strategi perdagangan tertentu menggunakan nilai ekstrim dalam periode waktu apa pun, seperti menggabungkan harga tinggi atau rendah dalam data OHLC. Namun, karena nilai maksimum/minimal ini hanya dapat dihitung pada akhir periode waktu, bias melihat ke depan diperkenalkan jika nilai-nilai ini digunakan -selama- periode saat ini.

Seperti bias optimasi, seseorang harus sangat berhati-hati untuk menghindari pengenalannya.

Bias untuk bertahan hidup

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:

  • Survival Bias Free Datasets - Dalam kasus data ekuitas, adalah mungkin untuk membeli dataset yang mencakup entitas yang tidak terdaftar, meskipun mereka tidak murah dan hanya cenderung digunakan oleh perusahaan institusional.
  • Penggunaan Data yang Lebih Baru - Dalam kasus ekuitas, menggunakan set data yang lebih baru mengurangi kemungkinan bahwa pemilihan saham yang dipilih diberi bobot untuk survivor, hanya karena ada kemungkinan lebih kecil dari keseluruhan saham yang dihapus dalam periode waktu yang lebih singkat. Seseorang juga dapat mulai membangun dataset bebas bias kelangsungan hidup pribadi dengan mengumpulkan data dari titik saat ini dan seterusnya. Setelah 3-4 tahun, Anda akan memiliki seperangkat data bebas bias kelangsungan hidup yang solid untuk menguji kembali strategi lebih lanjut.

Kita sekarang akan mempertimbangkan fenomena psikologis tertentu yang dapat mempengaruhi kinerja perdagangan Anda.

Bias Toleransi Psikologis

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.

Paket Perangkat Lunak untuk Backtesting

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 plugin yang sesuai diperoleh). Sebagai pedagang kuantitas kami tertarik pada keseimbangan untuk dapat memiliki tumpukan teknologi perdagangan kami versus kecepatan dan keandalan metodologi pengembangan kami. Berikut pertimbangan utama untuk pilihan perangkat lunak:

  • Kemampuan Pemrograman - Pilihan lingkungan akan sebagian besar datang ke kemampuan Anda untuk memprogram perangkat lunak. Saya akan berpendapat bahwa memiliki kendali atas tumpukan total akan memiliki efek yang lebih besar pada P&L jangka panjang Anda daripada outsourcing sebanyak mungkin ke perangkat lunak vendor. Ini karena risiko negatif memiliki bug eksternal atau idiosinkrasia yang tidak dapat Anda perbaiki dalam perangkat lunak vendor, yang sebaliknya akan dengan mudah diperbaiki jika Anda memiliki lebih banyak kontrol atas tumpukan tech Anda. Anda juga ingin lingkungan yang mencapai keseimbangan yang tepat antara produktivitas, ketersediaan perpustakaan dan kecepatan eksekusi. Saya membuat rekomendasi pribadi saya sendiri di bawah ini.
  • Kemampuan Eksekusi / Interaksi Broker - Perangkat lunak backtesting tertentu, seperti Tradestation, terhubung langsung dengan broker. Saya bukan penggemar pendekatan ini karena mengurangi biaya transaksi sering merupakan komponen besar untuk mendapatkan rasio Sharpe yang lebih tinggi. Jika Anda terikat dengan broker tertentu (dan Tradestation memaksa Anda untuk melakukan ini), maka Anda akan mengalami kesulitan untuk beralih ke perangkat lunak baru (atau broker baru) jika diperlukan. Broker interaktif menyediakan API yang kuat, meskipun dengan antarmuka yang sedikit tumpul.
  • Kustomisasi - Lingkungan seperti MATLAB atau Python memberi Anda banyak fleksibilitas saat membuat strategi algo karena mereka menyediakan perpustakaan fantastis untuk hampir semua operasi matematika yang dapat dibayangkan, tetapi juga memungkinkan kustomisasi ekstensif jika diperlukan.
  • Kompleksitas Strategi - Perangkat lunak tertentu tidak cocok untuk pemecahan angka berat atau kompleksitas matematis. Excel adalah salah satu perangkat lunak tersebut. Meskipun bagus untuk strategi yang lebih sederhana, ia tidak benar-benar dapat mengatasi banyak aset atau algoritma yang lebih rumit, dengan kecepatan.
  • Bias Minimisation - Apakah perangkat lunak atau data tertentu lebih cocok untuk bias perdagangan? Anda perlu memastikan bahwa jika Anda ingin membuat semua fungsi sendiri, bahwa Anda tidak memperkenalkan bug yang dapat menyebabkan bias.
  • Kecepatan Pengembangan - Seseorang seharusnya tidak perlu menghabiskan berbulan-bulan untuk menerapkan mesin backtest. Prototyping hanya harus memakan waktu beberapa minggu. Pastikan bahwa perangkat lunak Anda tidak menghambat kemajuan Anda secara besar-besaran, hanya untuk meraih beberapa poin persentase tambahan kecepatan eksekusi. C ++ adalah elephant in the room di sini!
  • Kecepatan Eksekusi - Jika strategi Anda sepenuhnya bergantung pada ketepatan waktu eksekusi (seperti dalam HFT / UHFT) maka bahasa seperti C atau C ++ akan diperlukan.
  • Biaya - Banyak lingkungan perangkat lunak yang dapat Anda programkan strategi perdagangan algoritmik dengan benar-benar gratis dan open source. Bahkan, banyak hedge fund menggunakan perangkat lunak open source untuk seluruh tumpukan perdagangan algo mereka. Selain itu, Excel dan MATLAB keduanya relatif murah dan bahkan ada alternatif gratis untuk masing-masing.

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

MS Excel

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

MATLAB

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

Python

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

R

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

C++

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 all in one dari perangkat lunak / broker.

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 drop in ke C ++ langsung dari program Python saya. Salah satu metode yang disukai oleh banyak pedagang kuant adalah untuk membuat prototipe strategi mereka di Python dan kemudian mengkonversi bagian eksekusi yang lebih lambat ke C ++ dengan cara iteratif. Akhirnya seluruh algoritma ditulis dalam C ++ dan dapat dibiarkan sendiri untuk berdagang !

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.


Lebih banyak