Indicador Perguntas Diversas - página 4

 

Você pode usar o operador do interruptor.

      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...
        }

Ou usar o simples duplo se declaração:

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

Se a hora estiver acima > 0 mas também && abaixo < 22 etc.

Ou você pode usar:

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

Se a hora estiver acima > ou == igual a 0, mas também && abaixo < ou == igual a 22 etc.

É ligeiramente diferente porque inclui a hora em que é igual, onde o exemplo anterior >0 exclui o próprio 0 porque é igual e não acima.

 

#Linhas do mês - Fechadas para mim.

Testei com o 'Strategy Tester' & o tempo real até agora funciona perfeitamente.

Aprendi muitas coisas com seus comentários, e fiz este indicador tão bom, muito obrigado @Marcovd Heijden

Agradecimentos especiais ao Sr. Marco & Sr. William.

 

O código abaixo funciona bem para mim, mas às vezes é irrelevante e leva muito tempo (1250).

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

Além disso, posso usar a função'Switch' para isso?

//--- 2ª vez editado

Eu não quero usar a função start(). Na verdade, eu preciso definir como abaixo.

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

Mas eu preciso de ajuda, por favor.

//--- terceira vez editado

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

Não funciona, como eu quero.

Se alguém entender minha preocupação, por favor, me dê conselhos ou ajuda.

Obrigado de antemão.

 
Max Enrik: Eu não quero usar a função start().
  1. Por que não? Até receber um novo carrapato, nada (no mercado) mudou. O temporizador tem uso limitado.
  2. Comece a usar as novas Funções de Tratamento de Eventos - Funções - Noções Básicas de Idioma - Referência MQL4. início como foi depreciado Desde 3 de fevereiro de2014 (Build 600)
 
Max Enrik:

Eu não quero usar a função start(). Na verdade, eu preciso definir como abaixo.

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

Mas eu preciso de ajuda, por favor.

Não funciona, como eu quero.

Se alguém entender minha preocupação, por favor, me dê conselhos ou ajuda.

Obrigado antecipadamente.


não funciona como se você usasse um timer e um timer apenas.

mas você pode dividir ou emendar o intervalo de tempo usando um simples contador.

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. Por que não? Até receber um novo carrapato, nada (no mercado) mudou. O temporizador tem uso limitado.
  2. Comece a usar as novas Funções de Tratamento de Eventos - Funções - Noções Básicas de Idioma - Referência MQL4. início como foi depreciado Desde 3 de fevereiro de2014 (Build 600)
Obrigado por seu comentário.

Você mencionou duas vezes 'Funções de Tratamento de Eventos', e eu li poucas vezes (talvez eu não tenha entendido claramente toda aquela página - também uso a função 'OnTimer '), mas eu me preocupo com aquela página, que me puxará para outro caminho - mas meu indicador está quase pronto.

Mas vejo apenas 'EventSetMillisecondTimer( 1250 )'; às vezes leva muito tempo 'irrelevante'.


O melhor.
 
Marco vd Heijden:

mas você pode dividir ou emendar o intervalo de tempo usando um simples contador.

Eu tentei como o código abaixo.

Esse código está correto?

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
}

Mas não funciona para mim.

Obrigado.

 
Max Enrik: Eu tentei como o código abaixo.
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
}

Mas isso não funciona para mim.

  1. Você não está tentando no testador, está? No backtestOnTimer() não executa (M. Ali) - fórum MQL4 Evento de gráfico para MT4Backtester (Migel) - fórum MQL4
  2. Seu código simplificado
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

 
whroeder1:
  1. Seu código simplificado
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

Muito obrigado!

Eu experimentei, ele é continuamente refrescante enquanto em um minuto até eu escolho PERÍODO_M5.

Também gostaria de saber se eu preciso usar PERIOD_M1 & PERIOD_M5 posso usar como abaixo?

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

também, O método abaixo está correto, por favor?

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

Tudo de bom.

 
Max Enrik:

Muito obrigado!

Eu experimentei, ele é continuamente refrescante enquanto em um minuto até eu escolho PERÍODO_M5.

Também gostaria de saber se eu preciso usar PERIOD_M1 & PERIOD_M5 posso usar como abaixo?

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

também, O método abaixo está correto, por favor?

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

Tudo de bom.

Por favor, descreva o que você está tentando fazer.