Pos ini sesuai untuk mereka yang baru memulakan perdagangan kuantitatif serta mereka yang mempunyai pengalaman dengan kawasan ini.
Ia juga melihat pelbagai jenis mekanisme backtesting serta landskap perisian yang melaksanakan pendekatan ini. Kemudian kita membincangkan sama ada ia bernilai membina backtester anda sendiri, walaupun dengan kelaziman alat sumber terbuka yang tersedia hari ini.
Akhirnya, kita membincangkan ins dan outs sistem backtesting yang didorong oleh peristiwa, topik yang saya telah membincangkan dengan kerap di QuantStart dalam catatan sebelumnya.
Ujian belakang adalah penerapan peraturan strategi perdagangan kepada satu set data harga sejarah. Iaitu, jika kita menentukan satu set mekanisme untuk masuk dan keluar ke dalam portfolio aset, dan menerapkan peraturan tersebut kepada data harga sejarah aset tersebut, kita boleh cuba memahami prestasi ini "strategi perdagangan" yang mungkin telah dicapai pada masa lalu.
Ia pernah dikatakan bahawa
Backtest akhirnya membantu kita memutuskan sama ada ia bernilai hidup-dagang satu set peraturan strategi. Ia memberikan kita idea bagaimana strategi mungkin telah dilakukan pada masa lalu. Pada dasarnya ia membolehkan kita menapis peraturan strategi yang buruk sebelum kita memperuntukkan mana-mana modal sebenar.
Ia adalah mudah untuk menjana backtests. Malangnya hasil backtest tidak hasil dagangan hidup. Mereka adalah model realiti. Model yang biasanya mengandungi banyak andaian.
Terdapat dua jenis utama backtest perisian - sistem
Apabila merancang perisian backtesting, selalu ada pertukaran antara ketepatan dan kerumitan pelaksanaan.
Terdapat banyak perangkap yang berkaitan dengan backtesting. Kesemuanya berkaitan dengan fakta bahawa backtesting hanyalah model realiti.
Terdapat beberapa isu yang lebih halus dengan backtesting yang tidak dibincangkan selalunya, tetapi masih sangat penting untuk dipertimbangkan.
Banyak telah ditulis mengenai masalah dengan backtesting. Tucker Balch dan Ernie Chan kedua-duanya membincangkan isu-isu ini secara panjang lebar.
For-Loop Backtester adalah jenis sistem backtesting yang paling mudah dan varian yang paling sering dilihat dalam catatan blog kuant, semata-mata untuk kesederhanaan dan ketelusan.
Pada dasarnya sistem For-Loop berulang setiap hari dagangan (atau bar OHLC), melakukan beberapa pengiraan yang berkaitan dengan harga aset (s), seperti Purata Bergerak penutupan, dan kemudian pergi panjang atau pendek aset tertentu (sering pada harga penutupan yang sama, tetapi kadang-kadang sehari selepas).
Berikut adalah kod palsu untuk algoritma sedemikian:
for each trading bar:
do_something_with_prices();
buy_sell_or_hold_something();
next_bar();PythonCopy
Seperti yang anda lihat reka bentuk sistem sedemikian adalah sangat mudah. ini menjadikannya menarik untuk mendapatkan
For-Loop backtesters adalah mudah dilaksanakan dalam hampir mana-mana bahasa pengaturcaraan dan sangat cepat untuk dilaksanakan.
Kelemahan utama dengan backtesters For-Loop adalah bahawa mereka agak tidak realistik. Mereka sering tidak mempunyai keupayaan kos transaksi kecuali ditambahkan secara khusus. Biasanya pesanan dipenuhi dengan harga titik tengah. Oleh itu, sering tidak ada perakaunan untuk penyebaran.
Terdapat penggunaan semula kod yang minimum antara sistem backtesting dan sistem perdagangan langsung. Ini bermaksud bahawa kod sering perlu ditulis dua kali, memperkenalkan kemungkinan lebih banyak bug.
For-Loop backtesters cenderung kepada Look-Ahead Bias, kerana bug dengan pengindeksan.
For-Loop backtesters benar-benar harus digunakan semata-mata sebagai mekanisme penapisan. Anda boleh menggunakannya untuk menghapuskan strategi yang jelas buruk, tetapi anda harus tetap skeptis terhadap prestasi yang kuat. Penyelidikan lanjut sering diperlukan. Strategi jarang melakukan lebih baik dalam perdagangan langsung daripada yang mereka lakukan dalam backtests!
Event-Driven Backtesters terletak di hujung spektrum yang lain. Mereka jauh lebih mirip dengan pelaksanaan infrastruktur perdagangan langsung. Oleh itu, mereka sering lebih realistik dalam perbezaan antara prestasi perdagangan yang diuji dan hidup.
Sistem sedemikian dijalankan dalam gelung
Apabila peristiwa tertentu dikenal pasti, ia diarahkan ke modul yang sesuai di infrastruktur, yang mengendalikan peristiwa dan kemudian berpotensi menjana peristiwa baru yang kembali ke barisan.
Kod palsu untuk sistem backtesting Event-Driven adalah seperti berikut:
while event_queue_isnt_empty():
event = get_latest_event_from_queue();
if event.type == "tick":
strategy.calculate_trading_signals(event);
else if event.type == "signal":
portfolio.handle_signal(event);
else if event.type == "order":
portfolio.handle_order(event);
else if event.type == "fill":
portfolio.handle_fill(event)
sleep(600); # Sleep for, say, 10 minsPythonCopy
Seperti yang anda lihat terdapat ketergantungan yang besar pada modul pengendali portfolio. modul sedemikian adalah
Terdapat banyak kelebihan untuk menggunakan backtester Event-Driven:
Walaupun kelebihan adalah jelas, terdapat juga beberapa kelemahan yang kuat untuk menggunakan sistem yang rumit:
Dalam bahagian ini kita akan mempertimbangkan perisian (baik sumber terbuka dan komersial) yang wujud untuk kedua-dua sistem For-Loop dan Event-Driven.
Untuk para backtester For-Loop, bahasa / perisian pengaturcaraan utama yang digunakan termasuk Python (dengan perpustakaan Pandas), R (dan perpustakaan quantmod) dan MatLab. Terdapat banyak cuplikan kod yang boleh didapati di blog kuant. Senarai besar blog tersebut boleh didapati di Quantocracy.
Pasaran untuk sistem Event-Driven jauh lebih besar, kerana pelanggan/pengguna sering mahu perisian itu mampu melakukan backtesting dan perdagangan langsung dalam satu pakej.
Penawaran komersial yang mahal termasuk Deltix dan QuantHouse. Mereka sering dijumpai di dana lindung nilai kuant, pejabat keluarga dan firma perdagangan alat peraga.
Sistem backtesting berasaskan awan dan sistem perdagangan langsung agak baru. Quantopian adalah contoh persediaan berasaskan web yang matang untuk kedua-dua backtesting dan perdagangan langsung.
Kuant institusi sering juga membina perisian sendiri di dalam rumah.Ini disebabkan oleh gabungan kekangan peraturan, hubungan pelabur / pelaporan dan audit.
Quant runcit mempunyai pilihan antara menggunakan pendekatan
Dari segi perisian sumber terbuka, terdapat banyak perpustakaan yang tersedia. Mereka kebanyakannya ditulis dalam Python (untuk sebab-sebab yang akan saya jelaskan di bawah) dan termasuk Zipline (Quantopian), PyAlgoTrade, PySystemTrade (Rob Carver / Investment Idiocy) dan QSTrader (Backtester QuantStart
Salah satu aspek yang paling penting, bagaimanapun, adalah bahawa tidak kira mana perisian yang anda gunakan akhirnya, ia mesti dipasangkan dengan sumber data kewangan yang sama kukuh.
Walaupun perisian menguruskan perincian untuk kita, ia menyembunyikan kita dari banyak butiran pelaksanaan yang sering penting apabila kita ingin mengembangkan kerumitan strategi perdagangan kita.
Walaupun mempunyai latar belakang sebagai pembangun perisian kuantitatif saya tidak berminat secara peribadi dalam
Kita hanya perlu berminat dengan apa yang berfungsi. Berikut adalah beberapa pesaing utama:
Python adalah bahasa pengaturcaraan yang sangat mudah dipelajari dan sering bahasa pertama yang orang bersentuhan dengan apabila mereka memutuskan untuk belajar pengaturcaraan. Ia mempunyai perpustakaan alat standard yang boleh membaca dalam hampir semua bentuk data yang dapat dibayangkan dan bercakap dengan mana-mana
Ia mempunyai beberapa perpustakaan kuantum / sains data / pembelajaran mesin (ML) yang luar biasa dalam NumPy, SciPy, Pandas, Scikit-Learn, Matplotlib, PyMC3 dan Statsmodels.
Ia sangat baik untuk membina kedua-dua sistem backtesting For-Loop dan Event-Driven. Malah, ia mungkin salah satu daripada bahasa yang hanya membenarkan penyelidikan hujung ke hujung, backtesting, penggunaan, perdagangan langsung, pelaporan dan pemantauan.
Mungkin kelemahan terbesarnya adalah bahawa ia agak lambat untuk dijalankan jika dibandingkan dengan bahasa lain seperti C ++. Walau bagaimanapun, kerja sedang dijalankan untuk memperbaiki masalah ini dan dari masa ke masa Python menjadi lebih cepat.
R adalah persekitaran pengaturcaraan statistik, dan bukannya
Ia digunakan secara meluas untuk pengujian belakang For-Loop, sering melalui perpustakaan quantmod, tetapi tidak begitu sesuai untuk sistem yang didorong oleh acara atau perdagangan langsung.
C++ mempunyai reputasi untuk menjadi sangat pantas. Hampir semua pengkomputeran berprestasi tinggi saintifik dijalankan sama ada dalam Fortran atau C ++. Ini adalah kelebihan utamanya. Oleh itu jika anda mempertimbangkan perdagangan frekuensi tinggi, atau bekerja pada sistem warisan dalam organisasi besar, maka C ++ mungkin menjadi keperluan.
Malangnya, ia menyakitkan untuk menjalankan penyelidikan strategi. Oleh kerana diketik secara statik, ia agak rumit untuk memuatkan, membaca dan memformat data dengan mudah berbanding Python atau R.
Walaupun usianya yang relatif, ia baru-baru ini telah dimodenkan secara besar-besaran dengan pengenalan C ++ 11 / C ++ 14 dan penyempurnaan piawaian lanjut.
Anda juga mungkin ingin melihat Java, Scala, C #, Julia dan banyak bahasa fungsional. Walau bagaimanapun, cadangan saya adalah untuk berpegang pada Python, R dan / atau C ++, kerana komuniti perdagangan kuantum jauh lebih besar.
Jawapan: Ya!
Ia adalah pengalaman pembelajaran yang hebat untuk menulis sistem backtesting Event-Driven anda sendiri. pertama, ia memaksa anda untuk mempertimbangkan semua aspek infrastruktur perdagangan anda, bukan hanya menghabiskan jam bermain-main pada strategi tertentu.
Walaupun anda tidak berakhir menggunakan sistem untuk perdagangan langsung, ia akan menyediakan anda dengan sebilangan besar soalan yang anda harus bertanya kepada vendor backtesting komersial atau FOSS anda.
Sebagai contoh: Bagaimana sistem hidup semasa anda berbeza dari simulasi backtest anda dari segi:
Walaupun sistem Event-Driven tidak cepat atau mudah untuk menulis, pengalaman akan membayar dividen pendidikan yang besar kemudian dalam kerjaya perdagangan kuant anda.
Bagaimana anda menulis sistem seperti itu?
Cara terbaik untuk memulakan adalah dengan memuat turun Zipline, QSTrader, PyAlgoTrade, PySystemTrade dan lain-lain dan cuba membaca melalui dokumentasi dan kod. Mereka semua ditulis dalam Python (kerana sebab-sebab yang saya jelaskan di atas) dan syukurlah Python sangat seperti membaca kod palsu. iaitu, ia sangat mudah diikuti.
Saya juga telah menulis banyak artikel mengenai reka bentuk backtest Event-Driven, yang boleh anda dapati di sini, yang membimbing anda melalui pembangunan setiap modul sistem.
Ingat bahawa anda tidak perlu menjadi pakar pada hari # 1. Anda boleh mengambilnya perlahan, hari demi hari, modul demi modul. Jika anda memerlukan bantuan, anda sentiasa boleh menghubungi saya atau blogger kuant yang lain. Lihat akhir artikel untuk e-mel kenalan saya.
Saya akan membincangkan modul yang sering terdapat dalam banyak sistem backtesting yang didorong oleh peristiwa. Walaupun bukan senarai yang lengkap, ia harus memberi anda
Ini adalah di mana semua data harga sejarah disimpan, bersama-sama dengan sejarah dagangan anda, sekali hidup.
Sebaliknya, kami menggunakan pangkalan data atau sistem fail
Idealnya, kita mahu mendapatkan dan menyimpan data tahap tik kerana ia memberi kita idea mengenai spread perdagangan.
Kita harus sentiasa sedar tentang mengendalikan tindakan korporat (seperti pembahagian saham dan dividen), bias survival (penghapusan senarai saham) serta mengesan perbezaan zon waktu antara pelbagai bursa.
Individu / keluaran runcit boleh bersaing di sini kerana banyak teknologi pangkalan data berkualiti pengeluaran adalah matang, percuma dan sumber terbuka.
Masih ada banyak pasaran dan strategi yang terlalu kecil untuk dana besar yang berminat. Ini adalah tanah subur untuk peniaga kuantiti runcit.
Modul strategi perdagangan dalam sistem yang didorong oleh peristiwa biasanya menjalankan beberapa jenis mekanisme ramalan atau penapisan pada data pasaran baru.
Ia menerima data bar atau tik dan kemudian menggunakan mekanisme ini untuk menghasilkan isyarat perdagangan untuk panjang atau pendek aset.
95% perbincangan blog kuant biasanya berputar di sekitar strategi perdagangan. Saya secara peribadi percaya ia harus lebih seperti 20%. Ini kerana saya fikir lebih mudah untuk meningkatkan pulangan yang dijangkakan dengan mengurangkan kos melalui pengurusan risiko yang betul dan saiz kedudukan, daripada mengejar strategi dengan
Matlamat sistem ini adalah untuk pergi dari portfolio semasa ke portfolio yang dikehendaki, sambil meminimumkan risiko dan mengurangkan kos transaksi.
Modul ini menghubungkan strategi, risiko, saiz kedudukan dan keupayaan pelaksanaan pesanan sistem. Ia juga mengendalikan pengiraan kedudukan semasa backtesting untuk meniru pengiraan broker sendiri.
Kelebihan utama menggunakan sistem yang kompleks adalah ia membolehkan pelbagai instrumen kewangan untuk ditangani di bawah satu portfolio. Ini diperlukan untuk portfolio gaya institusi dengan lindung nilai. Kerumitan sedemikian sangat rumit untuk dikodkan dalam sistem backtesting For-Loop.
Memisahkan pengurusan risiko ke dalam modulnya sendiri boleh menjadi sangat menguntungkan. Modul boleh mengubah suai, menambah atau membantah pesanan yang dihantar dari portfolio.
Khususnya, modul risiko boleh menambah lindung nilai untuk mengekalkan netraliti pasaran. Ia boleh mengurangkan saiz pesanan kerana pendedahan sektor atau had ADV. Ia boleh menolak sepenuhnya perdagangan jika penyebaran terlalu luas, atau yuran terlalu besar berbanding dengan saiz perdagangan.
Modul saiz kedudukan yang berasingan boleh melaksanakan anggaran turun naik dan peraturan saiz kedudukan seperti leverage Kelly.
Topik seperti itu tidak diwakili dengan baik dalam blogosfera kuant. Walau bagaimanapun, ini mungkin perbezaan terbesar antara bagaimana institusi dan beberapa peniaga runcit berfikir tentang perdagangan mereka. Mungkin cara yang paling mudah untuk mendapatkan pulangan yang lebih baik adalah dengan mula melaksanakan pengurusan risiko dan saiz kedudukan dengan cara ini.
Dalam kehidupan sebenar kita tidak pernah dijamin untuk mendapatkan pasaran mengisi di titik pertengahan!
Kita mesti mempertimbangkan isu-isu transaksi seperti kapasiti, penyebaran, yuran, slippage, kesan pasaran dan masalah pelaksanaan algoritma lain, jika tidak, pulangan backtesting kita mungkin sangat berlebihan.
Pendekatan modular sistem Event-Driven membolehkan kita dengan mudah menukar BacktestExecutionHandler dengan LiveExecutionHandler dan menyebarkan ke pelayan jauh.
Kita juga boleh dengan mudah menambah beberapa broker menggunakan konsep OOP
Satu isu yang perlu diperhatikan ialah
Kuantiti runcit boleh dan harus meminjam teknik pelaporan canggih yang digunakan oleh kuantiti institusi. Alat-alat tersebut termasuk live
Peningkatan tambahan yang konsisten harus dibuat kepada infrastruktur ini. Ini benar-benar dapat meningkatkan pulangan dalam jangka panjang, hanya dengan menghilangkan bug dan meningkatkan isu-isu seperti latensi perdagangan.
WGS akhirnya akan terkikis kerana
Pengoptimuman infrastruktur mungkin lebih
Penyebaran ke pelayan jauh, bersama-sama dengan pemantauan sistem jauh ini, sangat penting untuk sistem peringkat institusi.
Sistem yang kukuh mesti digunakan dari jauh di
Isu utama apabila mempertimbangkan penggunaan jarak jauh termasuk; pemantauan perkakasan, seperti CPU, RAM / swap, cakera dan I / O rangkaian, ketersediaan dan redundansi sistem yang tinggi, rancangan sandaran dan pemulihan yang difikirkan dengan baik, logging luas semua aspek sistem serta integrasi berterusan, ujian unit dan kawalan versi.
Ingat Hukum Murphy - Jika ia boleh gagal ia akan gagal.
Terdapat banyak vendor yang menawarkan penyebaran awan yang agak mudah, termasuk Amazon Web Services, Microsoft Azure, Google dan Rackspace.
Malangnya, tidak ada penyelesaian cepat dalam perdagangan kuantiti. Ia melibatkan banyak kerja keras dan pembelajaran untuk berjaya.
Mungkin batu sandungan utama bagi pemula (dan beberapa kuantiti pertengahan!) adalah bahawa mereka terlalu banyak menumpukan pada
Ia juga bernilai melabur banyak masa dalam infrastruktur perdagangan anda. Belanja masa pada isu-isu seperti penggunaan dan pemantauan. Sentiasa cuba dan mengurangkan kos urus niaga, kerana keuntungan adalah tentang mengurangkan kos kerana ia adalah tentang memperoleh pendapatan perdagangan.
Saya mengesyorkan menulis sistem backtesting anda sendiri hanya untuk belajar. anda boleh menggunakannya dan terus meningkatkannya atau anda boleh mencari vendor dan kemudian bertanya kepada mereka semua soalan yang anda telah menemui apabila anda membina anda sendiri. ia pasti akan membuat anda sedar tentang batasan sistem yang tersedia secara komersial.
Akhirnya, sentiasa membaca, belajar dan meningkatkan. Terdapat banyak buku teks, jurnal perdagangan, jurnal akademik, blog kuant, forum dan majalah yang membincangkan semua aspek perdagangan. Untuk idea strategi yang lebih maju, saya mengesyorkan SSRN dan arXiv - Kewangan Kuantitatif.