Ninjascript, C # API yang digunakan untuk strategi pengaturcaraan dalam NinjaTrader, cuba untuk stirke keseimbangan antara membuat proses pembangunan strategi yang semudah mungkin sambil mengekalkan fleksibiliti dalam jenis strategi yang ia boleh menyokong. Ia mengendalikan keperluan ini bersaing dengan strategi membelah kepada dua jenis kaedah untuk. Banyak pengaturcara dalam masyarakat NinjaTrader yang juga merujuk kepada jenis-jenis ini sebagai pendekatan.
Pendekatan Terurus
Yang pertama dan yang paling biasa kaedah perintah adalah pendekatan yang berjaya. Pendekatan berjaya juga andaian lalai bahawa NinjaTrader menganggap anda menggunakan semasa menulis strategi.
Saya backtest strategi cara ini 90%+ masa. Ia adalah cara yang lebih mudah untuk menulis mereka menggunakan pendekatan yang berjaya apabila semua pembolehubah dan harta ditubuhkan. NinjaScript membuat didapati beberapa kaedah yang semua saling berkaitan. Nama-nama dan fungsi setiap adalah jelas. Masukkan Long(), contohnya, memasuki perdagangan yang panjang.
Semua kaedah ini telah premapped hubungan antara satu sama lain. Apabila strategi panggilan ExitLong(), NinjaTrader menjaga butir-butir seperti yang mengetahui rindu yang diperlukan untuk keluar dari. Yang seolah-olah cukup jelas, tetapi permohonan perdagangan ramai yang tidak menyambung titik-titik dengan mudah antara fungsi perdagangan. MetaTrader 4 & 5 adalah contoh yang baik dari jenis fungsi mudah tidak tersedia.
Yang mudah dengan mana keputusan perdagangan dikendalikan menjadikannya sesuai untuk membangunkan kod cepat dan kotor untuk menguji idea ringkas. Kebanyakan idea strategi saya mengikuti prinsip KISS; memastikan ia mudah, bodoh. Ia biasanya satu proses perkembangan yang sangat mudah (10-20 minit) untuk program dan menguji idea perdagangan dari saat ia memasuki fikiran saya. Kebanyakan idea tidak bersenam, tetapi sekurang-kurangnya saya mendapat kepuasan mengetahui jawapannya dengan cepat.
Saya dapati dengan cara yang sukar bahawa pendekatan yang berjaya membuat andaian tentang pengendalian perintah. Masukkan had Long(), contohnya, secara automatik memadam perintah had yang belum selesai selepas satu bar. Saya masih ingat menghabiskan beberapa jam dengan strategi yang hidup cuba untuk memahami mengapa begitu banyak pesanan saya dimasukkan dengan betul pada carta tick, hanya untuk mempunyai mereka hilang pada tick seterusnya. Dengan berhati-hati meneliti dokumentasi yang membawa saya dapat suatu kaedah kelebihan beban dengan parameter liveUntilCandelled yang.
Itu contoh seperti fungsi pra-diprogramkan ini yang anda perlu berhati-hati untuk. Hal ini terutama berlaku jika anda mempunyai bug yang tidak masuk akal dalam konteks strategi anda.
Pendekatan Diurus
Pendekatan yang tidak terurus menghilangkan semua andaian yang NinjaTrader membuat manakala strategi yang berjalan dalam masa nyata. Pilihan ini meninggalkan ia sehingga alat sandi untuk menyimpan status kedudukan di dalam memori dan membuat keputusan yang sesuai.
Setiap strategi yang kita telah menulis dengan perintah yang tidak terurus menggunakan belum selesai berhenti dan menghadkan pesanan. Satu contoh baru-baru ini melibatkan strategi membuat pasaran di Broker Interaktif. Strategi ini adalah 100% dalam pasaran semasa sesi Asia dan Amerika Syarikat. Kami asalnya bermula dengan pendekatan yang berjaya tetapi berlari ke dalam masalah dengan komisen dan overfills.
Strategi ini hanya perdagangan 2 lot mini semasa fasa ujian, iaitu saiz perdagangan minimum. Walaupun suruhanjaya taraf 0.2 pips setiap bahagian adalah agak rendah, komisen minimum adalah $2.50. Itulah agak tinggi bagi apa-apa saiz kedudukan kecil. Saya perhatikan pada hari pertama yang pelanggan saya telah mendapat komisen dikenakan untuk kaki masuk dan keluar kaki, masing-masing.
Perdagangan pertama masuk dengan 20k. Apabila tiba masa untuk keluar, pendekatan yang berjaya menetapkan had untuk keluar 20k dan had kemasukan lain untuk 20k lain. IB dikenakan komisen dua kali untuk kedua-dua perintah, yang kos $5 setiap perdagangan pusingan seterusnya. Laporan perdagangan kelihatan seperti:
BOT 20 k $2.50
20k SLD $2.50
20k SLD $2.50
BOT 20k $ 2.5o
BOT 20 k $2.50
20k SLD $2.50
BOT 20 k $2.50
20k SLD $2.50
Itulah berkesan 4 berdagang dengan kos $20.
Kumpulan perdagangan ke dalam satu pesanan lebih kurang memotong komisen pada separuh. Saya mendapati ia lebih mudah untuk dilakukan dengan pendekatan yang tidak terurus kerana saya tidak perlu bimbang tentang bagaimana Entry() dan Keluar() kaedah akan berinteraksi. Laporan perdagangan ditukar kepada:
BOT 20 k $2.50
40k SLD $2.50
BOT 40 k $2.50
40k SLD $2.50
BOT 20 k $2.50
Urutan sama dikumpulkan bersama titisan kos 4 perdagangan turun kepada $12.50. Kemasukan awal dan kos pintu keluar terakhir $2.50, tetapi perdagangan di antara hanya membayar $2.50 untuk masuk dan keluar digabungkan. Apabila saiz pesanan meningkat kepada lot standard, penjimatan komisen secara mendadak akan meningkatkan pulangan pelanggan.
Alasan lain yang kita beralih kepada pendekatan yang tidak terurus adalah bahawa NinjaTrader membunuh strategi apabila memenuhi sampai melimpahi berlaku. Satu adalah memenuhi sampai melimpahi apabila strategi meminta pembatalan pesanan yang belum selesai, tetapi perintah sementara menunggu mendapat diisi sebelum permintaan itu membatalkan tiba. Ia kemudian keluar kedudukan baru di pasaran dan mematikan strategi.
Saya dapati ini hampir ditanggung lagi dengan strategi membuat pasaran kerana memenuhi sampai melimpahi hampir pasti akan berlaku sekurang-kurangnya sekali sehari. Pesanan Diurus mempunyai pilihan untuk mematikan memenuhi sampai melimpahi dan pengendalian dalam apa jua cara peniaga difikirkan sesuai. Dalam kes saya,, ia adalah untuk hanya meningkatkan jumlah kedudukan yang strategi yang cuba untuk keluar dari.
Kelemahan utama untuk pesanan yang tidak terurus adalah bahawa semuanya dikesan secara dalaman. Jika anda perlu melumpuhkan strategi untuk mengubah tetapan atau kehilangan sambungan broker, kod ini mungkin tidak akan berinteraksi dengan baik dengan kedudukan yang sudah terbuka. Apa sahaja objek IOrder disimpan dalam memori, iaitu bagaimana strategi yang mengetahui apa jawatan dibuka, hilang apabila strategi yang dikeluarkan dari carta.
Strategi Diurus juga mengambil lebih banyak masa untuk menguji. Jumlah kod yang terlibat tidak berbeza secara dramatik dari perintah berjaya. Ia lebih besar, tetapi tidak begitu grotesquely. Alasan bahawa ia mengambil masa yang lebih adalah bahawa interaksi antara jenis perintah tidak digilap seperti ia adalah dalam perintah berjaya. Pengaturcara mesti menulis segala-galanya dari awal, yang selalunya bermakna bahawa strategi ini akan mengalami banyak lebih banyak pepijat awal, terutamanya dalam persekitaran yang secara langsung.
Strategi yang bergantung kepada pesanan pasaran tidak perlu mempertimbangkan pendekatan ini pada pendapat saya. Ia menyebabkan lebih banyak kerja dan saya masih belum menghadapi situasi di mana ia masuk akal. Lebih penting lagi, Saya tidak boleh memikirkan keadaan hipotetikal di mana ia akan masuk akal sama ada.