C ++ strategi back testing trading
Backtesting Sukses Strategi Perdagangan Algoritma - Bagian I Artikel ini melanjutkan rangkaian perdagangan kuantitatif, yang dimulai dengan Panduan Pemula dan Identifikasi Strategi. Kedua artikel yang lebih lama dan lebih terlibat ini sangat populer sehingga Ill melanjutkan hal ini dan memberikan detail tentang topik backtesting strategi. Algoritma backtesting membutuhkan pengetahuan dari banyak bidang, termasuk psikologi, matematika, statistik, pengembangan perangkat lunak dan mikrostruktur pasar. Saya tidak bisa berharap untuk membahas semua topik dalam satu artikel, jadi saya akan membagi mereka menjadi dua atau tiga bagian yang lebih kecil. Apa yang akan kita bahas di bagian ini. Permulaan dengan mendefinisikan backtesting dan kemudian saya akan menjelaskan dasar-dasar bagaimana hal itu dilakukan. Kemudian saya akan menjelaskan bias yang kita singgung pada Panduan Pemula untuk Perdagangan Kuantitatif. Selanjutnya saya akan menyajikan perbandingan dari berbagai opsi perangkat lunak backtesting yang ada. Dalam artikel selanjutnya kita akan melihat rincian implementasi strategi yang seringkali tidak disebutkan atau diabaikan. Kami juga akan mempertimbangkan bagaimana membuat proses backtesting lebih realistis dengan memasukkan kekhasan dari pertukaran perdagangan. Kemudian kita akan membahas biaya transaksi dan cara memodelkannya dengan benar dalam setting backtest. Kita akan berakhir dengan diskusi tentang kinerja backtests kita dan akhirnya memberikan contoh strategi quant yang umum, yang dikenal sebagai perdagangan pasang rata-rata. Mari kita mulai dengan membahas backtesting apa dan mengapa kita harus melaksanakannya dalam perdagangan algoritmik kita. Apa itu Trading Algoritma Backtesting yang berdiri terpisah dari jenis kelas investasi lainnya karena kita dapat dengan lebih andal memberikan harapan tentang kinerja masa depan dari kinerja masa lalu, sebagai konsekuensi ketersediaan data yang melimpah. Proses dimana hal ini dilakukan disebut backtesting. Secara sederhana, backtesting dilakukan dengan mengekspos algoritma strategi khusus Anda ke arus data keuangan historis, yang mengarah ke satu set sinyal perdagangan. Setiap perdagangan (yang akan kita maksud di sini untuk menjadi perjalanan pulang dari dua sinyal) akan memiliki keuntungan atau kerugian terkait. Akumulasi keuntungan ini selama durasi backtest strategi Anda akan menghasilkan total keuntungan dan kerugian (juga dikenal sebagai PL atau PnL). Itulah inti dari ide tersebut, walaupun tentu saja setan selalu ada dalam rincian Apa alasan utama untuk mendukung strategi algoritme Filtrasi - Jika Anda ingat dari artikel tentang Identifikasi Strategi. Tujuan kami pada tahap penelitian awal adalah menyusun strategi pipa dan kemudian menyaring strategi yang tidak memenuhi kriteria tertentu. Backtesting memberi kita mekanisme penyaringan lain, karena kita dapat menghilangkan strategi yang tidak sesuai dengan kebutuhan kinerja kita. Pemodelan - Backtesting memungkinkan kita untuk (aman) menguji model baru fenomena pasar tertentu, seperti biaya transaksi, urutan routing, latency, likuiditas atau masalah struktur mikro pasar lainnya. Optimalisasi - Meskipun pengoptimalan 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 sering bersumber dari luar, melalui strategi pipa kami. Backtesting strategi memastikan bahwa hal itu tidak salah dilaksanakan. Meskipun kita jarang memiliki akses terhadap sinyal yang dihasilkan oleh strategi eksternal, kita akan sering memiliki akses ke metrik kinerja seperti karakteristik Sharpe Ratio and Drawdown. Dengan demikian kita bisa membandingkannya dengan implementasi kita sendiri. Backtesting menyediakan sejumlah keuntungan untuk perdagangan algoritmik. Namun, tidak selalu mungkin untuk secara langsung mendukung strategi. Secara umum, seiring dengan meningkatnya frekuensi strategi, menjadi sulit untuk memodelkan efek mikro pasar dan pertukaran dengan benar. Hal ini menyebabkan backtests kurang andal dan dengan demikian merupakan evaluasi yang lebih rumit mengenai strategi yang dipilih. Ini adalah masalah khusus di mana sistem eksekusi adalah kunci kinerja strategi, seperti algoritma frekuensi ultra-tinggi. Sayangnya, backtesting penuh dengan bias semua jenis. Kami telah menyinggung beberapa masalah ini di artikel sebelumnya, namun sekarang kami akan membahasnya secara mendalam. Biases Mempengaruhi Strategi Backtests Ada banyak bias yang dapat mempengaruhi kinerja strategi backtested. Sayangnya, bias ini memiliki kecenderungan untuk mengembang kinerja daripada menguranginya. Dengan demikian Anda harus selalu mempertimbangkan backtest untuk menjadi batas tertinggi ideal pada kinerja aktual strategi. Hampir tidak mungkin untuk menghilangkan bias dari perdagangan algoritmik, jadi tugas kita untuk meminimalkannya sebaik mungkin untuk membuat keputusan berdasarkan informasi tentang strategi algoritmik kami. Ada empat bias utama yang ingin saya diskusikan: Optimasi Bias. Look-Ahead Bias. Bias Survivorship dan Toleransi Psikologis Bias. Optimasi Bias Ini mungkin yang paling berbahaya dari semua bias backtest. Ini melibatkan penyesuaian atau pengenalan parameter perdagangan tambahan sampai kinerja strategi pada kumpulan data backtest sangat menarik. Namun, sekali menjalani kinerja strategi bisa sangat berbeda. Nama lain untuk bias ini adalah kurva pas atau data-snooping bias. Bias optimasi sulit dihilangkan karena strategi algoritmik sering melibatkan banyak parameter. Parameter dalam contoh ini mungkin merupakan kriteria entryexit, periode lihat-kembali, periode rata-rata (yaitu parameter pemulusan rata-rata bergerak) atau frekuensi pengukuran volatilitas. Bias optimasi dapat diminimalkan dengan menjaga jumlah parameter seminimal mungkin dan meningkatkan jumlah titik data dalam rangkaian pelatihan. Sebenarnya, kita juga harus berhati-hati dengan yang terakhir karena poin pelatihan yang lebih tua dapat dikenai rezim sebelumnya (seperti lingkungan peraturan) dan karenanya mungkin tidak sesuai dengan strategi Anda saat ini. Salah satu metode untuk membantu mitigasi bias ini adalah dengan melakukan analisis sensitivitas. Ini berarti memvariasikan parameter secara bertahap dan merencanakan permukaan kinerja. Suara, penalaran fundamental untuk pilihan parameter harus, dengan semua faktor lain dipertimbangkan, mengarah ke permukaan parameter yang lebih halus. Jika Anda memiliki permukaan kinerja yang sangat gelisah, seringkali berarti bahwa parameter tidak mencerminkan fenomena dan merupakan artefak dari data uji. Ada banyak literatur algoritma optimasi multi-dimensi dan ini adalah bidang penelitian yang sangat aktif. Saya tidak akan memikirkannya di sini, tapi tetap mengingatnya di belakang pikiran Anda saat Anda menemukan strategi dengan Bias Look-Ahead Back-Look yang fantastis Back-Look bias di depan diperkenalkan ke sistem backtesting saat data masa depan secara tidak sengaja disertakan pada satu titik di Simulasi dimana data tersebut sebenarnya tidak akan tersedia. Jika kita menjalankan backtest secara kronologis dan kita mencapai titik waktu N, maka bias look-ahead terjadi jika data disertakan untuk sembarang titik Nk, dimana k0. Kesalahan bias di depan bias bisa sangat halus. Berikut adalah tiga contoh bagaimana bias melihat ke depan dapat dikenalkan: Technical Bugs - Arraysvectors dalam kode sering kali memiliki iterator atau variabel indeks. Sepenuhnya offset dari indeks ini dapat menyebabkan bias melihat-depan dengan memasukkan data di Nk untuk non-nol k. Perhitungan Parameter - Contoh umum bias tampilan depan lainnya saat menghitung parameter strategi optimal, seperti regresi linier antara dua deret waktu. Jika seluruh kumpulan data (termasuk data masa depan) digunakan untuk menghitung koefisien regresi, dan dengan demikian secara retroaktif diterapkan pada strategi perdagangan untuk tujuan pengoptimalan, maka data masa depan digabungkan dan bias melihat-depan ada. MaximaMinima - Strategi perdagangan tertentu menggunakan nilai ekstrim dalam periode waktu tertentu, seperti memasukkan harga OHLC tinggi atau rendah. Namun, karena nilai maksimal maksimal ini hanya dapat dihitung pada akhir periode waktu, bias melihat ke depan diperkenalkan jika nilai ini digunakan - menunjukkan periode saat ini. Selalu perlu untuk menunda nilai highlow setidaknya dengan satu periode dalam strategi perdagangan yang memanfaatkannya. Seperti bias optimasi, seseorang harus sangat berhati-hati untuk menghindari pendahuluannya. Hal ini sering menjadi alasan utama mengapa strategi trading underperform backtests mereka secara signifikan dalam live trading. Bias Survivorship Survivinance bias adalah fenomena yang sangat berbahaya dan dapat menyebabkan kinerja meningkat secara signifikan untuk jenis strategi tertentu. Ini terjadi ketika strategi diuji pada kumpulan data yang tidak mencakup keseluruhan aset awal yang mungkin telah dipilih pada titik waktu tertentu, namun hanya mempertimbangkan yang bertahan sampai saat ini. Sebagai contoh, pertimbangkan untuk menguji strategi pemilihan acak ekuitas sebelum dan sesudah jatuhnya pasar 2001. Beberapa saham teknologi bangkrut, sementara yang lain berhasil bertahan dan bahkan makmur. Jika kami membatasi strategi ini hanya pada saham yang berhasil melewati periode penarikan pasar, kami akan memperkenalkan bias bertahan karena mereka telah menunjukkan keberhasilan mereka kepada kami. Sebenarnya, ini hanyalah kasus bias pratinjau yang spesifik, karena informasi masa depan digabungkan ke dalam analisis masa lalu. Ada dua cara utama untuk mengurangi bias bertahan dalam strategi backtests Anda: Survivorship Bias Free Datasets - Dalam kasus data ekuitas, kemungkinan untuk membeli dataset yang mencakup entitas yang delisted, meskipun tidak murah dan hanya cenderung dimanfaatkan oleh perusahaan institusional. . Secara khusus, data Yahoo Finance TIDAK bias bertahan bebas, dan ini biasa digunakan oleh banyak pedagang eceran algo. Seseorang juga dapat melakukan perdagangan di kelas aset yang tidak rentan terhadap bias bertahan, seperti komoditas tertentu (dan derivatif masa depan mereka). Gunakan Data yang Lebih Baru - Dalam kasus ekuitas, dengan memanfaatkan kumpulan data yang lebih baru, mengurangi kemungkinan pemilihan saham yang dipilih tertimbang untuk orang yang selamat, karena kemungkinan kehilangan delisting saham secara keseluruhan dalam periode waktu yang lebih singkat. Kita juga bisa mulai membangun dataset bebas bias pribadi dengan mengumpulkan data dari titik saat ini dan seterusnya. Setelah 3-4 tahun, Anda akan memiliki data ekuitas independen yang solid untuk bertahan lama yang mendukung strategi lebih lanjut. Kami sekarang akan mempertimbangkan fenomena psikologis tertentu yang dapat mempengaruhi kinerja perdagangan Anda. Toleransi Psikologis Bias Fenomena khusus ini tidak sering dibahas dalam konteks perdagangan kuantitatif. Namun, hal itu dibahas secara ekstensif sehubungan dengan metode perdagangan yang lebih discretionary. Ini memiliki berbagai nama, tapi saya telah memutuskan untuk menyebutnya bias toleransi psikologis karena menangkap esensi masalah. Saat membuat backtests selama 5 tahun atau lebih, mudah untuk melihat kurva ekuitas naik naik, menghitung imbal hasil tahunan gabungan, rasio Sharpe dan bahkan karakteristik penarikan dan merasa puas dengan hasilnya. Sebagai contoh, strategi ini mungkin memiliki penarikan relatif maksimum 25 dan durasi penarikan maksimum 4 bulan. Ini tidak akan menjadi tipikal untuk strategi momentum. Sangat mudah untuk meyakinkan diri bahwa mudah untuk mentolerir periode kerugian seperti itu karena gambaran keseluruhannya cerah. Namun, dalam praktiknya, ini jauh lebih sulit Jika penarikan sejarah 25 atau lebih terjadi di backtests, 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 bagaimana penarikan yang diperpanjang bisa seperti, dalam setting kelembagaan, dan ini tidak menyenangkan - bahkan jika backtests menyarankan periode seperti itu akan terjadi. Alasan saya menyebutnya sebagai bias adalah seringnya strategi yang jika tidak berhasil dihentikan dari perdagangan selama masa penarikan yang diperpanjang dan dengan demikian akan menghasilkan kinerja yang tidak signifikan dibandingkan dengan rasio balik. Jadi, meski strateginya bersifat algoritmik, faktor psikologis masih bisa memiliki pengaruh yang besar terhadap profitabilitas. Takeaway adalah untuk memastikan bahwa jika Anda melihat penarikan persentase dan durasi tertentu di backtests, Anda harus mengharapkannya terjadi di lingkungan live trading, dan perlu bertekun untuk mencapai profitabilitas sekali lagi. Paket Perangkat Lunak untuk Backtesting Lanskap perangkat lunak untuk strategi backtesting sangat luas. Solusi berkisar dari perangkat lunak canggih kelas terintegrasi yang terintegrasi hingga bahasa pemrograman seperti C, Python dan R dimana hampir semuanya harus ditulis dari awal (atau plugin yang sesuai diperoleh). Sebagai trader quant, kami tertarik pada keseimbangan untuk dapat memiliki tumpukan teknologi perdagangan kami versus kecepatan dan keandalan metodologi pengembangan kami. Berikut adalah pertimbangan utama untuk pilihan perangkat lunak: Skill Programming - Pilihan lingkungan akan sebagian besar bergantung pada kemampuan Anda untuk memprogram perangkat lunak. Saya berpendapat bahwa mengendalikan tumpukan total akan memiliki efek lebih besar pada PL jangka panjang Anda daripada melakukan outsourcing sebanyak mungkin terhadap perangkat lunak vendor. Hal ini disebabkan oleh risiko downside memiliki bug eksternal atau kekhasan yang tidak dapat Anda perbaiki di perangkat lunak vendor, yang seharusnya mudah diperbaiki jika Anda memiliki lebih banyak kendali atas tumpukan teknologi Anda. Anda juga menginginkan lingkungan yang memengaruhi keseimbangan 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, berhubungan langsung dengan brokerage. Saya bukan penggemar pendekatan ini karena mengurangi biaya transaksi seringkali merupakan komponen besar untuk mendapatkan rasio Sharpe yang lebih tinggi. Jika Anda terikat dengan broker tertentu (dan Tradestation memaksa Anda melakukan ini), maka Anda akan memiliki waktu yang lebih sulit untuk beralih ke perangkat lunak baru (atau broker baru) jika diperlukan. Pialang Interaktif menyediakan API yang tangguh, meski dengan antarmuka yang sedikit tumpul. Kustomisasi - Lingkungan seperti MATLAB atau Python memberi Anda banyak fleksibilitas saat membuat strategi algo karena mereka menyediakan perpustakaan yang fantastis untuk hampir semua operasi matematis yang bisa dibayangkan, namun juga memungkinkan penyesuaian ekstensif jika diperlukan. Kompleksitas Strategi - Perangkat lunak tertentu hanya tidak cocok untuk penggoncangan angka berat atau kompleksitas matematis. Excel adalah salah satu perangkat lunak semacam itu. Meskipun bagus untuk strategi yang lebih sederhana, namun tidak dapat mengatasi banyak aset atau algoritma yang lebih rumit, dengan kecepatan tinggi. Minimisasi Bias - Apakah perangkat lunak atau data tertentu lebih sesuai dengan bias trading Anda harus memastikan bahwa jika Anda ingin membuat semua fungsi itu sendiri, Anda tidak mengenalkan bug yang dapat menyebabkan bias. Kecepatan Pembangunan - Orang tidak perlu menghabiskan bulan dan bulan untuk menerapkan mesin backtest. Prototyping seharusnya hanya memakan waktu beberapa minggu. Pastikan bahwa perangkat lunak Anda tidak menghalangi kemajuan Anda sampai batas tertentu, hanya untuk meraih beberapa poin persentase tambahan dari kecepatan eksekusi. C adalah gajah di ruangan sini Kecepatan Eksekusi - Jika strategi Anda benar-benar bergantung pada ketepatan waktu pelaksanaan (seperti pada HFTUHFT), maka bahasa seperti C atau C akan diperlukan. Namun, Anda akan mengetahui pengoptimalan kernel Linux dan penggunaan FPGA untuk domain ini, yang berada di luar cakupan artikel ini Biaya - Banyak lingkungan perangkat lunak yang dapat Anda gunakan untuk strategi perdagangan algoritme dengan benar-benar gratis dan open source. Sebenarnya, banyak hedge fund menggunakan perangkat lunak open source untuk keseluruhan tumpukan perdagangan algo mereka. Selain itu, Excel dan MATLAB keduanya relatif murah dan bahkan ada alternatif gratis untuk masing-masing. Sekarang setelah kami mencantumkan kriteria yang kami perlukan untuk memilih infrastruktur perangkat lunak kami, saya ingin menjalankan beberapa paket yang lebih populer dan bagaimana perbandingannya: Catatan: Saya hanya akan menyertakan perangkat lunak yang tersedia bagi kebanyakan 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 lingkungan ritel dan saya sendiri tidak memiliki pengalaman dengan mereka. Perbandingan Perbandingan Perangkat Lunak Backtesting: Bahasa tingkat tinggi yang dirancang untuk kecepatan pengembangan. Beragam perpustakaan untuk hampir semua tugas terprogram yang bisa dibayangkan. Mendapatkan penerimaan yang lebih luas pada komunitas hedge fund dan investment bank. Tidak secepat CC untuk kecepatan eksekusi. Eksekusi: plugin Python ada untuk broker yang lebih besar, seperti Interactive Brokers. Oleh karena itu backtest dan sistem eksekusi semuanya bisa menjadi bagian dari tumpukan teknologi yang sama. Kustomisasi: Python memiliki komunitas pengembangan yang sangat sehat dan merupakan bahasa yang matang. NumPySciPy menyediakan komputasi ilmiah dan alat analisis statistik yang relevan untuk perdagangan kuantitatif. Kompleksitas Strategi: Banyak plugin ada untuk algoritme utama, namun tidak sebanyak komunitas quant sebagai ada untuk MATLAB. Minimisasi Bias: Masalah minimisasi bias yang sama ada pada bahasa tingkat tinggi manapun. Perlu sangat berhati-hati dalam melakukan pengujian. Kecepatan Pengembangan: keunggulan utama Piton adalah kecepatan pengembangan, dengan kemampuan pengujian yang kokoh. Kecepatan Eksekusi: Tidak secepat C, namun komponen komputasi ilmiah dioptimalkan dan Python dapat berbicara dengan kode C asli dengan plugin tertentu. Biaya: FreeOpen Source Keterangan: Dewasa, bahasa tingkat tinggi dirancang untuk kecepatan eksekusi. Beragam jajaran keuangan kuantitatif dan perpustakaan numerik. Lebih sulit untuk debug dan sering membutuhkan waktu lebih lama untuk diimplementasikan daripada Python atau MATLAB. Sangat lazim di sisi beli dan jual. Eksekusi: Sebagian besar API broker ditulis di C dan Java. Begitu banyak plugin yang ada. Kustomisasi: CC memungkinkan akses langsung ke memori yang mendasarinya, maka strategi frekuensi ultra-tinggi dapat diimplementasikan. Kompleksitas Strategi: C STL menyediakan beragam algoritma yang optimal. Hampir semua algoritma matematika khusus memiliki implementasi open source open source gratis di web. Bias Minimization: bias Look-ahead bisa jadi sulit dihilangkan, tapi tidak sulit dibanding bahasa tingkat tinggi lainnya. Alat debugging yang bagus, tapi kita harus berhati-hati saat berhadapan dengan memori yang mendasarinya. Kecepatan Pengembangan: C cukup verbose dibandingkan dengan Python atau MATLAB untuk algoritma yang sama. Lebih banyak baris kode (LOC) sering menyebabkan kemungkinan bug lebih besar. Kecepatan eksekusi: CC memiliki kecepatan eksekusi yang sangat cepat dan dapat dioptimalkan dengan baik untuk arsitektur komputasi tertentu. Inilah alasan utama untuk memanfaatkannya. Biaya: Berbagai kompiler: LinuxGCC gratis, MS Visual Studio memiliki lisensi yang berbeda. Strategi yang berbeda akan membutuhkan paket perangkat lunak yang berbeda. Strategi HFT dan UHFT akan ditulis dalam CC (belakangan ini mereka sering dilakukan di GPU dan FPGA), sedangkan strategi ekuitas berarah frekuensi rendah mudah diterapkan di TradeStation, karena semua dalam satu sifat softwarebrokerage. Preferensi pribadi saya adalah untuk Python karena memberikan tingkat kustomisasi, kecepatan pengembangan, kemampuan pengujian dan kecepatan eksekusi yang tepat untuk kebutuhan dan strategi saya. Jika saya membutuhkan sesuatu yang lebih cepat, saya bisa masuk ke C langsung dari program Python saya. Salah satu metode yang disukai oleh banyak trader quant adalah memprotot strategi mereka dengan Python dan kemudian mengkonversikan bagian eksekusi yang lebih lambat ke C dengan cara yang iteratif. Akhirnya seluruh algo ditulis dalam bahasa C dan dapat dibiarkan sendiri untuk diperdagangkan. Dalam beberapa artikel berikutnya mengenai backtesting, kita akan melihat beberapa masalah khusus seputar penerapan sistem backtesting perdagangan algoritmik, dan juga bagaimana menggabungkan efek dari Bursa perdagangan. Kami akan membahas pengukuran kinerja strategi dan akhirnya diakhiri dengan contoh strategi. Memulai dengan Perdagangan Kuantitatif Perpustakaan Kembali Pengujian untuk Strategi Perdagangan Profesional Pengembang Kembali pengujian adalah proses pengujian strategi perdagangan berdasarkan data pasar historis untuk mencoba mensimulasikan bagaimana sistem perdagangan dapat tampil di masa depan. Back testing adalah pengembangan strategi perdagangan, riset dan peningkatan kualitas apa adanya untuk industri perawatan kesehatan dan transportasi. Siapa yang ingin mencoba monitor jantung atau mobil yang belum teruji Tidak ada orang lain. Hal yang sama juga berlaku untuk strategi trading finansial. Semua strategi trading harus kembali diuji, dioptimalkan, dan divalidasi sebelum ditayangkan dengan uang sungguhan. Hampir semua strategi analisa teknikal dapat diuji. Meskipun benar bahwa banyak aplikasi perdagangan tingkat menengah menyediakan bahasa scripting yang memungkinkan trader untuk mengembangkan dan mendukung strategi trading, kami menemukan tidak ada perpustakaan pengujian ulang yang tersedia untuk pengembang sistem perdagangan tingkat lanjut yang lebih memilih program strategi perdagangan mereka dalam pemrograman tingkat rendah. Bahasa seperti C, C, dan Java. Jadi, kami mengembangkan mesin uji balik untuk pengembang sistem tingkat lanjut. Kini pengembang dapat membuat strategi dalam bahasa pemrograman apa pun, lalu kembali menguji dan mengoptimalkan strategi tersebut untuk meningkatkan kinerjanya. BackTestLib memungkinkan pengembang kembali menguji sistem perdagangan mereka di C, C, VB, F, R, IronPython, atau bahasa lainnya, menggunakan data tick atau bar. Tidak masalah bagaimana sistem trading anda ditulis. Yang harus Anda lakukan adalah menyediakan daftar perdagangan, dan perpustakaan pengujian kembali melakukan sisanya untuk Anda. BackTestLib dapat menghitung kinerja sistem perdagangan Anda dengan menggunakan dua lusin pengukuran risiko termasuk rasio Sharpe, rasio Calmar, rasio Sortino, Draw Draw Maksimum, Monte Carlo Draw Down, Total PL, Risk to Reward Ratio, Laba Terbesar, Rugi Terbesar, Rata-rata Jumlah Perdagangan Bulan, Log Perdagangan dan banyak lagi. Sempurna untuk Optimalisasi Strategi Pedagang profesional tahu semua hal baik akan segera berakhir. Bahkan sistem perdagangan terbaik akhirnya jatuh ke dalam periode kehilangan, membutuhkan optimasi atau sistem perdagangan pensiun. Alasan bervariasi, termasuk perubahan likuiditas, volatilitas, dan dinamika pasar yang mendasari, serta faktor lainnya. Hasil keluaran BackTestLib yang mewakili berbagai pengukuran berdasarkan profitabilitas dan risiko sistem perdagangan Anda saat diuji dengan data yang diberikan kepadanya. Contoh kode Buat beberapa perdagangan simulasi Daftar lt Perdagangan gt perdagangan daftar baru lt Perdagangan gt () trades. Add (new Trade (DateTime. Parse (quot112014 9: 30: 45.422 AMquot), SignalType. Buy, 24)) trades. Add (new Perdagangan (DateTime. Parse (quot112014 9: 32: 33.891 AMquot), SignalType. ExitLong, 24.09)) trades. Add (perdagangan baru (DateTime. Parse (quot112014 9: 37: 12.839 AMquot), SignalType. Sell, 24.07)) diperdagangkan. Tambahkan (perdagangan baru (DateTime. Parse (quot112014 9: 48: 27.488 AMquot), SignalType. Exit, 24.19)) trades. Add (perdagangan baru (DateTime. Parse (quot112014 9: 49: 16.415 AMquot), SignalType. Buy, 24)) trades. Add (perdagangan baru (DateTime. Parse (quot112014 9: 50: 45.512 AMquot), SignalType. Exit, 24.09)) trades. Add (new Trade (DateTime. Parse (quot112014 9: 51: 14.212 AMquot), SignalType. Buy, 24.01)) Jalankan backtest double lastPrice 24.03 Hasil backtestResults Backtester. Backtest (trade, lastPrice) Keluarkan hasil Console. WriteLine (jumlah total perdagangan: quot. Results. TotalNumberOfTrade) Cons Ole. WriteLine (jumlah rata-rata perdagangan per bulan: quot. Results. AverageTradesPerMonth) Console. WriteLine (jumlah total dari perdagangan yang menguntungkan: quot. Results. NumberOfProfitableTrades) Console. WriteLine (jumlah total dari perdagangan rugi: quot. Results. NumberOfLosingTrades) Console. WriteLine (quotTotal profit: quot. Results. TotalProfit) Console. WriteLine (quotTotal loss: quot. Result. TotalLoss) Console. WriteLine (quotPercent menguntungkan perdagangan: quot. Result. PercentProfit) Konsol. WriteLine (quotPercent menguntungkan perdagangan: quot. Result. PercentProfit) Konsol. WriteLine (keuntungan terbesar: hasil..LargestProfit) Console. WriteLine (quotLargest loss: quot. Result. LargestLoss) Console. WriteLine (hasil pencatatan maksimum quot quot; maksimum). Konsol. WriteLine (hasil tangkapan maksimum maksimum Monte Carlo: quot. Results. MaximumDrawDownMonteCarlo) Konsol. WriteLine (simpul standar) : Quot. Results. StandardDeviation) Konsol. WriteLine (penjejakan nilai standar yang disetahunkan: quot. Results. StandardDeviationAnnualized) Console. WriteLi Ne (quotDownside deviation (MAR 10): quot. Results. DownsideDeviationMar10) Console. WriteLine (nilai indeks Bulanan Ditambahkan (VIVITA): quot. Results. ValueAddedMonthlyIndex) Konsol. WriteLine (rasio quotSharpe: quot. Results. SharpeRatio) Konsol. WriteLine (rasio quotSortino: quot. Results. SortinoRatioMAR5) Konsol. Rasio WriteLine (quotAnnualized Sortino: quot. Results. AnnualizedSortinoRatioMAR5) Konsol. WriteLine (rasio jumlah rasio: quot. Results. SterlingRatioMAR5) Konsol. WriteLine (rasio quotCalmar: quot. Results. CalmarRatio) Konsol. WriteLine (rasio kuota terhadap penghargaan: quot hasil. RiskRewardRatio) Tampilkan trade log foreach (Trade trade of results. Trades) Console. WriteLine (trade. Date quot: quot trade. Signal. ToString () quot di quot trade. Price. ToString ()) MultiCharts 10 MultiCharts adalah sebuah penghargaan - menjuat platform trading Apakah Anda memerlukan perangkat lunak perdagangan hari atau Anda berinvestasi untuk waktu yang lebih lama, MultiCharts memiliki fitur yang dapat membantu mencapai tujuan trading Anda. Charting definisi tinggi, indikator dan strategi built-in, perdagangan satu klik dari grafik dan DOM, backtesting presisi tinggi, optimasi brute-force dan genetika, eksekusi otomatis dan dukungan untuk skrip EasyLanguage adalah alat utama yang Anda inginkan. Hoice dari broker dan data feed Kebebasan memilih telah menjadi ide penggerak di balik MultiCharts kami dan Anda dapat melihatnya dalam berbagai pilihan feed data dan broker yang didukung. Pilih metode trading Anda, ujilah, dan mulailah trading dengan broker yang Anda andalkan, seperti keuntungan dari MultiChart. Bagaimana Strategi Trading Backtest Anda dengan Benar Banyak trader sukses memiliki satu kebiasaan 8211 mereka mendukung strategi trading mereka. Backtesting strategi trading Anda tidak akan menjamin bahwa Anda akan menjadi menguntungkan, tapi ini adalah langkah raksasa ke arah yang benar. Pada artikel ini, kami memeriksa beberapa bias potensial yang dapat merayap ke dalam backtesting Anda, dan kami akan melihat bagaimana meminimalkan dampak dari bias ini. Ada banyak masalah yang bisa terjadi saat Anda mendukung sistem perdagangan Anda, namun sebagian besar masalah masuk dalam satu dari tiga kategori: kesalahan postdictive, terlalu banyak variabel, atau gagal mengantisipasi perubahan drastis di pasar. Masing-masing kesalahan ini dijelaskan, beserta metode menghindari kesalahan. Klik di sini untuk mempelajari bagaimana memanfaatkan Bollinger Bands dengan pendekatan terstruktur dan terukur untuk meningkatkan tepi perdagangan Anda dan mendapatkan keuntungan lebih besar dengan Trading dengan Bollinger Bands 8211 A Quantified Guide. 1. Kesalahan Postdictive Kesalahan postdictive hanyalah cara yang bagus untuk mengatakan bahwa Anda telah menggunakan informasi yang tersedia hanya setelah fakta 8221 menguji sistem Anda. Percaya atau tidak, ini adalah kesalahan yang sangat umum saat menguji sistem perdagangan. Kesalahan ini mudah dilakukan. Beberapa perangkat lunak akan memungkinkan Anda menggunakan data hari ini dalam menguji sistem perdagangan, yang selalu merupakan kesalahan postdictive (kami tidak tahu apakah data hari ini berguna untuk memprediksi masa depan, namun kami pasti tahu apakah ini berguna dalam memprediksi masa lalu ). Tidakkah Anda senang bisa menggunakan harga penutupan GBPUSD untuk memprediksi apa yang akan dilakukan pasar hari ini Tentu saja Anda akan melakukannya, tentu saja, tapi sayangnya, informasi ini tidak tersedia bagi kita sampai hari selesai. Misalnya, Anda mungkin memiliki sistem yang memasukkan harga penutupan, maka ini jelas berarti bahwa perdagangan tidak dapat dimulai sampai hari selesai. Jika tidak, ini adalah kesalahan postdictive. Contoh lain dapat membantu menggambarkan kesalahan postdictive, jika Anda memiliki aturan dalam sistem perdagangan Anda tentang harga tertinggi, maka Anda akan mengalami kesalahan postdictive. Ini karena harga tertinggi sering ditentukan oleh data yang datang kemudian, di masa depan. Cara untuk menghindari kesalahan postdictive adalah memastikan bahwa ketika Anda mendukung sistem yang hanya informasi yang tersedia di masa lalu pada saat itu digunakan dalam backtesting. Dengan backtesting atau backtesting manual dengan forex tester, Anda dapat melakukannya dengan mudah, namun dengan backtesting otomatis, kesalahan postdictive dapat menyelinap masuk ke sistem perdagangan Anda. 2. Terlalu Banyak Variabel Ini juga dikenal sebagai bias 8220Degrees of Freedom8221. Ini berarti Anda memiliki terlalu banyak variabel, atau indikator perdagangan dalam sistem perdagangan Anda. Sangat mungkin untuk menghasilkan sistem perdagangan yang bisa menjelaskan perilaku harga di masa lalu dari pasangan mata uang. Sebenarnya, semakin banyak indikator yang Anda tambahkan, semakin mudah semakin sering. Masalahnya tiba saat Anda ingin menerapkan sistem ini ke masa depan. Seringkali bila sistem perdagangan memiliki terlalu banyak indikator maka dapat memprediksi perilaku pasar selama periode waktu yang sangat baik. Tapi, semua sistem itu bagus, karena di masa depan sistem berantakan. Pernyataan di atas seringkali sulit dilakukan trader, tapi memang benar. Pertimbangkan apa yang William Eckhardt, dari Wizards New Market mengatakan tentang sistem perdagangan, Secara umum, tes rumit yang digunakan ahli statistik untuk memeras signifikansi dari data marjinal tidak memiliki tempat dalam perdagangan. Kami membutuhkan instrumen statistik tumpul, teknik yang kuat. Jelas, dia memperingatkan terhadap derajat kesalahan kebebasan dan menunjukkan bahwa sistem perdagangan sederhana lebih cenderung bertahan dalam ujian waktu. Ini benar benar. Beberapa sistem perdagangan yang paling kuat tersedia sangat sederhana. Ingatlah hal ini saat Anda berdagang, dan saat Anda mencoba menemukan sistem perdagangan yang menguntungkan. Sebagian besar pedagang akan menemukan bahwa dengan pengalaman, mereka cenderung merangkul pandangan bahwa perdagangan sederhana lebih disukai daripada pendekatan yang kompleks. 3. Perubahan drastis di Pasar Banyak pedagang lupa mengantisipasi kejadian tak terduga yang akan terjadi di masa depan. Tidak masalah apakah Anda tidak tahu apa yang akan terjadi di masa depan 8211 karena Anda tahu ini: akan ada saat-saat di masa depan ketika pasar akan berperilaku tidak menentu. Bila ini terjadi, Anda seharusnya sudah merancang sistem perdagangan Anda agar tetap berfungsi selama masa-masa ini. Mungkin beberapa contoh dapat membantu dengan ini: Ketika Saddam Hussein ditemukan (di akhir pekan), pasar mata uang bereaksi cukup drastis pada pembukaan Senin8217. Ketika krisis keuangan global mulai berlangsung pada bulan September 2008, sebagian besar pasangan mata uang diperdagangkan dengan volatilitas yang jauh lebih banyak daripada yang telah terlihat selama bertahun-tahun. Faktanya adalah bahwa akan ada kejadian tak terduga di masa depan, dan kejadian ini akan mempengaruhi pasar, jadi hal terbaik yang dapat Anda lakukan adalah bersiap. Bagaimana Anda mempersiapkan yang tak terduga Pertimbangkan solusi sederhana ini: 1) Lebih-lebihkan kerugian yang Anda harapkan. Jika backtesting Anda mengungkapkan kerugian maksimum 5000, periksalah kehilangan maksimum 10.000. Will your trading systems still be profitable under these conditions 2) Decide on an appropriate level of risk for each trade. Remember that even this level of risk is likely to be exceeded. If you have decided to risk 1 on each trade, you should assume that sometime in the future, you may be in a trade and an unexpected event will occur, and your trade will not lose 1, but instead 5 will be lost. 3) You should have a contingency plan set up. That is, how will you exit a trade if something bad happens and you cannot access your account For instance, what happens if your trading platform is inaccessible and you desperately want out of a trade Most brokers offer a telephone line to traders for these instances. Do you have the phone number 4) Do you have a maximum risk level set This would be applicable if you have several trades open simultaneously. If you decide to risk 1 per trade and you have 7 trades open simultaneously, does this mean that you will be risking 7 of your account Or have you decided on a maximum risk level of say, 3 Keeping in mind that the unexpected will occur, you should probably have a maximum risk level for those times when you have several open trades. 5) What is the maximum drawdown (amount of money your trading system loses over an extended period of time) you are willing to tolerate Keeping in mind that you (and you are not alone) are more likely to overestimate the severity of drawdowns that you can withstand, it is important to be realistic. If you lose 30 of your account will you stop trading What about if you lose 50 Or if you see 70 of your account disappear Again, the best way to plan for drawdowns is to do extensive backtesting to find out what sort of historical drawdowns your trading system experiences and then plan for even worse drawdowns in the future. Anticipating drastic changes in the markets is the single best way to preserve the equity in your account. So, you know that successful traders share this habit 8211 they backtest their trading strategies. You know that backtesting separates the wealthy traders from those who lose money. You also know several ways of incorporating backtesting into your trading regimen. And you know of the pitfalls 8211 what to look out for 8211 when you are backtesting, so that you can get the most out of the process. But, what exactly, will you get out of backtesting your trading system In the next article I will explore the side effects of backtesting. Walter Peters, PhD is a professional forex trader and money manager for a private forex fund. In addition, Walter is the co-founder of Fxjake. a resource for forex traders. Walter loves to hear from other traders, he can be reached by email at walterfxjake .
Comments
Post a Comment