Artikel ini meneruskan siri mengenai perdagangan kuantitatif, yang bermula dengan Panduan Pemula dan Pengenalan Strategi. kedua-dua artikel yang lebih panjang dan lebih terlibat telah sangat popular jadi saya akan meneruskan dalam semangat ini dan memberikan butiran mengenai topik pengujian strategi.
Algoritma backtesting memerlukan pengetahuan tentang banyak bidang, termasuk psikologi, matematik, statistik, pembangunan perisian dan mikrostruktur pasaran / pertukaran. Saya tidak boleh berharap untuk merangkumi semua topik itu dalam satu artikel, jadi saya akan membahagikannya kepada dua atau tiga bahagian yang lebih kecil. Apa yang akan kita bincangkan dalam bahagian ini? Saya akan memulakan dengan menentukan backtesting dan kemudian saya akan menerangkan asas bagaimana ia dijalankan. Kemudian saya akan menerangkan bias yang kita sentuh dalam Panduan Pemula untuk Perdagangan Kuantitatif. Seterusnya saya akan membentangkan perbandingan pelbagai pilihan perisian backtesting yang ada.
Dalam artikel seterusnya kita akan melihat butiran pelaksanaan strategi yang sering jarang disebut atau diabaikan. Kami juga akan mempertimbangkan bagaimana untuk membuat proses backtesting lebih realistik dengan memasukkan idiosyncrasies bursa perdagangan. Kemudian kita akan membincangkan kos transaksi dan bagaimana untuk memodelkannya dengan betul dalam tetapan backtest. Kami akan menamatkan dengan perbincangan mengenai prestasi backtest kami dan akhirnya memberikan contoh strategi kuantum biasa, yang dikenali sebagai perdagangan pasangan pembalikan purata.
Mari kita mulakan dengan membincangkan apa yang backtesting dan mengapa kita harus menjalankan ia dalam dagangan algoritma kami.
Perdagangan algoritma berbeza dengan jenis kelas pelaburan lain kerana kita dapat memberikan jangkaan yang lebih boleh dipercayai mengenai prestasi masa depan daripada prestasi masa lalu, akibat ketersediaan data yang banyak.
Dalam istilah yang mudah, backtesting dilakukan dengan mendedahkan algoritma strategi tertentu anda kepada aliran data kewangan sejarah, yang membawa kepada satu set isyarat perdagangan. Setiap perdagangan (yang kami maksudkan di sini sebagai
Apakah sebab utama untuk menguji semula strategi algoritma?
Backtesting menyediakan pelbagai kelebihan untuk perdagangan algoritma. Walau bagaimanapun, tidak selalu mungkin untuk langsung menguji kembali strategi. Secara umum, apabila kekerapan strategi meningkat, menjadi lebih sukar untuk memodelkan dengan betul kesan struktur mikro pasaran dan bursa. Ini membawa kepada ujian belakang yang kurang boleh dipercayai dan dengan itu penilaian strategi yang dipilih lebih rumit. Ini adalah masalah tertentu di mana sistem pelaksanaan adalah kunci kepada prestasi strategi, seperti dengan algoritma frekuensi ultra tinggi.
Malangnya, pengujian ke belakang penuh dengan segala jenis bias.
Terdapat banyak bias yang boleh menjejaskan prestasi strategi backtested. Malangnya, bias ini cenderung untuk membesarkan prestasi dan bukannya mengurangkannya. Oleh itu, anda harus selalu menganggap backtest sebagai batas atas yang ideal pada prestasi sebenar strategi. Hampir mustahil untuk menghapuskan bias dari perdagangan algoritma jadi tugas kita adalah untuk meminimumkannya sebaik mungkin untuk membuat keputusan yang tepat mengenai strategi algoritma kita.
Terdapat empat bias utama yang ingin saya bincangkan: Bias Optimasi, Bias Lihat ke hadapan, Bias Survival dan Bias Toleransi psikologi.
Ini mungkin yang paling licik daripada semua bias backtest. Ia melibatkan penyesuaian atau pengenalan parameter perdagangan tambahan sehingga prestasi strategi pada set data backtest sangat menarik. Walau bagaimanapun, sekali hidup prestasi strategi boleh berbeza dengan ketara. Nama lain untuk bias ini adalah
Bias pengoptimuman adalah sukar untuk dihapuskan kerana strategi algoritma sering melibatkan banyak parameter.
Salah satu kaedah untuk membantu mengurangkan bias ini adalah dengan melakukan analisis kepekaan. Ini bermakna mengubah parameter secara beransur-ansur dan merangka
Bias melihat ke hadapan diperkenalkan ke dalam sistem backtesting apabila data masa depan secara tidak sengaja dimasukkan ke dalam satu titik dalam simulasi di mana data itu sebenarnya tidak akan tersedia. Jika kita menjalankan backtest secara kronologi dan kita mencapai titik masa N, maka bias melihat ke hadapan berlaku jika data dimasukkan untuk mana-mana titik N + k, di mana k> 0.
Seperti bias pengoptimuman, seseorang mesti sangat berhati-hati untuk mengelakkan pengenalansinya.
Bias kelangsungan hidup adalah fenomena yang sangat berbahaya dan boleh membawa kepada prestasi yang meningkat dengan ketara untuk jenis strategi tertentu. Ia berlaku apabila strategi diuji pada set data yang tidak merangkumi keseluruhan alam semesta aset sebelumnya yang mungkin telah dipilih pada satu ketika tertentu, tetapi hanya mempertimbangkan mereka yang telah "tertahan" hingga masa kini.
Sebagai contoh, pertimbangkan untuk menguji strategi pada pemilihan saham secara rawak sebelum dan selepas kejatuhan pasaran 2001. Beberapa saham teknologi muflis, sementara yang lain berjaya bertahan dan bahkan berkembang maju. Jika kita membatasi strategi ini hanya untuk saham yang berjaya melalui tempoh penarikan pasaran, kita akan memperkenalkan bias kelangsungan hidup kerana mereka telah menunjukkan kejayaan mereka kepada kita. Sebenarnya, ini hanya satu lagi kes bias melihat ke depan, kerana maklumat masa depan dimasukkan ke dalam analisis masa lalu.
Terdapat dua cara utama untuk mengurangkan bias kelangsungan hidup dalam backtest strategi anda:
Kami kini akan mempertimbangkan beberapa fenomena psikologi yang boleh mempengaruhi prestasi perdagangan anda.
Fenomena tertentu ini tidak sering dibincangkan dalam konteks perdagangan kuantitatif. Walau bagaimanapun, ia dibincangkan secara meluas mengenai kaedah perdagangan yang lebih diskresionari. Ia mempunyai pelbagai nama, tetapi saya telah memutuskan untuk menamakannya 'bias toleransi psikologi' kerana ia menangkap intipati masalah. Apabila membuat backtest selama tempoh 5 tahun atau lebih, mudah untuk melihat kurva ekuiti yang cenderung naik, mengira pulangan tahunan kompaun, nisbah Sharpe dan juga ciri penarikan dan berpuas hati dengan hasilnya. Sebagai contoh, strategi mungkin mempunyai penarikan relatif maksimum 25% dan tempoh penarikan maksimum 4 bulan. Ini tidak akan menjadi tidak biasa untuk strategi momentum.
Jika penarikan sejarah 25% atau lebih berlaku dalam backtests, maka dengan semua kebarangkalian anda akan melihat tempoh penarikan yang sama dalam perdagangan langsung. Tempoh penarikan ini secara psikologi sukar untuk ditanggung. Saya telah memerhatikan sendiri bagaimana penarikan lanjutan boleh seperti, dalam persekitaran institusi, dan ia tidak menyenangkan - walaupun backtests mencadangkan tempoh sedemikian akan berlaku.
Pelancongan perisian untuk pengujian balik strategi adalah luas. Penyelesaian berkisar dari perisian canggih gred institusi yang bersepadu sepenuhnya hingga bahasa pengaturcaraan seperti C ++, Python dan R di mana hampir semuanya mesti ditulis dari awal (atau
Sekarang bahawa kita telah disenaraikan kriteria dengan yang kita perlu memilih infrastruktur perisian kita, saya mahu berjalan melalui beberapa pakej yang lebih popular dan bagaimana mereka membandingkan:
Nota: Saya hanya akan memasukkan perisian yang tersedia untuk kebanyakan pengamal runcit dan pemaju perisian, kerana ini adalah pembaca laman web ini. Walaupun perisian lain tersedia seperti alat gred institusi yang lebih, saya merasakan ini terlalu mahal untuk digunakan secara berkesan dalam persekitaran runcit dan saya secara peribadi tidak mempunyai pengalaman dengan mereka.
Perbandingan Perisian Backtesting
Penerangan: Perisian spreadsheet WYSIWYG (what-you-see-is-what-you-get). Sangat meluas dalam industri kewangan. Data dan algoritma berkait rapat.
Pelaksanaan: Ya, Excel boleh dihubungkan ke kebanyakan broker.
Penyesuaian: Makro VBA membolehkan fungsi yang lebih maju dengan mengorbankan penyamaran pelaksanaan.
Kerumitan Strategi: Alat statistik yang lebih maju lebih sukar untuk dilaksanakan seperti strategi dengan beratus-ratus aset.
Pengurangan Bias: Bias Look-ahead mudah dikesan melalui fungsi pencahayaan sel (dengan mengandaikan tidak ada VBA).
Kelajuan Pembangunan: Cepat melaksanakan strategi asas.
Kelajuan pelaksanaan: Kelajuan pelaksanaan yang perlahan - hanya sesuai untuk strategi frekuensi rendah.
Kos: Murah atau percuma (bergantung kepada lesen).
Alternatif: OpenOffice
Penerangan: Kawasan pengaturcaraan yang pada asalnya direka untuk matematik pengkomputeran, fizik dan kejuruteraan. Sangat sesuai untuk operasi vektor dan yang melibatkan aljabar linear numerik. Menyediakan pelbagai pemalam untuk perdagangan kuant. Digunakan secara meluas dalam dana lindung nilai kuantitatif.
Pelaksanaan: Tidak ada keupayaan pelaksanaan asli, MATLAB memerlukan sistem pelaksanaan yang berasingan.
Penyesuaian: Kumpulan besar plugin komuniti untuk hampir semua bidang matematik pengiraan.
Kerumitan Strategi: Banyak kaedah statistik canggih yang sudah tersedia dan diuji dengan baik.
Pengurangan bias: Lebih sukar untuk mengesan bias melihat ke hadapan, memerlukan ujian yang luas.
Kelajuan Pembangunan: Skrip pendek boleh membuat backtest yang canggih dengan mudah.
Kelajuan pelaksanaan: Dengan mengandaikan algoritma vektor / paralel, MATLAB sangat dioptimumkan.
Kos: ~ 1,000 USD untuk lesen.
Alternatif: Octave, SciLab
Penerangan: Bahasa peringkat tinggi yang direka untuk kelajuan pembangunan. Pelbagai perpustakaan untuk hampir semua tugas programatik yang dapat dibayangkan. Mendapat penerimaan yang lebih luas dalam komuniti dana lindung nilai dan bank pelaburan. Tidak begitu pantas seperti C / C ++ untuk kelajuan pelaksanaan.
Pelaksanaan: Plugin Python wujud untuk broker yang lebih besar, seperti Interactive Brokers. Oleh itu backtest dan sistem pelaksanaan semua boleh menjadi sebahagian daripada
Penyesuaian: Python mempunyai komuniti pembangunan yang sangat sihat dan merupakan bahasa yang matang. NumPy / SciPy menyediakan perisian pengkomputeran saintifik dan analisis statistik yang pantas yang relevan untuk perdagangan kuant.
Kerumitan Strategi: Banyak pemalam wujud untuk algoritma utama, tetapi tidak begitu besar komuniti kuant seperti yang ada untuk MATLAB.
Pengurangan bias: Masalah pengurangan bias yang sama wujud seperti untuk bahasa peringkat tinggi. Perlu berhati-hati tentang ujian.
Kelajuan Pembangunan: Kelebihan utama Python adalah kelajuan pembangunan, dengan keupayaan pengujian yang kukuh.
Kelajuan pelaksanaan: Tidak secepat C ++, tetapi komponen pengkomputeran saintifik dioptimumkan dan Python boleh bercakap dengan kod C asli dengan pemalam tertentu.
Kos: Percuma / Sumber Terbuka
Alternatif: Ruby, Erlang, Haskell
Penerangan: Persekitaran yang direka untuk kaedah statistik canggih dan analisis siri masa. Pelbagai set alat statistik, ekonometri dan grafik asli. Komuniti pembangun yang besar.
Pelaksanaan: R mempunyai pemalam untuk beberapa broker, khususnya Interactive Brokers.
Penyesuaian: R boleh disesuaikan dengan sebarang pakej, tetapi kekuatannya terletak di domain statistik / ekonometri.
Kerumitan Strategi: Kebanyakan berguna jika menjalankan strategi ekonometrik, statistik atau pembelajaran mesin kerana pemalam yang tersedia.
Pengurangan bias: Kemungkinan bias yang sama untuk mana-mana bahasa peringkat tinggi seperti Python atau C ++. Oleh itu, ujian mesti dilakukan.
Kelajuan Pembangunan: R adalah pantas untuk menulis strategi berdasarkan kaedah statistik.
Kelajuan pelaksanaan: R lebih perlahan daripada C ++, tetapi tetap relatif dioptimumkan untuk operasi vektor (seperti dengan MATLAB).
Kos: Percuma / Sumber Terbuka
Alternatif: SPSS, Stata
Penerangan: Bahasa peringkat tinggi yang matang yang direka untuk kelajuan pelaksanaan. Pelbagai perpustakaan kewangan kuantitatif dan berangka. Lebih sukar untuk debug dan sering mengambil masa yang lebih lama untuk dilaksanakan daripada Python atau MATLAB. Sangat lazim di kedua-dua bahagian beli dan jual.
Pelaksanaan: Kebanyakan API pembrokeran ditulis dalam C ++ dan Java. Oleh itu banyak pemalam wujud.
Penyesuaian: C / C ++ membolehkan akses langsung ke memori asas, oleh itu strategi frekuensi ultra tinggi dapat dilaksanakan.
Kerumitan Strategi: C ++ STL menyediakan pelbagai algoritma yang dioptimumkan.
Bias Minimisation: Bias Look-ahead boleh menjadi rumit untuk dihapuskan, tetapi tidak lebih sukar daripada bahasa peringkat tinggi yang lain.
Kelajuan Pembangunan: C ++ agak banyak perkataan berbanding Python atau MATLAB untuk algoritma yang sama.
Kelajuan pelaksanaan: C / C ++ mempunyai kelajuan pelaksanaan yang sangat cepat dan boleh dioptimumkan dengan baik untuk seni bina pengkomputeran tertentu.
Kos: Pelengkap yang berbeza: Linux / GCC adalah percuma, MS Visual Studio mempunyai lesen yang berbeza.
Alternatif: C #, Java, Scala
Strategi yang berbeza akan memerlukan pakej perisian yang berbeza. Strategi HFT dan UHFT akan ditulis dalam C / C ++ (hari ini mereka sering dijalankan pada GPU dan FPGA), sedangkan strategi ekuiti arah frekuensi rendah mudah dilaksanakan di TradeStation, kerana sifat
Saya lebih suka Python kerana ia menyediakan tahap penyesuaian yang tepat, kelajuan pembangunan, keupayaan ujian dan kelajuan pelaksanaan untuk keperluan dan strategi saya. Jika saya memerlukan sesuatu yang lebih cepat, saya boleh
Dalam beberapa artikel seterusnya mengenai backtesting, kita akan melihat beberapa isu tertentu yang berkaitan dengan pelaksanaan sistem backtesting perdagangan algoritma, serta cara menggabungkan kesan bursa perdagangan.