[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 749

 
artmedia70:
Desarrolladores sabios. Si fuera posible llamar a un guión, cobraría un deslizamiento en él, pero tampoco se puede, aparentemente, porque no hay necesidad de un montón de asesores a la vez... No hay salida fácil para nosotros :)
 

Señores programadores. ¿Podría ayudarme, por favor?

De las variables de entrada.

extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;

int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("¡Aún no ha llegado la hora del comercio!");
return(0);
}
}

Quiero añadir un segundo periodo de tiempo en el que se debe realizar la operación con otras variables UseHourTrade2, FromHourTrade2, ToHourTrade2.

Por favor, ayúdenme. Por favor, díganme qué debería añadirse a la función de inicio. He probado muchas cosas que no funcionan.

Quiero darle las gracias por adelantado. No puedo ayudar.

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

Algo así, supongo.

SZY El botón de inserción de código "SRC" es incómodo de usar, no es fácil de leer.

 
Abzasc:

El enigma es el siguiente.

El indicador que se encuentra al final del código crea un objeto que sirve de indicador para otro indicador.

Después de crear el objeto, necesito "dormir" el indicador durante 5 segundos, luego borrar el objeto y dormirlo durante 60 segundos, después de lo cual irá al último reintento y comenzará de nuevo desde el principio con un nuevo tick.

Tratando de hacer esto

Se cuelga hasta que parece que se le acaba el tiempo.

¿Algún consejo sobre cómo hacerlo?


La lógica es la siguiente: ambos indicadores conocen el nombre del objeto y un objeto adicional

la primera crea el objeto y no hace nada mientras esté allí - al principio del inicio escribimos la condición de salida (return;)

el segundo lee el objeto, hace su trabajo y establece un objeto adicional

el primero, sin ver el objeto principal, sale sin hacer nada e inmediatamente encuentra el segundo (objeto adicional), lee la hora de creación del objeto (la introduce el segundo componente en la descripción al crearlo), hace la cuenta atrás de la pausa necesaria (60 segundos) y borra todos los objetos - puede seguir trabajando ....

 
Abzasc:
No funciona en los indicadores. No entiendo la razón de hacerlo así. Al parecer, un indicador que funciona constantemente debe ser hipnotizante :)

La razón es que el indicador trabaja en el flujo de la interfaz, no puedes ponerlo a dormir, porque si pudieras "ralentizarlo", en ese momento no podrías pulsar ningún botón en el terminal, por ejemplo "Nueva orden", o cerrar una orden, etc.
Una sutileza más en este tema tiene que ver con el probador. En el terminal real, hay varios hilos, un hilo de interfaz se crea por separado para los Asesores Expertos (por eso se puede ralentizar sin consecuencias) y en el tester, es el mismo para todos, y todos para uno :)
Por eso la función Sleep() funciona de forma tan específica en el modo de prueba. Si pones a dormir el flujo del probador, entonces todo dejará de funcionar, incluyendo los Asesores Expertos, los indicadores y la generación de ticks, por supuesto. Por lo tanto, si he entendido bien tu idea, sólo se puede probar en una demo. Si quieres ralentizar el flujo de la interfaz, puedes utilizar la siguiente función:

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


cuenta atrás de la pausa deseada (60 segundos)

Puedes probarlo, pero lo importante es cómo hacer una pausa... Estoy atascado en este caso.
 

Lee atentamente, lo he explicado todo, y no es necesario utilizar un objeto gráfico, lo puedes hacer con globals....

 
ToLik_SRGV:

La razón es que el indicador trabaja en el flujo de la interfaz, no se puede poner a dormir...

Ahí tienes... ahora se ha aligerado, gracias.


Hombre, qué rocas. No se puede poner en un indicador, no se puede poner a dormir... Intentaré hacerlo con variables globales.
 
xrust:

Lee con atención, lo he explicado todo, y no es necesario usar un objeto gráfico para nada, puedes hacerlo con globals....

Creo que lo tengo. El borrado por tiempo de existencia también es un temporizador. Pero lo releeré una vez más:)
 
Abzasc:

... Intentaré que funcione con variables globales.

Creo que Rustam lo insinuó correctamente, porque la congelación de hilos es lo último que se debe hacer, es una medida extrema, y no sólo en MQL, sino en todos los lenguajes de programación.

Razón de la queja: