""Yeni Çubuk" Olay İşleyicisi" makalesi için tartışma - sayfa 5

 
tito.vinicius:

Şu anda EA'm aynı mum üzerinde birkaç sipariş açıyor. Bu makaledeki materyalin bana yardımcı olacağını düşünüyorum.

Bunu nasıl uygulayabilirim?


Ticaret giriş mantığını OnTick () olayından çıkarabilir ve OnNewBar () işlevinin içine koyabilirsiniz. Bu şekilde, yalnızca yeni bir çubuk olduğunda yürütülecektir, artık aynı mum üzerine birkaç kez girilmeyecektir, çünkü bir kez yürütüldüğünde, yalnızca bir sonraki mumda tekrar yürütülecektir.

 
bu çok güzel kağıt parçası için çok teşekkür ederim - çabalarınız çok takdir ediliyor!
 

Güzel makale.

Teşekkürler!

 

Çok çok güzel teşekkürler,

Bir MQL5 kütüphanesi işlevi umuyordum ama görünüşe göre yok mu? Modüler bir ticaret lib'im var ve sinyal modülünün IsNewBar bayrağını ayarlayacağı ve prevCandleTime'ı geçersiz kılacağı ve TrailingSL modülünün aynı işlevi değerlendirmesi gerektiğinde prevCandleTime akımla aynı olduğu için yanlış döndürdüğü sorunla karşılaştım.

Evet, sonucu merkezi bir bayrakta saklayabilir ve tüm modüller için kullanabilirim ve bunun üzerine koşmam, ancak modüller farklı zaman dilimlerinde çalışabilir, bu nedenle bu çözüm çok mükemmel teşekkürler.

 
Çok bilgilendirici bir makale, çok teşekkür ederim
 
Teşekkürler, yeni bir barı tespit etmenin en iyi yolu! :)
 
Bana göre, bazen işleri gereksiz yere karmaşıklaştırıyoruz. Pratik nedenlerden dolayı, performans açısından bile hiçbir şey sistem zamanını (windows zamanı) geçemez. Bir sonraki dakikanın başında veya emin olmak için birkaç saniye sonra, her Sembol için yeni bir çubuk olacağını varsayabiliriz. Diyelim ki dakika... beş dakika... on beş dakika veya zaman diliminiz ne olursa olsun. Emin olmak için, çubuk zamanı ile sistem zamanının aynı olup olmadığınıkontrol edebilirsiniz.

Ancak, hepimiz aslında yeni bir çubuğun ne zaman boyanacağını bildiğimizde, sadece yeni bir çubuk olup olmadığını kontrol etmek için bu sınıfın birden fazla örneğini oluşturmaya gerek yoktur.


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("Yeni bir bar geliyor.", TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

Merhaba, Open () teklifi gelir gelmez bunun yeni bir çubuğun geldiği anlamına geldiğini varsayıyorum. IMHO daha mı kolay yoksa bir şey mi kaçırıyorum?

 
Max Go yeni bir çubuğun geldiği anlamına gelir. IMHO daha kolay mı yoksa bir şey mi kaçırıyorum?

Yeni bir çubuğun açılış fiyatının bir önceki çubuğun açılış fiyatına eşit olduğu bir durum düşünün.... Küçük TF'lerde böyle bir durumu yakalama olasılığı yüksektir.

 

Bundan daha basit bir yöntemim yok.
Mevcut çubuğun açılış zamanını izler ve her tıklamada bunları karşılaştırır.

// Bundan daha basit bir yöntemim yok.
// Geçerli çubuğun açılış zamanını izler ve her tikte karşılaştırır.

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5