Condition Scanner (cs)
Cara Pemasangan:
Untuk menunjukkan apa yang boleh dilakukan oleh scanner:

- indikator pada carta dengan 4 plot,
- indikator tetingkap berasingan yang menunjukkan EMA RSI,
- indikator tetingkap berasingan yang menunjukkan di mana syarat-syarat yang mencadangkan perdagangan panjang atau pendek telah berlaku secara sejarah,
- dan indikator panel yang menunjukkan di mana syarat yang sama baru sahaja berlaku atau sedang berlaku di pelbagai pasangan dan jangka masa.
Kod yang umum untuk semua imbasan:
Kod khusus untuk strategi PP (Power Pro):
Kod khusus untuk strategi MAX (moving average crossover):
Kod yang idnya bermula dengan csXXXX:
Cara saya mengkod untuk syarat baru:
Saya memutuskan pengenalan strategi (contohnya PB untuk pinbars).
Saya menyediakan tetingkap seperti yang dinyatakan di atas di bawah "Untuk menunjukkan apa yang boleh dilakukan oleh scanner", membuang sebarang indikator sedia ada.
Jika imbasan baru saya bergantung kepada indikator pada carta, saya membinanya menggunakan csXXXX_0.mq4 sebagai corak. Saya ingat untuk 'simpan sebagai...' csPB_0.mq4. Saya menggunakan indikator khusus saya ke dalam carta kiri.
Jika saya memerlukan indikator tetingkap berasingan, saya juga membinanya. Saya ingat untuk 'simpan sebagai...' csPB_1.mq4. Saya mengaplikasikannya ke dalam carta kiri.
Saya membina indikator khusus daripada menggunakan indikator standard supaya saya boleh merujuknya di tempat lain menggunakan fungsi iCustom. Dengan cara ini, jika saya mengubah fikiran tentang parameter asas strategi saya (contohnya kaedah purata bergerak), saya hanya perlu mengubah indikator khusus saya. Jika saya menggunakan indikator standard, saya perlu mengubahnya dan kemudian menyelam ke dalam kod saya untuk menyesuaikan dengan perubahan fikiran saya.
Saya mengambil csXXXX_Chart.mq4, menggantikan semua contoh 'XXXX' dengan pengenalan strategi saya 'PB', dan menyimpan kod sebagai csPB_Chart.mq4. Ia tidak akan dikompilasi lagi kerana terdapat beberapa kod "include" yang masih perlu ditulis.
Sekarang untuk menyediakan kod "include".
Jika syarat yang ingin saya uji sangat mudah, saya hanya menggunakan fail "include" csXXXX_GetBarFlag.mqh, kod apa yang saya mahu, dan 'simpan sebagai...' csPB_GetBarFlag.mqh. Tetapi jika pengkodan itu rumit, saya kembali ke csPB_Chart.mq4 yang saya buat sebelum ini, saya komen keluar baris kod yang kini membaca "#include <csPB_GetBarFlag.mqh>", dan saya membina kod yang saya mahu terus dalam fail csPB_Chart.mq4. Setelah saya mendapatnya dengan bersih, saya pindahkan kod mencari syarat ke dalam fail "include" 'csPB_GetBarFlag.mqh' dan membatalkan komen pernyataan #include dalam fail 'csPB_Chart.mq4'.
Sekarang fail 'csPB_Chart.mq4' boleh dikompilasi dan digunakan pada carta kiri.
Pada ketika ini, saya menyimpan templat untuk carta kiri sebagai csPB-CHART.tpl. Ia mengandungi apa-apa indikator khusus pada carta, indikator khusus tetingkap berasingan, dan plot hasil yang berkaitan dengan carta semasa.
Saya memuatkan fail 'csXXXX_Panel.mq4', menggantikan semua contoh "XXXX" dengan "PB", kemudian 'simpan sebagai...' "csPB_Panel.mq4". Fail terakhir ini dikompilasi dan digunakan pada carta kanan. Ia mungkin sedikit perlahan untuk dijalankan ketika pertama kali digunakan tetapi tidak menggunakan banyak sumber ketika berjalan.
Saya menyimpan csPB_panel.tpl sebagai templat untuk carta kanan.
Saya biasanya menyimpan csPB sebagai profil.
CATATAN: Ketika membina indikator khusus dan merujuknya dengan fungsi iCustom, saya memastikan bahawa namanya tepat. Anda tidak akan mendapat amaran jika iCustom merujuk kepada indikator yang tidak wujud.
CATATAN: Mungkin terdapat pepijat di mana ketika indikator panel pertama kali dimuatkan, ia menghasilkan keputusan yang tidak konsisten dengan yang ada di carta tertentu yang sedang dipaparkan. Saya mendapati jika saya menukar skala waktu pada tetingkap panel (sehingga memaksa pengiraan semula), semuanya akan muncul dengan tepat. Saya sangat menghargai jika sesiapa dapat membantu saya menyelesaikan masalah ini.
CATATAN: Dalam kod ...GetBarFlag.mqh yang anda hasilkan sendiri, anda boleh mengembalikan mana-mana integer kepada program pemanggil untuk dipaparkan. Seperti yang ditetapkan, sifar bermakna 'tiada hasil' dan menyebabkan paparan simbol abu-abu yang menunjukkan bar yang diuji. Mengembalikan integer negatif akan menghasilkan paparan merah manakala integer positif akan menghasilkan paparan hijau.
Beberapa aspek perisian:
Kod ditulis sebagai indikator supaya, apabila panel dipaparkan dan anda ingin melihat pasangan tertentu dan jangka masa, anda hanya perlu memilih pasangan dari tetingkap Market Watch, seret dan lepas ke ruang carta semasa dan ubah jangka masa mengikut keperluan. Templat akan menguruskan selebihnya.
Untuk mengurangkan beban komputer, saya telah melakukan dua perkara.
Pertama, ketika berurusan dengan array siri masa, saya hanya pergi kembali ke 200 bar.
Kedua, perisian paparan panel tidak menguji syarat pengguna pada setiap tick. Ia menggunakan mekanisme pemasa supaya pengujian hanya diterapkan pada bar[0] jika bar[0] sudah terbentuk 90%, jika tidak, pengujian diterapkan pada bar[1]. Jika bar[1] mempunyai fokus (iaitu bar[0] kurang dari 90% terbentuk), ia diuji sekali dan masa perubahan ke bar[0] dikira. Untuk setiap tick yang datang selepas itu sehingga masa perubahan dicapai, tiada apa yang berlaku. Saya tidak 100% pasti bahawa saya telah menyandarkan ini dengan betul lagi tetapi ia nampaknya berfungsi dengan baik.