Indicador Preguntas varias - página 3

 
whroeder1:

Antes del build 600 (3 de febrerode 2014) sólo había start(). Ahora hay OnTick (EAs,) OnCalculate (indicadores,) y OnStart (scripts.) Olvidé que estabas hablando de un indicador.

Comience a utilizar las nuevas funciones de manejo de eventos - Funciones - Fundamentos del lenguaje - Referencia MQL4. Vea Cómo hacer sus lookbacks correctamente.

Sí. Ahora te entiendo mucho más claramente y gracias.

Y tu comentario #20 me dio otra idea. (una vez lo compartiste conmigo y ahora lo tengo en mi mente)

También trato de escribir mejor código para mi indicador, y ahora trato deaprender el comentario#18-@Marco vd Heijden

Entonces voy a investigar ampliamente su comentario.

¡Gracias una vez más!

 
Marco vd Heijden:

Por favor, póngalo en un experto en lugar de un indicador, esto permite un uso más fácil en el futuro cuando quiera añadir su estrategia de negociación.

Para el tema de las barras, almacene la hora de apertura de la barra en una variable datetime y simplemente compare la hora registrada con la hora real, entonces cada vez que surja una nueva barra se activará.

Aquí hay un ejemplo:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;

En primer lugar muchas gracias por tu comentario tan claro.

Sigo con el indicador. He intentado algo, y funciona bien para mí, pero me enfrenté a un problema, no puedo probarlo en 'Probador de Estrategias' - me da un error fatal: MT4 'No responde'.

#1 - Marco, ¿puedes decirme de dónde viene, por favor?

#2 - ¿Es el código de abajo correcto?

A continuación el código que he probado.

string _prefix = "_Preriod_M5 - " ;
string _vlineName_M5 ;
int _prd = PERIOD_M5 ;

int _prd_add = PeriodSeconds( _prd ) ;
datetime _dt_Prd_M5 ;

int _time_M5 ;
datetime _prdCvrt_M5 ;
datetime _timeCvrt_M5 ;

//---init
EventSetMillisecondTimer( 10 );
_CreateLines();

//---timer
if ( _dt_Prd_M5 != iTime( Symbol(), _prd, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd, 0 );
    _CreateLines();
}

//---_CreateLines()
    //---
    int _dayCnt_M5 = 0;
    int _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_M15, _dayCnt_M5 ) );
    for ( int i = 0; i < _cnt_M5; i++ )
    {
        //---time convert
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        //---name
        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        //---
        if ( _Period < PERIOD_M30 )
        {
            {
                ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
            }
        }
    }
    ObjectMove ( 0, _vlineName_M5, 0, _dt_Prd_M5, 0 );

He dejado de trabajar en él, voy a continuar después de su comentario. (En realidad me preocupa que el código de arriba aplaste mis otros indicadores mientras lo uso juntos).

Muchas gracias.

 
La función de temporizador no funciona en el probador de estrategias de MT4, por lo que hay que ponerla en la función de tick.
 
Marco vd Heijden: La función del temporizador no funciona en el probador de estrategias de MT4 por lo que hay que ponerla en la función de tick.
En el backtest OnTimer() no funciona (M. Ali) - MQL4 forum
Evento del gráfico para el backtester de MT4 (Migel) - MQL4 forum
 
Marco vd Heijden:
La función del temporizador no funciona en el probador de estrategias de MT4 por lo que hay que ponerla en la función de tick.

Muchas gracias.

Sé con certeza, que el problema no viene de código.

 
¿Cómo lo sabes?
 

Marco vd Heijden:

He aquí un ejemplo:

datetime  M5;

//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M5=iTime(Symbol(),PERIOD_M5,0);

//--- set timelines

   ObjectMove(0,"Time-M5",0,M5,0);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);  // overwrite old value with new value  
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }
  }
//+------------------------------------------------------------------+

Muchas gracias.

Este comentario me ha enseñado muchas cosas.

Parece que ese código funciona bien para mí, el que publiqué en mi comentario anterior.

Pero necesito que el código (que uno está trabajando para Period_M5) no funcionará en el reloj 12:00 (es tal vez 13:00, 14:00 ...) y por debajo de código ignorando 'OBJ_VLINE's tiempos pasados (que es bueno para mí), pero mientras que actualmente el reloj 12:00 por debajo de código me muestra, además, el tiempo actual VLINE pero yo no lo quiero.

if ( TimeHour( _timeCvrt_M5 ) != 12 )
{
    ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}   //---if Close

He intentado algo que resolver mi problema, pero no funcionó correctamente.

También he añadido captura de pantalla.


Por favor, ayúdame que realmente necesito para resolver este problema.

Muchas gracias de antemano.

Archivos adjuntos:
 
Marco vd Heijden:
¿Cómo lo sabes?

Porque la conexión se perdió y traté de usar'Probador de Estrategias' mientras el tiempo de desconexión y funciona perfectamente para mí.

Después de leer su y el Sr. William comentarios, y luego sé con certeza al respecto.

¿No es suficiente, lo siento?

 
if ( TimeHour( _timeCvrt_M5 ) != 12 )
{
    ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}   //---if Close

En este ejemplo se obtiene una línea a cada hora MENOS a las 12:00 porque se excluye con != differ then 12 statement así que cuando es == igual a 12 no hay línea.

 
Marco vd Heijden:

En este ejemplo se obtiene una línea en cada hora PERO 12:00 porque se excluye con != differ then 12 declaración por lo que cuando es == igual a 12 ninguna línea.

Brillante hombre, gracias :))

Eso es simple pero no me importa. Simplemente simple y simplemente wow.

(En realidad yo uso '==' en mi este indicador, pero realmente se centró 'OnTimer')

//--- segunda vez editado...

Esto funciona bien para mí, pero cuando el tiempo será 00:00 - tiempo actual adicional VLINE muestra de nuevo.

if (
     TimeHour( _timeCvrt_M5 ) == 1  ||
     TimeHour( _timeCvrt_M5 ) == 2  ||
     TimeHour( _timeCvrt_M5 ) == 3  ||

     TimeHour( _timeCvrt_M5 ) == 5  ||
     TimeHour( _timeCvrt_M5 ) == 6  ||
     TimeHour( _timeCvrt_M5 ) == 7  ||

     TimeHour( _timeCvrt_M5 ) == 9  ||
     TimeHour( _timeCvrt_M5 ) == 10 ||
     TimeHour( _timeCvrt_M5 ) == 11 ||

     TimeHour( _timeCvrt_M5 ) == 13 ||
     TimeHour( _timeCvrt_M5 ) == 14 ||
     TimeHour( _timeCvrt_M5 ) == 15 ||

     TimeHour( _timeCvrt_M5 ) == 17 ||
     TimeHour( _timeCvrt_M5 ) == 18 ||
     TimeHour( _timeCvrt_M5 ) == 19 ||

     TimeHour( _timeCvrt_M5 ) == 21 ||
     TimeHour( _timeCvrt_M5 ) == 22 ||
     TimeHour( _timeCvrt_M5 ) == 23
)

(Yo pocas veces actualizado este comentario porque yo estaba investigado)

Por favor, ayúdame.

Razón de la queja: