Indicador Preguntas varias - página 4

 

Puedes utilizar el operador switch.

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

O utilizar una simple sentencia doble if:

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

Si la hora es superior a > 0 pero también && inferior a < 22 etc.

O puede utilizar:

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

Si la hora está por encima > o == igual a 0 pero también && por debajo < o == igual a 22 etc.

Es ligeramente diferente porque incluye la hora cuando es igual, mientras que el ejemplo anterior >0 excluye el 0 porque es igual y no está por encima.

 

#Líneas del mes - Cerrado para mí.

He probado con 'Strategy Tester' y el tiempo real hasta ahora funciona perfecto.

Aprendí un montón de cosas de sus comentarios, e hice mi este indicador tan bueno, grandes gracias @Marcovd Heijden

Un agradecimiento especial al Sr. Marco & Sr. William.

 

El código de abajo me funciona bien, pero a veces es irrelevante y tarda mucho tiempo (1250).

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

Además, ¿puedo usar la función'Switch' para eso?

//--- 2da vez editado

No quiero usar la función start(). En realidad necesito establecer como abajo.

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

Pero necesito ayuda, por favor.

//--- 3ª vez editado

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

No funciona, como yo quiero.

Si alguien entiende mi preocupación, por favor, dame un consejo o ayuda.

Gracias de antemano.

 
Max Enrik: No quiero usar la función start().
  1. ¿Por qué no? Hasta que no se consiga un nuevo tick, nada (en el mercado) ha cambiado. El temporizador tiene un uso limitado.
  2. Comience a utilizar las nuevas funciones de manejo de eventos - Funciones - Fundamentos del lenguaje - Referencia MQL4. start como depreciado Desde el 3 de febrero de2014 (Build 600)
 
Max Enrik:

No quiero usar la función start(). En realidad, tengo que establecer como abajo.

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

Pero necesito ayuda, por favor.

No funciona, como yo quiero.

Si alguien entiende mi preocupación, por favor, dame un consejo o ayuda.

Gracias de antemano.


No, no funciona así, se utiliza un temporizador y un solo temporizador.

pero puedes dividir o empalmar el intervalo de tiempo usando un simple 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 qué no? Hasta que no se consiga un nuevo tick, nada (en el mercado) ha cambiado. El temporizador tiene un uso limitado.
  2. Empieza a utilizar las nuevas funciones de manejo de eventos - Funciones - Fundamentos del lenguaje - Referencia MQL4. start como depreciado desde el 3 de febrero de2014 (Build 600)
Gracias por tu comentario.

Usted mencionó dos veces 'Funciones de manejo de eventos', y leí varias veces (tal vez no entendí claramente toda esa página - también uso la función 'OnTimer' ) pero me preocupa esa página, que me tire por otro camino - pero mi este indicador casi terminado.

Pero veo sólo 'EventSetMillisecondTimer( 1250 );' a veces toma 'irrelevante ' mucho tiempo.


Mejor.
 
Marco vd Heijden:

pero puedes dividir o empalmar el intervalo de tiempo usando un simple contador.

Lo he intentado con el siguiente código.

¿Es ese código correcto?

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
}

Pero no me funciona.

Gracias.

 
Max Enrik: He probado como el código de abajo.
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
}

Pero a mí no me funciona.

  1. No lo estás probando en el tester ¿verdad? En el backtest OnTimer() no funciona (M. Ali) - MQL4 forum Chart Event For MT4 Backtester (Migel) - MQL4 forum
  2. Tu código simplificado
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

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

Muchas gracias.

Lo probé, se actualiza continuamente mientras que en un minuto incluso yo elección PERIOD_M5.

También me gustaría saber si necesito usar PERIOD_M1 y PERIOD_M5 ¿puedo usar como abajo?

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

También, ¿Es el método de abajo correcto, por favor?

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

Todo lo mejor.

 
Max Enrik:

Muchas gracias.

Lo probé, se actualiza continuamente mientras que en un minuto incluso yo elección PERIOD_M5.

También me gustaría saber si necesito usar PERIOD_M1 y PERIOD_M5 ¿puedo usar como abajo?

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

También, ¿Es el método de abajo correcto, por favor?

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

Todo lo mejor.

Por favor, describa lo que está tratando de hacer.