Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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( 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.
//+------------------------------------------------------------------+
//| 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?Una vez más excelente comentario, grandes gracias hombre.
//---
...mi indicador funciona lo que era (/ es) que quería (/ quiere).
El indicador funciona así:
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 )
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.
Una vez más excelente comentario, grandes gracias hombre.
//---
...mi indicador funciona lo que era (/ es) que quería (/ quiere).
El indicador funciona así:
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 )
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
}
//+------------------------------------------------------------------+
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:
//+------------------------------------------------------------------+
//| 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
}
//+------------------------------------------------------------------+
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.
Max Enrik:
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.