Apabila menggunakan Perunding Pakar (EA), setiap kali ada kutipan tick baru, terminal MetaTrader akan memanggil fungsi pengendalian acara OnTick() secara default. Namun, tidak ada fungsi pengendalian acara yang ditetapkan untuk menandakan bila bar (lilin) baru bermula atau dibuka.
Untuk mengenal pasti ini, kita perlu memantau waktu pembukaan bar yang paling baru. Apabila waktu ini berubah, ia menandakan permulaan bar baru dan kita boleh bertindak balas terhadapnya. Berikut adalah contoh kod yang boleh digunakan, dan ia serasi dengan MQL4 dan MQL5:
// Pengendali acara tick default void OnTick() { // Semak untuk bar baru (serasi dengan MQL4 dan MQL5). static datetime dtBarCurrent = WRONG_VALUE; datetime dtBarPrevious = dtBarCurrent; dtBarCurrent = iTime( _Symbol, _Period, 0 ); bool bNewBarEvent = ( dtBarCurrent != dtBarPrevious ); // Bertindak balas kepada acara bar baru dan tangani. if( bNewBarEvent ) { // Kenal pasti jika ini adalah tick pertama yang diterima dan tangani. /* Contohnya, apabila ia pertama kali dilampirkan pada carta dan bar itu berada di tengah-tengah prosesnya dan ia sebenarnya bukan permulaan bar baru. */ if( dtBarPrevious == WRONG_VALUE ) { // Lakukan sesuatu pada tick pertama atau di tengah bar ... } else { // Lakukan sesuatu apabila bar normal bermula ... }; // Lakukan sesuatu tanpa mengira keadaan di atas ... } else { // Lakukan sesuatu yang lain ... }; // Lakukan perkara lain ... };
Dalam kod di atas, pembolehubah statik menyimpan waktu pembukaan bar walaupun ketika kembali dari fungsi OnTick(). Berbeza dengan pembolehubah lokal biasa, ia mengingati kandungan datanya dan tidak melepaskannya apabila meninggalkan fungsi. Ini adalah kunci untuk mengenal pasti perubahan dalam waktu pembukaan bar semasa.
Penting juga untuk diingat, apabila EA pertama kali diletakkan pada carta, kod di atas akan bertindak seolah-olah bar baru sahaja dibuka. Keadaan ini memerlukan pengendalian khas jika situasi perlu ditangani dengan cara yang berbeza.
Sila ambil perhatian bahawa semua kod sumber penerbitan saya dalam CodeBase kini juga tersedia dalam tab "Projek Awam" di MetaEditor dengan nama "FMIC".
Siaran berkaitan
- MQL5 Wizard: Cipta Sistem Trading Berdasarkan Pola Morning/Evening Star dan RSI
- Panduan Lengkap MQL5 Wizard untuk Isyarat Dagangan Berdasarkan Morning/Evening Stars dan Stochastic
- MQL5 Wizard: Cipta Isyarat Dagangan Berdasarkan Corak Hammer/Hanging Man dan Stochastic
- MQL5 Wizard: Cipta Isyarat Dagangan Menggunakan Corak Morning/Evening Star dan MFI
- Menggunakan MQL5 Wizard untuk Signal Perdagangan '3 Black Crows/3 White Soldiers' + RSI