Cara Mengesan Permulaan Bar Baru dalam MetaTrader 5 untuk EA

Mike 2022.04.24 09:38 13 0 0
Lampiran

Bagi seorang System Trading (EA), apabila terdapat tick baru yang sampai, terminal MetaTrader akan memanggil fungsi pengendalian acara lalai OnTick(). Namun, tiada fungsi pengendalian acara lalai untuk mengesan bila bar (candle) baru dibuka.

Untuk mengesan ini, kita perlu memantau waktu pembukaan bar terkini. Apabila waktu ini berubah, ia menandakan permulaan bar baru dan kita boleh bertindak balas terhadapnya. Berikut adalah contoh kod yang serasi dengan MQL4 dan MQL5 yang menunjukkan cara untuk mencapainya:

// Pengendali acara tick lalai
  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 terhadap acara bar baru dan kendalikannya.
        if( bNewBarEvent )
        {
            // Kenal pasti jika ini adalah tick pertama yang diterima dan kendalikannya.
              /* Contohnya, apabila ia pertama kali dilampirkan pada carta dan
                  bar berada di tengah-tengah prosesnya dan
                  ini bukan sebenarnya permulaan bar baru. */
              if( dtBarPrevious == WRONG_VALUE )
              {
                  // Lakukan sesuatu pada tick pertama atau tengah bar ...
              }
              else
              {
                  // Lakukan sesuatu apabila bar biasa 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 setelah keluar dari fungsi OnTick(). Berbanding pembolehubah tempatan biasa, ia menyimpan kandungan datanya dan tidak melepaskannya semasa keluar dari fungsi. Ini adalah kunci untuk mengesan perubahan waktu pembukaan bar semasa.

Perlu diingat juga, apabila EA pertama kali diletakkan pada carta, kod di atas bertindak seolah-olah bar baru sahaja dibuka. Keadaan ini memerlukan pengendalian khas jika situasi perlu ditangani dengan cara berbeza.

Sila ambil perhatian, bahawa semua kod sumber penerbitan CodeBase saya kini juga boleh didapati di tab "Projek Awam" di MetaEditor di bawah nama "FMIC".
Senarai
Komen 0