Dasar dari Penulisan Ahli di NTL | IFCM Indonesia
IFC Markets - Perdagangan Mata Uang Forex

Dasar dari Penulisan Ahli di NTL

Pengantar

Artikel ini dimaksudkan untuk programmer yang berencana untuk menulis keahlian pertama mereka di NTL+. Ini akan mencakup sejumlah fitur dari ahli pembuatan, pengetahuan yang akan membantu menghindari banyak kesalahan dan menghemat waktu yang dihabiskan untuk menulis dan debugging script (istilah 'script' di NTL + adalah umum untuk tiga jenis program: ahli, indikator dan utilitas).


Menciptakan keahlian

Dalam rangka untuk menciptakan ahli baru, pergi ke jendela Navigator, klik kanan pada folder Advisors dan pilih Create fungsi dari menu konteks. Anda akan ditawarkan untuk memasukkan nama untuk ahli baru. Harap dicatat bahwa nama ahli sesuai dengan aturan standar untuk Windows OS nama file: nama tidak dapat berisi karakter berikut: * | \:? "<> / .


Setelah file ahli baru telah dibuat, Anda akan melihat template awal dengan 3 fungsi: Inisialisasi (), Run (), DeInitialize (). Masing-masing fungsi dijalankan pada saat tertentu dari kehidupan ahli. Dengan demikian, programmer tidak perlu untuk memanggil mereka, karena prosesnya otomatis.


Segera setelah memulai ahli, Initialize () function dijalankan tepat setelah awal ahli dan ditujukan untuk menginisialisasi parameter. Perlu menunjukkan bahwa operasi trading tidak harus dilakukan dalam fungsi Initialize (), sebagai nilai-nilai parameter trading (misalnya, harga Bid dan Ask, data akun, informasi tentang posisi dan pesanan) tidak dapat ditentukan pada saat ini initialize () sedang diluncurkan.


Setiap kali tick datang, fungsi Run () disebut; itu adalah fungsi ini yang seharusnya berisi kode script utama,. Dalam kode ini, adalah mungkin untuk menganalisis situasi pasar saat ini, membuat keputusan tentang perlunya melakukan operasi perdagangan, baik melakukan perhitungan matematis. Pengolahan data untuk setiap tick tidak boleh melebihi 10 detik, jika tidak program secara otomatis akan menghentikan ahli pengguna.


Ketika seorang ahli dihentikan, fungsi DeInitialize () dipanggil, yang mengambil beberapa langkah akhir sebelum script berhenti. Banyak script tidak memerlukan langkah-langkah apa saja di bawah inisialisasi dan deinitializing, dalam hal ini Initialize () dan DeInitialize () fungsi dapat dikosongkan atau benar-benar dihapus dari script (terminal tidak akan menyebut mereka).


Menyusun algoritma dan menulis kode ahli

Tahap pertama adalah pengembangan algoritma yang akan dijalankan oleh ahli trading Anda. Algoritma ini harus memiliki struktur yang jelas dan komentar rinci, yang akan memudahkan debugging lanjut, modifikasi dan optimasi.


Hal ini diperlukan untuk menentukan kriteria trading untuk membuka posisi panjang dan pendek, kondisi di mana posisi akan ditutup, dan bagaimana jumlah posisi terbuka akan dikendalikan dan terbatas. Jika ahli Anda adalah untuk mengatur pending order (termasuk OCO dan aktivasi yang), terlebih dahulu Anda harus mempertimbangkan kemungkinan menghapus atau memodifikasi pesanan sudah ditempatkan.


Keberhasilan seorang ahli secara keseluruhan tergantung pada pilihan yang tepat kriteria trading untuk membuka posisi / penutupan dan perintah pengaturan. Dengan cara ini, pengembangan strategi sangat penting untuk ahli yang baik. Kriteria trading dapat dibuat atas dasar technical indicators, analisis tingkat harga dan perhitungan lainnya berdasarkan pemahaman Anda tentang trading yang efektif.


Pikiran intervensi manual dengan pengoperasian ahli; bagaimana jika ahli membuka posisi, dan Anda menutupnya di terminal? Pertimbangkan, apakah ahli dapat beralih ke kondisi yang tidak direncanakan, yang akan menyebabkan kerusakan.


Untuk memfungsikan, Anda akan perlu untuk menganalisis status posisi terbuka dan menempatkan pesanan di setiap tick. Penggunaan akan menjadi sifat Deals.Total dan Orders.Total bahwa sifat jumlah posisi terbuka dan menempatkan pesanan, dan Deals.Select () dan Orders.Select () metode yang digunakan untuk memilih posisi atau perintah.


Hal ini juga layak memperhatikan pemulihan pekerjaan ahli setelah restart terminal: apakah itu beralih ke kondisi yang sama itu sebelum restart. Memperhitungkan situasi ketika beberapa posisi antara restart dapat ditutup oleh stop-loss atau take-profit, dan perintah dapat diaktifkan, yang akan memerlukan pembukaan posisi baru.


Anda harus meramalkan tindakan pada terjadinya kesalahan standar dan situasi, misalnya, kurangnya dana untuk posisi membuka atau upaya untuk set orders yang terlalu dekat dengan harga saat ini.


Akses ke data status account dapat diberikan melalui objek Akun dan sifat-sifatnya. Misalnya, Account.Balanceproperty yang digunakan untuk memperoleh neraca transaksi berjalan, dan properti Account.MarginFree - untuk mendapatkan jumlah margin bebas.


int Run() { // initialize a variable "volume" – the volume set in base currency int volume = 10000; if(Account.MarginFree < volume/Account.Leverage) return -1; }

Perhatikan garis return -1, eksekusi operator ini berhenti ahli paksa.


Bekerja dengan riwayat kutipan

Penggunaan deret waktu memungkinkan Anda untuk mendapatkan riwayat kutipan dari simbol saat ini untuk menganalisis situasi pasar masa tertentu. Timeseries mewakili sekelompok array: Terbuka [] - pembukaan bar harga, Tutup [] - harga penutupan bar, Tinggi [] - tertinggi bar harga, Rendah [] - terendah bar harga, Waktu [] - pembukaan bar waktu dan Volume [] - Volume centang bar (jumlah kutu per bar). Semua deret waktu relevan dengan grafik simbol ini, di mana ahli sedang berjalan, dan kerangka waktu saat ini. Timeseries memiliki pengindeksan sebaliknya: elemen terakhir (yang terakhir dalam hal waktu) memiliki indeks 0, dan elemen pertama - indeks sama dengan Bars.Total (Chart.Symbol, Chart.Interval) -1.


Jika diperlukan untuk mendapatkan data untuk setiap simbol lain, Anda akan perlu menggunakan Bars obyek. metode yang Terbuka (), tinggi (), Low (), Tutup (), Volume (), Waktu () mirip dengan metode deret waktu yang sesuai, satu-satunya perbedaan adalah bahwa Anda harus menentukan simbol, ukuran bar (selang, jangka waktu) dan jumlah bar yang ingin Anda mendapatkan nilai untuk. Sebelum menjalankan script, Anda harus berlangganan ke semua simbol script bekerja dengan. Untuk melakukan hal ini, buka MarketWatch window, klik kanan pada bidang kosong, pilih Langganan dari menu konteks, klik pada simbol yang diinginkan dan tekan "OK ".


Pada para ahli, Anda mungkin perlu untuk menentukan kapan sebuah bar baru akan terbuka atau ketika pembentukan sebuah bar sebelumnya selesai. Untuk tujuan ini, Anda dapat menggunakan Volume Array global. Nilai Volume [0] meningkat dengan satu di setiap centang dan me-reset ke 1 setelah tick pertama bar baru. Dengan demikian, untuk menentukan saat pembukaan bar baru, pembangunan berikut dapat digunakan:


int Run() { if(Volume[0]==1) { // Some code to run whe opening a new bar. } }

Hasil kerja Run () dapat dengan mudah dihentikan menggunakan operator pulang untuk semua nilai untuk Volume [0] kecuali untuk 1:


int Run() { if(Volume[0]>1) return (0); // Some code to run wher opening a new bar. }

Metode Alternatif lain adalah menganalisis bar waktu pembukaan, jika waktu selama dua kutu terakhir pertandingan, Anda bisa keluar dari fungsi dengan menggunakan kembali (0) operator. Pada pembentukan sebuah bar baru, kita mendapatkan nilai yang berbeda untuk waktu [0] pada kutu saat ini dan sebelumnya - itu adalah acara ini yang berarti pembukaan bar baru.


datetime lasttime=0; int Run() { if(lasttime == Time[0]) return(0); // Some code to run whe opening a new bar. lasttime = Time[0]; }

Uji ahli

Advisor Tester dimaksudkan untuk mengevaluasi efektivitas ahli dan memeriksa fungsinya. Untuk memulai tester, pilih View -> Advisor Tester di menu utama. Ada tab untuk beralih antara bagian dari tester di bagian atas jendela yang:


  • Parameter - parameter penguji
  • Hasil - presentasi tabular dari informasi tentang posisi
  • Ekuitas Grafik - perubahan keseimbangan dan ekuitas
  • Jurnal - berkas jurnal

Parameter

Pada tab Parameter, Anda dapat menentukan parameter berikut yang memiliki dampak pada proses pengujian:


  • Daftar drop-down Advisor - memilih penasihat untuk pengujian.
  • Tombol Properties - memanggil parameter ahli untuk editing. Dari ahli tidak memiliki parameter, ditentukan dengan kata kunci extern, maka tombol akan dinonaktifkan.
  • Symbol – Simbol untuk pengujian *.
  • Interval – Interval (jangka waktu) untuk pengujian.
  • Spread – Pilihan nilai spread. Current spread pilihan sesuai dengan nilai saat ini dari spread. Anda juga dapat memasukkan nilai non-negatif dalam bidang Spread.
  • Method – metode pengujian. Hal ini dapat menjadi salah satu pilihan berikut Control Points atau Open Price Only. ketika memilih Control points 4 kutu secara otomatis dihasilkan untuk setiap bar (urutan diberikan lebih lanjut). Kutu sesuai dengan Open, Low, High, Tutup harga bar dengan harga pembukaan lebih rendah dari harga penutupan; untuk bar dengan harga pembukaan lebih tinggi dari harga penutupan - Open, High, Low, Close.
    img
    Untuk metode Open Prices Only, semua trading hanya dilakukan pada harga pembukaan. Unsur-unsur berikut dari deret waktu pada indeks nol akan sama satu sama lain Terbuka [0] = Tinggi [0] = Rendah [0] = Tutup [0], nilai-nilai untuk non zero-indeks dari deret waktu bertepatan dengan nilai-nilai yang sesuai dari deret waktu untuk metode Control Points.
  • Limit Dates kotak centang digunakan untuk mengaktifkan pembatasan untuk rentang diuji dari tanggal
  • Masukan kolom tanggal From and To digunakan untuk menentukan rentang tanggal untuk pengujian. nilai default sesuai dengan rentang riwayat dimuat untuk simbol tertentu dan selang.
  • Deposit awal - setoran awal pada awal pengujian.
  • Enable visual mode centang kotak digunakan untuk menampilkan grafik dengan pembukaan dan penutupan posisi ditandai, serta saat-saat pengaturan perintah 'untuk terakhir diuji positif sementara pengujian sedang berlangsung.
  • Enable expert logs kotak centang digunakan untuk mencetak keluaran dari fungsi System.Print () ke tab Journal.
  • Tombol Start / Stop dimulai dan berhenti pengujian.

memeriksa Enable visual mode and Enable expert logs centang mempengaruhi kecepatan pengujian, sehingga dianjurkan untuk menandai mereka hanya jika diperlukan.


* Uji ahli multicurrency tidak sepenuhnya didukung pada saat ini. Jika Anda menguji penasihat yang bekerja dengan penawaran pada beberapa mata uang dan berbagai riwayat dimuat untuk kutipan dari simbol-simbol ini tidak cocok, bid dan ask harga, deret waktu dan nilai-nilai yang dikembalikan oleh metode dari Barsobjek dapat menjadi nol.


Hasil

Tab Hasil menampilkan informasi pada semua posisi terbuka dan tertutup selama proses pengujian. Meja dengan posisi tertutup terletak di bagian atas. Ini menampilkan informasi berikut:


  • # Nomor - nomor ordinal dari posisi tertutup. # 1 ditugaskan untuk kesepakatan tertutup pertama, # 2 - untuk kedua, dll
  • Deal ID – Posisi identifier tertutup Symbol – symbol on which the position was opened
  • Volume1 – Volume posisi di unit mata uang dasar
  • Volume2 – Volume posisi dalam unit mata uang yang dikutip
  • Open rate – harga terbuka
  • Open time – waktu terbuka
  • Stop loss – stop loss (hanya ditampilkan bila ditentukan)
  • Take profit – take profit (hanya ditampilkan bila ditentukan)
  • Last swap – posisi swap saat ini
  • Rate close – penutupan harga
  • Time close – waktu penutup
  • Profit – keuntungan dari posisi
  • Balance – keseimbangan setelah posisi ditutup *
  • Equity – ekuitas setelah posisi ditutup *

* Kolom ini ditampilkan dalam Show extended columns mode. Mode ini dapat diaktifkan melalui menu konteks meja.


Tabel bawah menampilkan posisi yang tidak ditutup pada akhir pengujian. Judul kolom bertepatan dengan judul yang Closed Positions kolom tabel, kecuali untuk kolom yang hilang terkait dengan posisi tertutup.


Baris status bawah menampilkan informasi tentang keseimbangan, kesetaraan, persyaratan margin dan margin bebas seperti pada saat ketika pengujian selesai.


Grafik ekuitas

Grafik menampilkan perubahan keseimbangan dan ekuitas, tergantung pada jumlah posisi tertutup. Klik dua kali pada grafik menunjukkan kesepakatan yang relevan dalam tabel Closed positions.


Jurnal

Journal tab menampilkan output teks dari fungsi System.Print () digunakan dalam ahli. Jika Enable expert logs kotak centang pada Parameter tab dimatikan, jurnal hanya akan memiliki start dan stop perintah ahli.


Melakukan debug skrip

Melakukan debug skrip jarang dilakukan tanpa menggunakan System.Print () fungsi, yang menampilkan informasi tentang Journal tab of the Toolbox jendela (atau pada tab Journal jendela tester). Namun, akan sangat membantu untuk mengetahui bahwa ketika Anda menjalankan ahli, informasi yang ditampilkan juga digandakan dalam file log di username \ Documents \ NetTradeX Advisors \ log folder. file log dapat dibuka dengan editor teks apapun yang mendukung format txt. File log berisi catatan dengan waktu dari suatu peristiwa, kode kembali dan pesan teks.


Menambahkan pengolahan nilai System.LastError Properti memungkinkan Anda untuk menganalisis situasi ketika malfungsi ahli Anda. Properti ini menyimpan kode dari kesalahan terakhir yang terkait dengan operasi trading. Properti ini memiliki satu fitur penting: setiap operasi trading berikutnya mengubah properti sesuai dengan hasil pekerjaannya. Dengan demikian, jika Anda memiliki script yang membuat permintaan untuk kesepakatan dengan parameter yang salah dan kemudian menempatkan pesanan dengan parameter yang benar, nilai nol (tidak ada kesalahan) akan disimpan dalam System.LastError. Oleh karena itu System.LastError nilai properti harus diterima sebelum operasi trading berikutnya (dalam kasus kami, menempatkan pesanan), sehingga akan menyimpan kode dari kesalahan terjadi selama proses pembuatan kesepakatan. The System.ErrorDescription () metode yang digunakan untuk menerima penjelasan teks dari kesalahan, ia membawa kembali garis dengan deskripsi teks dari masalah; satu-satunya nilai masukan mewakili kode kesalahan numerik diterima melalui System.LastError.


Ketika debugging sedang berlangsung, yang IsStopped milik System objek juga dapat berguna. Ini memiliki nilai sebenarnya, jika pelaksanaan program pada tick kedatangan terakhir terjadi lebih dari 7 detik. Dengan bantuan properti ini, programmer diinformasikan bahwa script akan segera paksa dihentikan (setelah 3 detik), sehingga beberapa waktu yang diberikan sehingga program dapat melakukan operasi tertentu yang terkait dengan penyelesaian yang benar dari script.


Ringkasan

Kesimpulannya, harus menunjukkan bahwa proses penciptaan ahli dapat dibagi menjadi dua tahap penting: mengembangkan algoritma dan coding nya. lebih berhati-hati tahap pertama adalah bekerja keluar, lebih mudah dan lebih cepat pelaksanaan yang kedua adalah. Pasal ini telah mencakup isu-isu tertentu concerting penciptaan algoritma dan solusi praktis sehingga memungkinkan untuk menyederhanakan pengenalan pertama Anda dengan NTL + dan kemampuan untuk ahli trading.


Close support
Call to Skype Call to messenger Call to telegram Call to WhatsApp Call Back