Semalam, Saya menulis sedikit tentang bagaimana backtester menyerupai mata. Apabila NinjaTrader menemui sebuah bar di mana berhenti dan mengambil keuntungan jatuh dalam julat bar ini, ia sentiasa menganggap bahawa berhenti dilanda pertama.
Saya isu ini datang untuk pelanggan yang mahu menjual strategi untuk klien institusi. Institusi itu mahu keupayaan untuk backtest untuk memahami bagaimana strategi yang melakukan dalam keadaan pasaran yang lebih luas. Keputusan hidup hanya meliputi 9 bulan, yang menyukarkan pelabur untuk membuat keputusan yang betul. A dipercayai, backtest tepat akan membolehkan pelanggan saya untuk memudahkan jualan.
Apabila kita mula-mula diprogramkan strategi, ia kelihatan seperti kegagalan yg berkeras. Keputusan menunjukkan 45 ijazah terjun ekuiti dari setiap perdagangan. Dia meletakkan di perhentian 1/3 daripada ATR, jadi secara semula jadi, NinjaTrader diandaikan bahawa mereka dilanda sepanjang masa.
Penyelesaian yang kami dibangunkan baginya menggunakan tinggi tempoh masa carta bahawa strategi yang sebenarnya digunakan, tetapi kita kemudiannya diubah suai kod untuk dilakukan termasuk apa panggilan NinjaTrader intrabar butiran. Pada asasnya, kami menambah carta tick pada hujung belakang yang memaksa strategi untuk mengemas kini pada tick tick oleh asas.
Ini sebenarnya agak mudah untuk program. Dalam fungsi Memula yang, anda perlu menambah tawaran dan meminta carta tick.
langkau dilindungi Memula tidak sah()
{
Tambah(rentetan instrumentName, PeriodType.Tick, 1, MarketDataType.Bid);
Tambah(rentetan instrumentName, PeriodType.Tick, 1, MarketDataType.Ask);
}
Kemudian, dalam OnBarUpdate yang() fungsi, anda letakkan kod yang tidak berubah. Semua yang anda perlu lakukan adalah untuk meletakkan ia dalam yang mudah jika-maka Pernyataan manakah
langkau dilindungi OnBarUpdate tidak sah()
{
jika( BarsInProgress == 0 )
{
// Melakukan barangan
}
}
Keputusan backtest datang dalam $5 keputusan perdagangan sebenar dalam tempoh 9 bulan! Walaupun ujian tersokong sering membawa kepada keputusan yang tidak tepat, kami teruja untuk mengeluarkan semula hasil yang dengan apa-apa kesilapan kecil.
Kelemahan utama kaedah ini adalah bahawa anda secara manual mesti menaip nama instrumen bahagian dalam kod sumber, kemudian menyusun ia, setiap kali anda ingin menjalankan backtest pada instrumen baru. Ia bukan satu penyelesaian yang bagus, tetapi NT7 malangnya tidak menyokong pengaturcaraan memanggil InstrumentName dari dalam Memula().