Apakah perkara yang paling penting apabila backtest strategi perdagangan? kelajuan? penunjuk prestasi?
Jawapannya adalah ketepatan! Tujuan backtest adalah untuk mengesahkan logik dan kelayakan strategi. Ini juga merupakan makna backtest itu sendiri, yang lain adalah sekunder. Hasil backtest yang benar-benar mencerminkan data sejarah strategi mempunyai nilai rujukan. kurva backtest yang seolah-olah sempurna boleh menceritakan cerita yang bagus, tetapi tidak boleh dilakukan dalam persekitaran pasaran sebenar.
Bagaimana untuk mencapai backtesting yang tepat adalah masalah yang banyak peniaga kuantitatif peduli tentang. perkara pertama yang kita perlu untuk mengetahui adalah bahawa apa data yang dalam perdagangan, kerana kualiti data telah sebahagian besarnya menentukan kualiti backtest.
Untuk jenis data ini, kebanyakan orang mungkin berfikir tentang harga pembukaan, harga tertinggi, harga terendah, harga penutupan dan jumlah dagangan pada carta garis K. Untuk perbezaan yang lebih baik, kami merujuk kepada data ini secara kolektif sebagai data Bar, yang anda boleh memahami sebagai garis K. Tetapi adakah anda pernah berfikir tentang dari mana data berasal, dan di mana sumber data ini?
Sebenarnya, data dari pertukaran yang dihantar kembali tidak mengandungi data Bar ini, hanya data Tick. Jadi apa itu data Tick? Anda boleh imej data dalam pertukaran sebagai sungai. Sungai ini mengandungi data terperinci untuk setiap pesanan. Data Tick adalah kepingan dalam aliran data. Frekuensi adalah 2 kepingan sesaat. ia adalah reproduksi keadaan pasaran tertentu.
Kemudian, data Bar berdasarkan data Tick dan dibahagikan mengikut tempoh masa. Data Bar 1 minit terdiri daripada data Tick dalam masa 1 minit, data Bar 5 minit terdiri daripada data Tick dalam masa 5 minit, dan sebagainya. Ia membentuk pelbagai carta minit, carta jam, carta harian dan sebagainya. Garis K satu minit hanya mempunyai satu data Bar, tetapi mungkin mengandungi 120 data Tick. Oleh itu, data sejarah backtest boleh dibahagikan kepada: Data Bar dan data Tick, dan jumlah data dalam data Tick jauh lebih besar daripada jumlah data Bar dalam kitaran yang sama.
Kebanyakan perisian perdagangan kuantitatif di pasaran semua menyokong backtesting data Bar. Kerana jumlah data kecil, beban kerja enjin backtesting sangat disederhanakan. Oleh itu, backtesting ini biasanya sangat cepat, dan data sepuluh tahun boleh backtest dalam beberapa saat. Walaupun backtest puluhan jenis niaga hadapan pada masa yang sama tidak akan melebihi satu minit. Tetapi backtesting data Bar mempunyai banyak masalah:
Kebanyakan peniaga tahu bahawa sukar untuk membeli atau menjual pada harga had harian, tetapi ia boleh didagangkan dalam persekitaran backtest.
Apabila harga tiba-tiba melompat dari had terendah ke had harga tertinggi atau muncul jurang harga, ia ditunjukkan sebagai garis K positif besar pada carta K-garis kitaran besar, tetapi tidak ada transaksi yang dilakukan sepanjang masa.
Sebagai contoh: garis K semasa telah melayang di sekitar harga 5000, dan tiba-tiba meningkat kepada 5100 berhampiran penutupan pasaran, dan hampir tidak ada pesanan dan transaksi yang menunggu di tengah-tengah.
Saya percaya bahawa banyak peniaga kuantitatif telah menghadapi lubang seperti itu, dan kebanyakan kurva backtest sudut 45 darjah berasal dari ini. Untuk memudahkan semua orang memahami, izinkan saya memberikan contoh lain: Kami tahu bahawa satu garis K mempunyai 4 harga. Jika ia adalah garis positif k 1 minit, maka pembentukan garis K ini harus: harga pembukaan >>> harga terendah >>>> harga tertinggi >>> harga penutupan.
Walau bagaimanapun, garis k kitaran besar tidak akan begitu mudah. Ia mungkin mencapai tahap tinggi baru, kemudian tahap rendah baru, dan kemudian menutup; ia juga mungkin mencapai tahap rendah baru, kemudian tahap tinggi baru, dan kemudian menutup; atau walaupun selepas pusingan putaran dan putaran, ia mencapai tahap rendah baru, dan kemudian tahap tinggi baru, dan kemudian tahap rendah baru, dan kemudian menutup; tetapi ia hanya muncul sebagai garis K dengan bayangan atas dan bawah, terdapat banyak kemungkinan di tengah-tengah bagaimana ia terbentuk.
Jika garis K muncul seperti ini: harga pembukaan 4950, harga terendah 4900, harga tertinggi 5100, harga penutupan 5050, garis K positif normal. Strategi anda adalah: Jika harga terkini melebihi harga tertinggi sebelumnya 5000, beli panjang, dan tetapkan stop loss 1% selepas membuka kedudukan, iaitu, apabila harga jatuh di bawah 4950, ia akan melakukan stop loss.
Okay, mari kita mulakan backtest:
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Earned 1% when the market closed
tapi situasi sebenar boleh jadi seperti ini:
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Soon the price begins to fall
Continue to fall to 4949
Stop loss signal triggers stop loss 1%
Price rises to 5100
Market close at 5050
Seperti yang anda lihat, contoh di atas, strategi yang sama, data yang sama, terdapat dua hasil yang sangat berbeza. Sebabnya masih kerana perbezaan data. Dalam ujian backtest tahap Bar, jika anda menggunakan ujian backtest K-line harian, anda tidak akan tahu bagaimana garis K ini terbentuk. Jika anda menggunakan ujian backtest K-line sejam, anda tidak akan tahu garis k sejam ini terbentuk. Singkatnya, ujian data Bar lemah!
Jika anda boleh menggunakan data Tick untuk backtesting dan analisis, tidak ada keraguan bahawa ia mempunyai kelebihan yang besar. Walau bagaimanapun, nampaknya tidak ada platform perdagangan kuantitatif untuk backtesting dan analisis data Tick di pasaran. Sebagai contoh, MT4 menggunakan data simulasi interpolasi. Ini hanya mensimulasikan perubahan dalam data, bukan data Tick sebenar.
Sudah tentu, ada perisian yang mendakwa dapat melakukan backtesting tahap Tick. tetapi perisian ini membuat kesilapan fatal ketika mereka merancang enjin backtesting, iaitu:
Perhatikan bahawa dalam persekitaran perdagangan sebenar, pesanan yang kami letakkan sepadan dalam aliran data Tick bursa. Peraturan pencocokan bursa adalah: keutamaan harga, keutamaan masa. Jika kedalaman pesanan tidak terlalu tebal pada masa ini, pesanan pembelian harga 5000 yang kami hantar kemungkinan akan diperdagangkan secara pasif.
Oleh itu, platform FMZ Quant (fmz.com) Tick-level backtesting engine telah wujud, mesin backtesting ini bukan sahaja sepadan dengan pesanan berdasarkan keutamaan harga data Tick. Menurut keutamaan harga yang sama, bilangan pesanan tertunda dikira untuk menentukan sama ada pesanan tertunda semasa telah mencapai keadaan transaksi pasif, untuk mencapai persekitaran simulasi sebenar.
Tick pertama ialah: Jual: 101 Volume: 80 Beli: 100 Volume: 30
Tick kedua ialah: Jual: 101 Volume: 60 Beli: 100 Volume: 50
Tick ketiga ialah: Jual: 101 Volume: 80 Beli: 100 Volume: 30
Tick keempat ialah: Jual: 101 Volume: 80 Beli: 100 Volume: 10
Untuk Tick pertama, harga beli adalah 100, jumlah pesanan yang menunggu adalah 30 lot; pada masa ini, isyarat beli datang, beli 20 lot pada harga 100; Tick kedua dihasilkan, harga beli adalah 100, dan kuantiti pesanan yang menunggu adalah 50. terdapat 20 lot pesanan yang menunggu; Tick ketiga dihasilkan, harga beli adalah 100, dan jumlah pesanan yang menunggu adalah 30 lot. Ini membuktikan bahawa 20 lot telah dilaksanakan atau dibatalkan, dan kami menutup perjanjian; Tick keempat dihasilkan, harga pembelian adalah 100, dan jumlah pesanan yang menunggu adalah 10 lot. Ia adalah penjual besar, dan semua pesanan pembelian kami dilaksanakan sekaligus.
Melalui contoh di atas, kita dapat mendapati bahawa dalam data Tick, di bawah premis bahawa harga tidak berubah, adalah mungkin untuk mengira sama ada terdapat transaksi pasif pesanan yang belum selesai melalui perubahan jumlah pesanan yang belum selesai. Penggunaan harga yang sama, pendekatan pertama.
Pada platform FMZ Quant, backtesting tahap Bar dan Tick wujud pada masa yang sama. Setiap peniaga kuantitatif boleh menggunakan enjin backtesting yang berbeza mengikut strategi perdagangan mereka sendiri, dan tidak kira jenis backtesting yang anda gunakan. Enjin tidak perlu mengubah suai kod strategi, dan setiap jenis backtesting boleh disambung dengan lancar.
low frequency strategy backtesting tidak memerlukan enjin pencocokan yang kompleks, kerana jumlah transaksi untuk strategi tersebut kecil, kos slippage tidak mempunyai kesan besar pada strategi itu sendiri. secara umum, hanya beberapa titik slippage perlu ditambahkan semasa backtesting, menggunakan backtesting Bar-level akan mencukupi.
Beberapa perdagangan intraday atau strategi yang melibatkan kedudukan pembukaan pada siang hari, jika perlu, juga boleh menyesuaikan granulariti data pada halaman parameter konfigurasi backtesting, seperti backtesting pada kitaran 1 jam, yang boleh disesuaikan dengan data 15 minit yang lebih halus.
Perdagangan frekuensi tinggi kerana jumlah transaksi cukup tinggi, satu jenis boleh berdagang berpuluh-puluh atau bahkan beratus kali dalam sehari, jadi selagi enjin pencocokan adalah munasabah, maka di bawah kesan undang-undang
Dalam backtest perdagangan frekuensi tinggi, semakin tinggi frekuensi urus niaga, tempoh masa yang lebih pendek untuk memegang kedudukan; semakin rendah keuntungan purata satu urus niaga. Pada masa ini, jika reka bentuk enjin backtest tidak munasabah, atau kaedah pesanan yang sepadan membandingkan dengan persekitaran perdagangan sebenar tidak sama, maka akan ada fenomena
Kami menunjukkan kepada anda bagaimana backtest tahap Tick berfungsi dengan strategi pembuatan pasaran frekuensi tinggi yang ditulis dalam C ++ (yang juga menyokong Python dan JavaScript). Anda boleh melengkapkan strategi dan melakukan backtesting dalam talian dengan mengklik pautan di bawah. Gambar berikut diambil dari maklumat log. Perhatikan bahawa kami membeli 1 lot pada harga 2231 pada 2019-07-12 14:59, dan menjualnya pada 2232.
Tick pertama ialah: Jual: 2232 Jilid: 409 Beli: 2231 Volume: 73
Tick kedua ialah: Jual: 2232 Jilid: 351 Beli: 2231 Volume: 84
Tick ketiga ialah: Jual: 2232 Jilid: 369 Beli: 2231 Volume: 67
Strategi demonstrasi ini adalah untuk menutup kedudukan apabila membuat keuntungan harga. Selepas membuka kedudukan, kita menghantar pesanan kedudukan penutupan pada 2232 untuk menutup kedudukan panjang, dan 2231 untuk menutup kedudukan pendek. Menurut ujian belakang tahap Bar tradisional, harga pesanan yang tertunda ini tidak dapat ditutup. Walau bagaimanapun, enjin pengujian belakang tahap Tick platform
Klik pautan ini (https://www.fmz.com/strategy/162372) untuk menyalin strategi lengkap tanpa perlu mengkonfigurasi parameter
Nota: Pada masa ini, kami hanya menyokong pelbagai niaga hadapan komoditi domestik China dan data tahap Tick bursa cryptocurrency OKEX. Kami akan menyokong lebih banyak bursa pada masa akan datang.
Di atas adalah analisis platform FMZ Quant dan pertempuran sebenar semua peringkat backtesting. Bukan itu sahaja, tetapi selain menyokong pedagang profesional dan pengguna institusi, ia juga sangat mesra kepada pemula yang belum bermula. Bahasa visual boleh dilaksanakan tanpa menulis kod. Di samping itu, bahasa My boleh diselesaikan dalam 10 ayat.
Berfikir tentang strategi, membuat statistik, dan menganalisis... Perdagangan telah menjadi sangat sukar. Sama ada anda CTA frekuensi rendah, perdagangan intraday, perdagangan frekuensi tinggi, platform perdagangan kuantitatif FMZ Quant dapat disokong dengan sempurna. Kami tidak membuat fungsi mainan, berdasarkan backtesting sejarah yang tepat pada tahap Tick, kami boleh menguji sebarang kombinasi pelbagai jenis, pelbagai strategi dan pelbagai kitaran untuk membantu anda membina portfolio pelaburan yang optimum.