Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 767

 
tuner:

No me di cuenta de la respuesta de inmediato. Bueno, para ser sincero, no he entendido muy bien lo que quieres decir con que no hay confusión al respecto.

¿A qué te refieres con "no importa el tiempo queStringToTime() cuente los segundos transcurridos"?

La función esencialmente toma una fecha de izquierda en conjunto (creo que la fecha del PC local es de izquierda) y compara la hora actual del servidor del corredor con ella, ¿por qué no importaría?

De la captura de pantalla anterior, el comentario dice que la hora de su PC local está 1 hora por delante de la hora del corredor, es decir, el cambio GMT es mayor. Si fueran X horas menos, sería crítico, como en el caso que escribí el viernes.

En cuanto al final del tiempo de negociación. Supongo que para la funciónStringToTime() no deberíaimportar cuando el broker termina el día o la semana de negociación...

No tengo otra explicación.

Si son las 11:40 en Moscú, entonces han pasado XXX segundos desde el 01.01.1970 hasta la hora actual.

Cuando sean las 11:40 en Londres, por ejemplo, el número de segundos será el mismo que en Moscú ahora... Esto se debe a que el 01.01.1970 en Londres era como mucho más tarde que la hora actual. No es el tiempo especificado, sino sólo el número de segundos.

Intenta escribir tú mismo una fórmula para calcular el número de segundos desde el 01.01.1970 00:00:00.

Para un periodo corto de tiempo puedes utilizar esta fórmula. Desde el comienzo del mes actual pasó 6*24*60*60 + 11*60*60 + 59*60 + el valor actual de los segundos en el reloj que está mirando.

 

Por supuesto, la comparación se basa en el número de segundos que han transcurrido desde el año 70, pero este número de segundos lo tiene todo en cuenta: la fecha y la hora.

Me limitaré a poner un ejemplo, que es esencialmente una simplificación de un problema que me encontré recientemente.

La tarea: calcular la hora (datetime) de finalización de la negociación del viernes, teniendo en cuenta la variable de cadena "21:30".

Al principio tenía una solución de este tipo:

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, например возьмем сегодняшний день, первый тик 2014.11.07 00:00
  EndTrading=StringToTime("21:30");     // подразумевается что тут должно быть время пятницы...

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // и время удовлетворяет условию
    Print("Настала пятница и текущее время больше чем 21:30");

Y ahora el truco: la impresión especificada en el código aparecerá el viernes, pero no después de las 21:30, sino a las 00:00 del primer tick.

Porque cuando el servidor de mi broker se puso el viernes, en mi PC local todavía era el jueves, el timeshift es diferente.

En el probador, todo está bien y la impresión saldrá como debe ser el viernes después de las 21:30. ¿No es eso confuso?

 
tuner:

Por supuesto, la comparación se basa en el número de segundos que han transcurrido desde el año 70, pero este número de segundos lo tiene todo en cuenta: la fecha y la hora.

Por poner un ejemplo, básicamente una simplificación de un problema que me encontré hace poco.

La tarea: calcular la hora (datetime) de finalización de la negociación del viernes, teniendo en cuenta la variable de cadena "21:30".

Al principio tenía una solución de este tipo:

Y ahora el truco: la impresión especificada en el código aparecerá el viernes, pero no después de las 21:30, sino a las 00:00 del primer tick.

Porque cuando el servidor de mi broker se puso el viernes, en mi PC local todavía era el jueves, el timeshift es diferente.

En el probador, todo está bien y la impresión saldrá como debe ser el viernes después de las 21:30. ¿No es eso confuso?

Por supuesto que es confuso. Es sólo una confusión en tu cabeza. TimeToString("21:30") dará la fecha actual desde las 21:30:00 hasta las 21:29:59 del día siguiente. Corregiré los comentarios en su código.

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
  EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // А тут условие если(текущее время больше чем четверг 21:30)
   {
    Print("EndTrading = ", TimeToString(EndTrading)); // Посмотри что будет напечатано.
   }


Y este código funcionará correctamente

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
Print("Настала пятница и текущее время больше чем 21:30");
 
ikatsko:
Hay dos terminales MT4 en el mismo portátil: uno con 4 decimales y otro con 5 decimales. En el mismo tiempo el tráfico en el primero es de 105/0 kb, en el segundo de 3450/0 kb. El primero consume un 6% de la CPU y el segundo un 39%. ¿Cuál es el problema? ¿Es esto una norma?
Sí.
 

AlexeyVik

He cambiado la fecha de mi ordenador a 2000.

ejecutó este script:

input string time="21:30";

Comment("TimeCurrent() = ",TimeCurrent(),"\n",
"TimeLocal() = ",TimeLocal(),"\n",
"StringToTime(",time,") = ",StringToTime(time));

y conseguí esto:

por lo tanto StringToTime() toma la fecha del ordenador local

 
tuner:

AlexeyVik

He cambiado la fecha de mi ordenador a 2000.

ejecutó este script:

y conseguí esto:

Así que StringToTime() toma la fecha del ordenador local

¿Y qué? Que lo tome de la luna, siempre y cuando establezca "desde y hasta" el tiempo transcurrido XXX segundos y este número entero lo comparamos con el número de segundos transcurridos desde el 01.01.1970 del tiempo necesario.

Será mejor que compruebes esta línea

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))

donde tenías el problema. Hoy es viernes.

 
AlexeyVik:

Será mejor que compruebes esa línea

donde tenías el problema. Hoy es viernes.

Lo he comprobado, si el ordenador local tiene una fecha inferior a la del broker, entonces las impresoras están ahí,

pero si el ordenador local tiene una fecha superior a la del agente, no hay impresoras.

es decir, la hora ha pasado, es decir, "11:30".

en el primer caso TimeCurrent() se compara con 2014.11.06 11:30, y en el segundo casocon 2014.11.0811:30

PS corrigió el resaltado

if(TimeDayOfWeek(TimeCurrent())==5)      // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
   EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

La primera línea es clara, el comentario de la segunda línea no lo es.

¿Por qué el viernes está lejos cuando ya ha llegado? Al fin y al cabo, la segunda línea sólo se ejecuta si es viernes.

 
tuner:

Lo he comprobado, si el ordenador local tiene una fecha inferior a la del broker, entonces las impresoras están ahí,

y si la fecha del ordenador local es superior a la del corredor, entonces no hay impresoras.

es decir, la hora ha pasado, es decir, "11:30".

en el primer caso TimeCurrent() se compara con 2014.11.06 11:30, y en el segundo casocon 2014.11.0811:30

PS corrigió el resaltado


Pues aquí tengo la hora local mayor que la del servidor en 1 hora.

Este guión

   datetime time_begin;
    time_begin = StringToTime("21:30");
    Comment("Текущее локальное время ", TimeLocal(), " ", TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS), "\n"
          , "Текущее время сервера    ", TimeCurrent(), " ", TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeLocal будет через    ", time_begin-TimeLocal(), " секунд или ", 
           TimeToString(time_begin-TimeLocal(), TIME_MINUTES|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeCurrent будет через ", time_begin-TimeCurrent(), " секунд или ", 
           TimeToString(time_begin-TimeCurrent(), TIME_MINUTES|TIME_SECONDS), "\n"
          );


Da salida a los siguientes valores.

Primero el número de segundos transcurridos desde el 01.01.1970 hasta la hora especificada, y luego la hora en la forma a la que estamos acostumbrados.


Partiendo de esta base, explique qué es lo que le confunde de estos valores.


Sí. En mi segundo comentario estaba pensando en otra cosa.

 
TheXpe
TheXpert:
да.
Gracias. La brevedad es la hermana del talento.
 

Hola.

Hay una tarea como esta. (no se puede adjuntar a una garrapata)

Si se activa una orden pendiente {entonces...}.

En mi EA, utilizo Terminal.mqh para calcular las órdenes.

Terminal // Mas_Tip[0] abierto Comprar

// si el número de órdenes de compraha aumentado en 1

si (Mas_Tip[0]+1)

{

función

}

Todo funciona. Pero se dispara en cada siguiente tic.

¿Cómo se puede fijar este caso a una garrapata? Y luego comparar el valor en el tick anterior y en el tick dado.