Indicador Preguntas varias - página 5

 
Marco vd Heijden:
Por favor, describa lo que está tratando de hacer.

Perdón por la confusión.

Necesito establecer 3'EventSetMillisecondTimer' como abajo (usted dijo que no funciona...). ¿Hay alguna forma alternativa disponible, por favor?

EventSetMillisecondTimer( 10   ); // 1st will read in 10   | if won't read try next
EventSetMillisecondTimer( 250  ); // 2nd will read in 250  | if won't read try next
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5

Lo mejor.

 

El temporizador se establece sólo una vez en la función OnInit().

Si quieres reiniciar tienes que matar primero el antiguo temporizador, esto suele ocurrir en la función OnDeinit().

Como dije, también puedes usar un contador.

Si pones código en, por ejemplo, un temporizador de 10 milisegundos, entonces el código se ejecutará cada 10 milisegundos.

Esto probablemente congelará tu terminal porque es demasiado rápido.

int counter;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);// 1 second

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- increment counter
   counter++;
//--- comment status on the chart
   Comment(IntegerToString(counter));  
//--- switch timer  
   switch(counter)
     {
      case 60:
         Alert(" 1 Minute ");
         // Do Something...
         break;
      case 300:
         Alert(" 5 Minutes ");
         // Do Something...
         break;
      case 900:
         Alert(" 15 Minutes ");
         // Do Something...
         counter=0;// Reset counter on highest value.
         break;
     }
// end switch timer    
   if(counter>900)
     {
      counter=0;// Safety Mechanism
     }
  }
//+------------------------------------------------------------------+

Tenga en cuenta que el minuto sólo se dispara una vez, así que no cada minuto.

Los 5 minutos se activarán también sólo una vez después de los primeros cinco minutos, así que no a los diez ni a los 15 minutos.

Si quiere, por ejemplo, que se active cada minuto, tendrá que añadir código para 60 segundos, para 120 segundos, para 180 segundos, etc.

La marca de 15 minutos se activará cada 15 minutos porque pone el contador a cero.


¿Qué mecanismo quieres utilizar, qué código quieres que se active en los intervalos de tiempo?

¿Qué está tratando de lograr?
 

void OnTimer()
  {
   static int counter=0;
   static int next1m=60;
   static int next5m=300;
   static int next15m=900;
//--- increment counter
   counter++;
//--- comment status on the chart
   Comment(IntegerToString(counter));  
//--- timer
   if(counter==next1m)
         {
         Alert(" 1 Minute ");
         // Do Something...
         next1m+=60;
         }
   if(counter==next5m)
         {
         Alert(" 5 Minutes ");
         // Do Something...
         next5m+=300;
         }
   if(counter==next15m)
         {
         Alert(" 15 Minutes ");
         // Do Something...
         counter=0;// Reset counter on highest value.
         next1m=60;
         next5m=300;
         }
  }

Muy buena, Marco.

Podrías hacer algo así para que se active en cada intervalo de tiempo

 

Marco vd Heijden:

¿Qué mecanismo quieres usar, qué código quieres que se active en los intervalos de tiempo?

¿Qué estás tratando de lograr?
Gracias por el gran comentario, que uno que explica mucho más claramente sobre el operador 'interruptor', y los intervalos de tiempo.

Una vez más excelente comentario, grandes gracias hombre.

//---

Ahora, necesito darle información sobre mi este indicador.
Porque tal vez no describí acerca de mi preocupación, (pero su último comentario más y más me ayudó)...

...mi indicador funciona lo que era (/ es) que quería (/ quiere).

El indicador funciona así:

automáticamente mover / muestra hacia adelante 'VLINE' (que quiero)
me muestra pasado una semana 'VLINE's (que uno quiero)
no hay cruce de Líneas de Período (que uno que quiero )
actualizar continuamente (con intervalos) sólo una vez en un cada siguiente PERIOD_** 's (que quiero )
y más y más...
una vez más GRACIAS ESPECIALES a Marco & whroeder1 (no sólo me ayudaron y también me enseñaron mucho)

Necesito describir mi preocupación con el ejemplo:

Abro el gráfico EURUSD y adjunto mi indicador al gráfico, y funciona perfectamente que es como quiero, se mueve / muestra hacia adelante (incluso pasado) VLINE, puedo cambiar PERIODO DE MARCO DE TIEMPO y automáticamente los intervalos adaptados que PERIODOS (que es lo que quiero).

¿Dónde está mi problema indicador? // tal vez no es un problema, pero se necesita un poco más 'irrelevante' veces para actualizar.

Si elijo 'EventSetMillisecondTimer( 10 );' y luego cambio TIMEFRAME PERIODs a cualquier TIMEFRAME PERIODs y casi no veo (cuando eso) carga nuevas VLINE's al gráfico (que es lo que quiero )

En este momento si cambio EURUSD a 'otros símbolos (como GBPUSD, y así sucesivamente)' mi indicador no carga lleno de V LINE's. Eso es sólo un problema (/ para mí).

Por otra parte: Si elijo 'EventSetMillisecondTimer( 1250 ); ' no veo ningún problema sobre las cargas. Funciona perfectamente.
Pero aquí hay unproblema (/ para mí ) que toma un poco más 'irrelevante ' veces - cuando cambio TIMEFRAME PERIODOS.

Así que si usted me entiende tan claramente, por favor tome un tiempo para comentar (y ayudarme a cómo puedo resolver este problema) o no me entiende tan claramente no pierda su tiempo, por favor.

Mucho y muy agradecido por sus comentarios - Marco & whroeder1


(NOTA: No uso 'operador de conmutación' - porque su comentario #18 mejor entonces todo lo que es lo actualizo y trabajando en él - y es muy útil para mí)

(El inglés no es mi lengua materna)

 

Keith Watford:

Muy buena Marco.

Usted podría hacer algo como esto para activar en cada intervalo de tiempo

También bueno Keith. :)

Realmente eso me ayuda mucho, lo usaré en mi próximo indicador.

Todo lo mejor.

 

No sé si alguien más, pero encuentro que tu mezcla de fuentes, colores, negritas y cursivas, etc., distraen y molestan. De hecho no me he podido molestar en leer este post.

Max Enrik:
Gracias por el gran comentario, que uno que el comentario se explica mucho más claramente sobre el operador 'interruptor', y los intervalos de tiempo.

Una vez más excelente comentario, grandes gracias hombre.

//---

Ahora, tengo que dar información sobre mi este indicador.
Porque tal vez no describí acerca de mi preocupación, (pero su último comentario más y más me ayudó)...

...mi indicador funciona lo que era (/ es) que quería (/ quiere).

El indicador funciona así:

automáticamente mover / muestra hacia adelante 'VLINE' (que quiero)
me muestra pasado una semana 'VLINE's (que uno quiero)
no hay cruce de Líneas de Período (que uno que quiero )
actualizar continuamente (con intervalos) sólo una vez en un cada próximo PERIOD_** 's (que quiero )
y más y más...
una vez más GRACIAS ESPECIALES a Marco & whroeder1 (no sólo me ayudaron y también me enseñaron mucho)

Necesito describir mi preocupación con el ejemplo:

Abro el gráfico EURUSD y adjunto mi indicador al gráfico, y funciona perfectamente que es como quiero, se mueve / muestra hacia adelante (incluso pasado) VLINE, puedo cambiar PERIODO DE MARCO DE TIEMPO y automáticamente los intervalos adaptados que PERIODOS (que es lo que quiero).

¿Dónde está mi problema indicador? // tal vez no es un problema, pero toma un poco más 'irrelevante' veces para actualizar.

Si elijo 'EventSetMillisecondTimer( 10 );' y luego cambio TIMEFRAME PERIODs a cualquier TIMEFRAME PERIODs y casi no veo (cuando eso) carga nuevas VLINE's al gráfico (que es lo que quiero )

En este momento si cambio EURUSD a 'otros símbolos (como GBPUSD, y así sucesivamente)' mi indicador no carga lleno de V LINE's. Eso es sólo un problema (/ para mí).

Por otra parte: Si elijo 'EventSetMillisecondTimer( 1250 ); ' no veo ningún problema sobre las cargas. Funciona perfectamente.
Pero aquí hay unproblema (/ para mí ) que toma un poco más 'irrelevante ' veces - cuando cambio TIMEFRAME PERIODOS.

Así que si usted me entiende tan claramente, por favor tome un tiempo para comentar (y ayudarme a cómo puedo resolver este problema) o no me entiende tan claramente no pierda su tiempo, por favor.

Mucho y muy agradecido por sus comentarios - Marco & whroeder1


(NOTA: No uso 'operador de conmutación' - porque su comentario #18 mejor entonces todo lo que es lo actualizo y trabajando en él - y es muy útil para mí)

(El inglés no es mi lengua materna)

 

Bueno, si se trata de cambiar de marco de tiempo, entonces el temporizador no es una buena opción porque el temporizador se destruye al cambiar de marco.

Puedes crear tus líneas en la función OnInit(), y actualizarlas en las funciones OnTick() o OnTimer().

Aquí hay un ejemplo:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
//--- playsound
   PlaySound("alert2.wav");  
//--- create moving timeline
   ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);  
//--- detect period
   switch(Period())
     {
      case PERIOD_M1:
        MessageBox("Switched to 1 Minute Frame");
        //Do Something...
        ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M5:
        MessageBox("Switched to 5 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M15:
        MessageBox("Switched to 15 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M30:
        MessageBox("Switched to 30 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_H1:
        MessageBox("Switched to 1 Hour Frame");
        //Do Something...
        ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_H4:
        MessageBox("Switched to 4 Hour Frame");
        //Do Something...
        ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_D1:
        MessageBox("Switched to Daily Frame");
        //Do Something...
        ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_W1:
        MessageBox("Switched to Weekly Frame");
        //Do Something...
        ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_MN1:
        MessageBox("Switched to Monthly Frame");
        //Do Something...
        ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
         break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
//--- delete objects
   ObjectsDeleteAll(0,0,-1);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
También note el ObjectsDeleteAll() en la función OnDeint() esto asegurará que todo sea removido antes de que sea creado de nuevo en su nuevo marco.
 

Y además si quieres actualizar las líneas cada vez que surja una nueva vela puedes combinar el ejemplo de la página anterior con el último para obtener esto:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
//--- playsound
   PlaySound("alert2.wav");
//--- 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);  
//--- create moving timeline
   ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);  
//--- detect period
   switch(Period())
     {
      case PERIOD_M1:
        MessageBox("Switched to 1 Minute Frame");
        //Do Something...
        ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
        M1=Time[0];// store current time
         break;
      case PERIOD_M5:
        MessageBox("Switched to 5 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
        M5=Time[0];// store current time
         break;
      case PERIOD_M15:
        MessageBox("Switched to 15 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
        M15=Time[0];// store current time
         break;
      case PERIOD_M30:
        MessageBox("Switched to 30 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
        M30=Time[0];// store current time
         break;
      case PERIOD_H1:
        MessageBox("Switched to 1 Hour Frame");
        //Do Something...
        ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
        H1=Time[0];// store current time
         break;
      case PERIOD_H4:
        MessageBox("Switched to 4 Hour Frame");
        //Do Something...
        ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
        H4=Time[0];// store current time
         break;
      case PERIOD_D1:
        MessageBox("Switched to Daily Frame");
        //Do Something...
        ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
        D1=Time[0];// store current time
         break;
      case PERIOD_W1:
        MessageBox("Switched to Weekly Frame");
        //Do Something...
        ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
        W1=Time[0];// store current time
         break;
      case PERIOD_MN1:
        MessageBox("Switched to Monthly Frame");
        //Do Something...
        ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
        MN1=Time[0];// store current time
         break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
//--- delete objects
   ObjectsDeleteAll(0,0,-1);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- update timeline
   ObjectMove(0,"Time",0,TimeCurrent(),0);
//--- check for new candles
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
    {
     Alert("New candle on M1");
     ObjectMove(0,"1-Minute",0,iTime(Symbol(),PERIOD_M1,0),0); // Move line
     M1=iTime(Symbol(),PERIOD_M1,0);// Overwrite old with new value
    }  
   if(M5!=iTime(Symbol(),PERIOD_M5,0))
    {
     Alert("New candle on M5");
     M1=iTime(Symbol(),PERIOD_M5,0);// Overwrite old with new value
    }      
   if(M15!=iTime(Symbol(),PERIOD_M15,0))
    {
     Alert("New candle on M15");
     M15=iTime(Symbol(),PERIOD_M15,0);// Overwrite old with new value
    }
   if(M30!=iTime(Symbol(),PERIOD_M30,0))
    {
     Alert("New candle on M30");
     M30=iTime(Symbol(),PERIOD_M30,0);// Overwrite old with new value
    }
    // and so on to MN1...        
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
Si hay más problemas, por favor muestre algún código.
 
Keith Watford:

No sé si alguien más, pero encuentro que tu mezcla de fuentes, colores, negritas y cursivas, etc., distraen y molestan. De hecho, no me he molestado en leer este post.

Me han dicho que no pierda su tiempo.
 

Max Enrik:

Keith Watford:

No sé si alguien más, pero encuentro que tu mezcla de fuentes, colores, negritas y cursivas, etc., distraen y molestan. De hecho, no me he molestado en leer este post.


Me han dicho que no pierda su tiempo.
¿Por qué te limitas a citar mi post sin ningún comentario?