Mendeteksi Awal Bar Baru di MetaTrader 5 untuk EA

Mike 2022.04.24 09:38 18 0 0
Lampiran

Dalam dunia trading, mendeteksi kapan bar (candle) baru terbuka adalah hal yang sangat penting, terutama bagi pengguna Expert Advisor (EA). Ketika ada kutipan tick baru, terminal MetaTrader akan memanggil fungsi pengelolaan acara OnTick(). Namun, tidak ada fungsi bawaan untuk menangani pembukaan bar baru.

Untuk mendeteksi hal ini, kita perlu memantau waktu pembukaan bar terbaru yang sedang aktif. Ketika waktu tersebut berubah, itu menandakan bahwa bar baru telah terbuka dan kita dapat bereaksi terhadapnya. Berikut adalah contoh kode yang kompatibel dengan MQL4 dan MQL5 tentang cara melakukannya:

// Pengelola acara tick default
   void OnTick()
   {
      // Cek untuk bar baru (kompatibel dengan MQL4 dan MQL5).
         static datetime dtBarCurrent  = WRONG_VALUE;
                datetime dtBarPrevious = dtBarCurrent;
                         dtBarCurrent  = iTime( _Symbol, _Period, 0 );
                bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );

      // Bereaksi terhadap peristiwa bar baru dan tangani.
         if( bNewBarEvent )
         {
            // Deteksi jika ini adalah tick pertama yang diterima dan tangani.
               /* Misalnya, ketika pertama kali ditempelkan pada grafik dan
                  bar berada di tengah progresnya dan
                  ini bukan sebenarnya awal dari bar baru. */
               if( dtBarPrevious == WRONG_VALUE )
               {
                  // Lakukan sesuatu pada tick pertama atau tengah bar ...
               }
               else
               {
                  // Lakukan sesuatu saat bar normal mulai ...
               };

            // Lakukan sesuatu terlepas dari kondisi di atas ...
         }
         else
         {
            // Lakukan sesuatu yang lain ...
         };

      // Lakukan hal lain ...
   };

Pada kode di atas, variabel static menyimpan waktu pembukaan bar, bahkan saat kembali dari fungsi OnTick(). Berbeda dengan variabel lokal biasa, variabel static akan mengingat isi datanya dan tidak akan dirilis saat keluar dari fungsi. Inilah kunci untuk mendeteksi perubahan waktu pembukaan bar saat ini.

Perlu dicatat juga, bahwa ketika EA pertama kali ditempatkan pada grafik, kode di atas akan bereaksi seolah-olah bar baru saja terbuka. Kondisi ini memerlukan penanganan khusus jika situasi perlu ditangani secara berbeda.

Jangan lupa, semua kode sumber publikasi saya di CodeBase kini juga tersedia di tab "Proyek Publik" di MetaEditor dengan nama "FMIC".

Daftar
Komentar 0