Yeni bir çubuk nasıl tespit edilir

 

Herkese selam,

MQL5'te tamamen acemiyim ama diğer platformlar için oldukça fazla kodlama yaptım.

Bir EA'nın yalnızca yeni bir çubukta yürütmesinin neden bu kadar zor olduğunu merak ediyorum. "Yeni çubuk" olay işleyicisi de dahil olmak üzere bazı makalelere baktım ve çok zor görünüyor.  

Bu işe yaramazsa ve "yeni çubuk" olay işleyicisini kullanmam gerekiyorsa, ilgili dosyaları indirip Dosyalar(?) klasörüne kopyalamak ve ardından #include onları mümkün mü? Temelde ne yaptıkları hakkında hiçbir fikri olmayan benim gibi insanlar için bunun belgelendiği bir yer var mı?

https://www.mql5.com/en/articles/100 adresindeki öğretici üzerinde çalışıyorum ve fark ettiğim ilk şey, üzerinde hesaplamalar yapmak için yeterli çubuk olduğundan emin olmak için "Barlar" işlevinin kullanılmasıydı, ancak bir sonraki kod parçası, görünüşe göre yeni bir çubuğu algılamak için tasarlandı ve (zaten anladığım kadarıyla) çok karmaşık bir kod parçası. Çubuklar işlevi yeni bir Çubuğu algılamak için kullanılamaz mı? if(Bars > int LastBarCount ) {bool IsNewBar = true; LastBarCount = Çubuklar;} başka {IsNewBar = false;}. Böyle bir şey işe yarar mı? .

İstek listesi için bir tane. OnTick yerine geçersiz kılabileceğimiz bir OnNewBar olayı olsaydı iyi olmaz mıydı? Gördüğüm her gösterge kenelerde değil çubuklarda çalıştığından, herkesin hayatını çok daha kolaylaştıracağını düşünüyorum.

Az önce başka bir olasılık buldum: "BarsCalculated". Yine, açıklamadan bunun ne anlama geldiğinden tam olarak emin değilim, ancak EA'nın zaten işlediği çubukların sayısı gibi görünüyor. Eğer bu doğruysa, kontrol etmem gereken tek şey if(Bars > BarsCalculated), eğer doğruysa o zaman gidip işlemlerimi yapın, aksi halde geri mi dönelim? Bir şey mi kaçırıyorum?

Teşekkürler,

Ian

Step-By-Step Guide to writing an Expert Advisor in MQL5 for Beginners
  • 2010.06.09
  • Samuel
  • www.mql5.com
The Expert Advisors programming in MQL5 is simple, and you can learn it easy. In this step by step guide, you will see the basic steps required in writing a simple Expert Advisor based on a developed trading strategy. The structure of an Expert Advisor, the use of built-in technical indicators and trading functions, the details of the Debug mode and use of the Strategy Tester are presented.
 


Bunu EA'nızda OnTick işlevinin başında deneyin.

// Bar zamanına hizmet etmek için statik Old_Time değişkenini kullanacağız.

// Her OnTick yürütmesinde, mevcut çubuk zamanını kayıtlı olanla kontrol edeceğiz.

// Çubuk zamanı kaydedilen zamana eşit değilse, yeni bir tik aldığımızı gösterir.


statik tarihsaat Old_Time;

tarihsaat New_Time[1];

bool IsNewBar=yanlış;


// son çubuk zamanı New_Time[0] öğesine kopyalanıyor

int kopyalanan=CopyTime(_Symbol,_Period,0,1,New_Time);

if(copied>0) // tamam, veriler başarıyla kopyalandı

{

if(Old_Time!=New_Time[0]) // eğer eski zaman yeni bar zamanına eşit değilse

{

IsNewBar=true; // ilk arama değilse, yeni çubuk belirdi

if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Burada yeni bir çubuğumuz var ",New_Time[0]," eski zaman ",Old_Time);

Old_Time=New_Time[0]; // bar zamanını kaydetme

}

}

başka

{

Alert("Geçmiş zaman verileri kopyalanırken hata oluştu, error =",GetLastError());

ResetLastError();

dönüş;

}


//--- EA, yalnızca yeni bir çubuğumuz varsa yeni ticareti kontrol etmelidir

if(IsNewBar==yanlış)

{

dönüş;

}

//--- Çalışmak için yeterli barımız var mı?

int Mybars=Barlar(_Symbol,_Period);

if(Mybars<60) // eğer toplam barlar 60 bardan az ise

{

Alert("60 bardan daha azına sahibiz, EA şimdi çıkacak!!");

dönüş;

}


 

Merhaba oneillj,

Zaten cevap verdiğimi sanıyordum, ama görünüşe göre internet eterinde kayboldu.

Sağladığınız kod parçası, hemen hemen ilk başta şikayet ettiğim kod parçası. Neden bu kadar karmaşık? Sadece daha kolay bir yolu olması gerektiğini düşündüm. İşe yarayacak gibi görünen bununla geldim. Yanılıyorsam lütfen beni düzeltin. (Ayrıca BarsCalculated kullanmayı denedim , ancak her zaman Bars'a eşitti, bu nedenle test her zaman false olarak değerlendirildi.)

statik int LastBarCount = 0;
if (Barlar(_Symbol, _Period) > LastBarCount)
LastBarCount = Çubuklar(_Symbol, _Period);
başka
dönüş;

;-) Ian
Documentation on MQL5: Timeseries and Indicators Access / BarsCalculated
  • www.mql5.com
Timeseries and Indicators Access / BarsCalculated - Documentation on MQL5
 
Bunu kullanıyorum...
 static int BARS;
//+------------------------------------------------------------------+
//| NewBar function                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
   {
       if (BARS!= Bars ( _Symbol , _Period ))
        {
            BARS= Bars ( _Symbol , _Period );
             return ( true );
        }
       return ( false );
   }
 
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.
 
ssn :
Bunu kullanıyorum...
Bu yöntemle ilgili risk, sembolünüz için fiyat verilerinin 4 Ocak 1971'den başlamaması durumunda, eksper grafiğe eklendiğinde yüklenen herhangi bir geçmiş verinin yeni bir çubuk olarak okunmasıdır...
 
Bu konu ile ilgisi olmayan yorumlar " MT4'te mql5 kullanılabilir mi? " bölümüne taşınmıştır.
 

iTime işlevi , çubuğun zamanını verir.

Değiştiğinde yeni bir çubuktur.

 
Nathan5 :

iTime işlevi, çubuğun zamanını verir.

Değiştiğinde yeni bir çubuktur.

Bu konu mql5 ile ilgilidir. iTime() işlevi yoktur.
 

Bunu da deneyebilirsiniz:


 // Rates structure array for last two bars 
   MqlRates mrate[ 2 ];                 
   CopyRates ( Symbol (), Period (), 0 , 2 , mrate);

// NEW BAR CHECK.
//---------------
   static double    dBar_Open;     
   static double    dBar_High;
   static double    dBar_Low;
   static double    dBar_Close;
   static long      lBar_Volume;
   static datetime nBar_Time;

// Boolean for new BAR confirmation. 
   bool bStart_NewBar = false ;

// Check if the price data has changed tov the previous bar.   
   if (mrate[ 0 ].open != dBar_Open || mrate[ 0 ].high != dBar_High || mrate[ 0 ].low != dBar_Low || mrate[ 0 ].close != dBar_Close || mrate[ 0 ].tick_volume != lBar_Volume || mrate[ 0 ].time != nBar_Time)
         {
         bStart_NewBar = true ; // A new BAR has appeared!        

// Update the new BAR data.     
         dBar_Open   = mrate[ 0 ].open;      
         dBar_High   = mrate[ 0 ].high;
         dBar_Low    = mrate[ 0 ].low;
         dBar_Close  = mrate[ 0 ].close;                 
         lBar_Volume = mrate[ 0 ].tick_volume;
         nBar_Time   = mrate[ 0 ].time;
         }

// Check if a new bar has formed.   
   if (bStart_NewBar == true )
         {
         
// Your code.          
         
         }
 
Stephen Njuki :
Bunu kullanıyorum...
Ne yazık ki bu MQL5'te çalışmıyor gibi görünüyor.