Laman utama Perdagangan Sistem Siaran

Mengenal Pasti Permulaan Bar atau Lilin Baru dalam MetaTrader 4

Lampiran
39104.zip (884 bytes, Muat turun 1 kali)

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

Komen (0)