Indicador Preguntas varias - página 2

 

#Orden de los objetos

He creado 3 Objetos y esos objetos se cruzan entre sí.

#1 Línea horizontal, #2 Línea vertical, #3 Línea de tendencia

Necesito establecer sus posiciones z.

¿Cómo puedo darles el valor de las posiciones z?

Gracias.

 
Marco vd Heijden:

Bueno, puede dibujar todas las líneas en OnInit() y luego dibujar nuevas siempre que el tiempo de apertura de la última barra cambie, sabrá que hubo una nueva barra.

Pero no estoy seguro de lo que quieres hacer exactamente.

DE ACUERDO. Voy a probar algo. Luego volveré por aquí.

Gracias.

 

@Marco vd Heijden

Antes de empezar a investigar sobre eso. Realmente necesito preguntar, ¿es la función start() la que ralentiza el gráfico (/ Plataformas MT4)?

p.s. Puse todos los códigos en la función especial start( ) , ese código funciona para las líneas de período- H1, H4, D1, W1, MN1.

Que tengan un buen fin de semana y gracias de antemano.

 
Max Enrik: Realmente necesito preguntar, ¿es la función start() la que ralentiza el gráfico (/ Plataformas MT4)?
Mientras todos los indicadores se actualizan, el terminal no hace nada más. Es por eso que los indicadores no pueden dormir, no puede operar, o hacer peticiones web.
 
whroeder1:
Mientras todos los indicadores se actualizan, el terminal no hace nada más. Por eso los indicadores no pueden dormir, no pueden operar, ni hacer peticiones web.

Gracias por su comentario. (después de su comentario decidí que voy a cambiar algo todo en mis indicadores - porque casi hice todos mis indicadores en start ( )función).

Puse el código de abajo en la función start( ), así que puedes ayudarme a qué manera es buena para mi indicador?

En realidad no tengo ninguna idea de cómo puedo editar el código de abajo para dejar de actualizar continuamente (sin todos los códigos de start() puestos en la función init()).

//---MN1
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
    if ( _Period < PERIOD_MN1 )
    {
        //---time convert
        datetime _tltpMN1      = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
        datetime _time         = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1  );
        //---name
        string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );

        ObjectCreate     ( 0, _vlineName_MN, OBJ_VLINE          , 0, _time, 0     );
        ObjectSetString  ( 0, _vlineName_MN, OBJPROP_TOOLTIP    , _tltpMN1        );
        ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR      , C'180,160,080'  );
        ObjectSet        (    _vlineName_MN, OBJPROP_BACK       , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_HIDDEN     , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_SELECTABLE , false           );
        ObjectSet        (    _vlineName_MN, OBJPROP_STYLE      , STYLE_SOLID     );
    }   //---if Close
}   //---for Close

¡Gracias!

 

Realmente necesito ayuda, por favor que alguien responda a mi pregunta.

Gracias.

 
Max Enrik: En realidad no tengo ni idea de cómo puedo editar el código de abajo para que deje de actualizarse continuamente
  1. Adaptar un nuevo código de barras para el nuevo mes.
    Las barras no son fiables (un refresco/recuperación puede cambiar el número de barras en el gráfico) el volumen no es fiable (se pierden los ticks) Usa siempre el tiempo. Nueva vela - Foro MQL4
    No estoy de acuerdo con hacer una función de nueva barra, porque sólo se puede llamar una vez por tick. Una variable puede ser probado varias veces.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    No utilice números de desplazamiento en los nombres de los objetos. Una vez que se inicia una nueva barra, todos sus objetos son mal nombrados y no puede crear un nuevo "<prefijo>0". Lo has hecho bien en tu post original (usando el tiempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    O convertir el tiempo en un int a una cadena.
 

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;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M1=iTime(Symbol(),PERIOD_M1,0);
   M5=iTime(Symbol(),PERIOD_M5,0);
   M15=iTime(Symbol(),PERIOD_M15,0);
   M30=iTime(Symbol(),PERIOD_M30,0);
   H1=iTime(Symbol(),PERIOD_H1,0);
   H4=iTime(Symbol(),PERIOD_H4,0);
   D1=iTime(Symbol(),PERIOD_D1,0);
   W1=iTime(Symbol(),PERIOD_W1,0);
   MN1=iTime(Symbol(),PERIOD_MN1,0);


//--- set timelines
   ObjectMove(0,"Time-M1",0,M1,0);
   ObjectMove(0,"Time-M5",0,M5,0);
   ObjectMove(0,"Time-M15",0,M15,0);
   ObjectMove(0,"Time-M30",0,M30,0);
   ObjectMove(0,"Time-H1",0,H1,0);
   ObjectMove(0,"Time-H4",0,H4,0);
   ObjectMove(0,"Time-D1",0,D1,0);
   ObjectMove(0,"Time-W1",0,W1,0);
   ObjectMove(0,"Time-MN1",0,MN1,0);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


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

   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if(M15!=iTime(Symbol(),PERIOD_M15,0))
     {
      M15=iTime(Symbol(),PERIOD_M15,0);
      //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if(M30!=iTime(Symbol(),PERIOD_M30,0))
     {
      M30=iTime(Symbol(),PERIOD_M30,0);
      //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if(H1!=iTime(Symbol(),PERIOD_H1,0))
     {
      H1=iTime(Symbol(),PERIOD_H1,0);
      //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if(H4!=iTime(Symbol(),PERIOD_H4,0))
     {
      H4=iTime(Symbol(),PERIOD_H4,0);
      //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if(D1!=iTime(Symbol(),PERIOD_D1,0))
     {
      D1=iTime(Symbol(),PERIOD_D1,0);
      //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if(W1!=iTime(Symbol(),PERIOD_W1,0))
     {
      W1=iTime(Symbol(),PERIOD_W1,0);
      //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
     {
      MN1=iTime(Symbol(),PERIOD_MN1,0);
      //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1:
  1. Adaptar el nuevo código de barras para el nuevo mes.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    No utilice números de turno en los nombres de los objetos. Una vez que comienza una nueva barra, todos tus objetos tienen un nombre erróneo y no puedes crear un nuevo "<prefijo>0". Lo has hecho bien en tu post original (usando el tiempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    O convierte el tiempo en un int a una cadena.

Gracias por su comentario.

Desde tu comentario me puse a intentar investigar tu comentario. (porque nunca he utilizado 'Void OnTick()' función)

Por lo tanto, he leído por debajo de enlace entonces entiendo 'OnTick( )' función se ejecuta para los asesores expertos solamente.

Ya uso un Asesor Experto (Panel de Comercio) en mi gráfico (necesito usar todos mis indicadores y asesor experto en una ventana de gráfico).

Si quieres decir que podría usar tu código en el 'Asesor Experto', en realidad no lo haré porque voy a mejorar mi ' Panel de Comercio', también quiero escribir el código por separado. (Es posible que en el futuro voy a combinar ese grupo deindicadores(que importante para mí) - pero no por ahora).

De todos modos, el Sr. William su comentario realmente me dio la idea y también me enseñan algo.

(p.s si estoy pensando mal por favor hágamelo saber)

Y una vez más, ¡muchas gracias!
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik(porque nunca usé la función 'Void OnTick()')

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. Ver Cómo hacer sus lookbacks correctamente.

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference