Gösterge Çeşitli Sorular - sayfa 4

 

Anahtar operatörünü kullanabilirsiniz.

       switch ( TimeHour ())
        {
         case 0 :
           // Do Something...
             break ;

         case 1 :
           // Do Something...  
             break ;

         case 2 :

             break ;

         case 3 :

             break ;

         case 4 :

             break ;

         case 5 :

             break ;

         case 6 :

             break ;
         // etc...
        }

Veya basit bir çift if ifadesi kullanın:

if ( TimeHour ()> 0 && TimeHour ()< 22 )
{
   // Do Something...
}

Eğer zaman saati > 0'ın üzerindeyse ama aynı zamanda && < 22'nin altındaysa vs.

Veya şunları kullanabilirsiniz:

if ( TimeHour ()>= 0 && TimeHour ()<= 22 )
{
   // Do Something...
}

Eğer zaman saati > veya == 0'a eşitse ve aynı zamanda && altındaysa < veya == 22'ye eşit vb.

Biraz farklıdır, çünkü eşit olduğu saati içerir, önceki örnek >0, 0'ın kendisini hariç tutar, çünkü eşittir, yani yukarıda değil.

 

#Ay Hatları - Benim için kapandı.

'Strategy Tester' ile test ettim ve gerçek zamanlı şu ana kadar mükemmel çalışıyor .

Yorumlarınızdan çok şey öğrendim ve bu göstergemi çok iyi yaptım, çok teşekkürler @ Marco vd Heijden

Bay Marco ve Bay William'a özel teşekkürler.

 

Aşağıdaki kod benim için iyi çalışıyor , ancak bazen alakasız olması uzun zaman alıyor (1250) .

EventSetMillisecondTimer ( 1250 );

// which is good?

EventSetTimer ( 1 );

Ek olarak, bunun için 'Switch' işlevini kullanabilir miyim?

//--- 2. kez düzenlendi

start() işlevini kullanmak istemiyorum . Aslında aşağıdaki gibi ayarlamam gerekiyor.

EventSetMillisecondTimer ( 10    ); // 1st will read in 10
EventSetMillisecondTimer ( 250   ); // 2nd will read in 250
EventSetMillisecondTimer ( 1250 ); // 3rd will read in 1250

Ama yardıma ihtiyacım var, lütfen.

//--- 3. kez düzenlendi

switch ( EventSetMillisecondTimer ( 10 ) )
{
     case      1    :   EventSetMillisecondTimer ( 100   );
     case      2    :   EventSetMillisecondTimer ( 250   );
     case      3    :   EventSetMillisecondTimer ( 1250 );
     default      :   EventSetMillisecondTimer ( 10    ); break ;
}   //---switch Close

İstediğim gibi çalışmıyor.

Biri endişemi anlarsa, lütfen bana tavsiyede bulunun veya yardım edin.

Şimdiden teşekkürler.

 
Max Enrik : start() işlevini kullanmak istemiyorum .
  1. Neden? Yeni bir onay işareti alana kadar (piyasada) hiçbir şey değişmedi. Zamanlayıcı sınırlı kullanıma sahiptir.
  2. Yeni Olay İşleme İşlevleri-İşlevler-Dil Temelleri-MQL4 Başvurusunu kullanmaya başlayın. amortismanlı olarak başla 3 Şubat 20 14 (Yapı 600)
 
Max Enrik :

start() işlevini kullanmak istemiyorum . Aslında aşağıdaki gibi ayarlamam gerekiyor.

EventSetMillisecondTimer ( 10    ); // 1st will read in 10
EventSetMillisecondTimer ( 250   ); // 2nd will read in 250
EventSetMillisecondTimer ( 1250 ); // 3rd will read in 1250

Ama yardıma ihtiyacım var, lütfen.

İstediğim gibi çalışmıyor.

Biri endişemi anlarsa, lütfen bana tavsiyede bulunun veya yardım edin.

Şimdiden teşekkürler.


hayır, sadece bir zamanlayıcı ve bir zamanlayıcı kullandığınız gibi çalışmıyor.

ancak basit bir sayaç kullanarak zaman aralığını bölebilir veya birleştirebilirsiniz.

int clock;
OnTimer ()
{
  clock++;
  
   switch (clock)
   {
     case 500 :
     //Do something...
     break ;

     case 1000 :
     //Do something...
    clock= 0 ; // reset counter if need be.
     break ;

     // Etc...
   }
}
 
whroeder1 :
  1. Neden? Yeni bir onay işareti alana kadar (piyasada) hiçbir şey değişmedi. Zamanlayıcı sınırlı kullanıma sahiptir.
  2. Yeni Olay İşleme İşlevleri-İşlevler-Dil Temelleri-MQL4 Başvurusunu kullanmaya başlayın. amortismana tabi tutulmuş olarak başla 3 Şubat 20 14 (Yapı 600)
Yorumun için teşekkürler.

İki kez 'Olay İşleme İşlevlerinden' bahsettiniz ve birkaç kez okudum (belki bu sayfanın tamamını tam olarak anlamadım - ayrıca 'OnTimer' işlevini de kullanıyorum) ama o sayfa için endişeleniyorum, bu beni başka bir yöne çekecek - ama benim bu gösterge neredeyse bitti.

Ama sadece 'EventSetMillisecondTimer( 1250 );' görüyorum bazen 'alakasız' uzun zaman alır.


En iyi.
 
Marco vd Heijden :

ancak basit bir sayaç kullanarak zaman aralığını bölebilir veya birleştirebilirsiniz.

Aşağıdaki kod gibi denedim.

Bu kod doğru mu?

void OnTimer ()
{
     //---
    _clock++;
     //---
     switch ( _clock )
    {
         case      500 :
             if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
         break ;
        
         case      1000 :
             if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0 ;
         break ;
    }   //---switch Close
}

Ama benim için çalışmıyor.

Teşekkürler.

 
Max Enrik : Aşağıdaki kodu denedim.
void OnTimer ()
{
     //---
    _clock++;
     //---
     switch ( _clock )
    {
         case      500 :
             if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
         break ;
        
         case      1000 :
             if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0 ;
         break ;
    }   //---switch Close
}

Ama benim için çalışmıyor.

  1. Test cihazında denemiyorsun değil mi? Backtest'te OnTimer() çalışmıyor (M. Ali) - MQL4 forum Chart Event For MT4 Backtester (Migel) - MQL4 forum
  2. Kodunuz basitleştirildi
    void OnTimer ()
    {
         if (++_clock % 500 == 0 )_CreateLines_M5();
    }

 
whroeder1 :
  1. Kodunuz basitleştirildi
    void OnTimer ()
    {
         if (++_clock % 500 == 0 )_CreateLines_M5();
    }

Çok teşekkürler!

Denedim, sürekli yenileniyor , bir dakika içinde bile PERIOD_M5'i seçiyorum .

Ayrıca PERIOD_M1 & PERIOD_M5 kullanmam gerekip gerekmediğini bilmek istiyorum, aşağıdaki gibi kullanabilir miyim?

if (++_clock % 500 == 0 )_CreateLines_M1();
if (++_clock % 500 == 0 )_CreateLines_M5();

ayrıca, aşağıdaki yöntem doğru mu, lütfen?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime ( Symbol (), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime ( Symbol (), _prd_M5, 0 );
    _CreateLines_M5();
}

Herşey gönlünce olsun.

 
Max Enrik :

Çok teşekkürler!

Denedim, sürekli yenileniyor , bir dakika içinde bile PERIOD_M5'i seçiyorum .

Ayrıca PERIOD_M1 & PERIOD_M5 kullanmam gerekip gerekmediğini bilmek istiyorum, aşağıdaki gibi kullanabilir miyim?

if (++_clock % 500 == 0 )_CreateLines_M1();
if (++_clock % 500 == 0 )_CreateLines_M5();

ayrıca, aşağıdaki yöntem doğru mu, lütfen?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime ( Symbol (), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime ( Symbol (), _prd_M5, 0 );
    _CreateLines_M5();
}

Herşey gönlünce olsun.

Lütfen ne yapmaya çalıştığınızı açıklayın.