Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 767

 
tuner:

Je n'ai pas remarqué la réponse tout de suite. Pour être honnête, je n'ai pas bien compris ce que vous vouliez dire en disant qu'il n'y a pas de confusion.

Que voulez-vous dire par "peu importe l'heure,StringToTime() compte les secondes écoulées" ?

La fonction prend essentiellement une date à gauche(je crois que la date du PC local est à gauche) et compare l'heure actuelle du serveur du courtier à celle-ci, pourquoi cela n'aurait-il pas d'importance ?

Sur la capture d'écran ci-dessus, le commentaire indique que l'heure de votre PC local est en avance d'une heure sur l'heure du courtier, c'est-à-dire que le décalage GMT est plus important. Si c'était X heures de moins, ce serait critique, comme dans le cas dont j'ai parlé vendredi.

Quant à la fin de la période de négociation. Je suppose que pour la fonctionStringToTime(), le moment où le courtier termine sa journée ou sa semaine de négociation ne devraitpas avoir d'importance...

Je n'ai pas d'autre explication.

S'il est 11:40 à Moscou, alors XXX secondes se sont écoulées entre le 01.01.1970 et l'heure actuelle.

Lorsqu'à Londres, par exemple, il sera 11 h 40, le nombre de secondes sera le même qu'à Moscou actuellement... C'est seulement parce que le 01.01.1970 à Londres était bien plus tard que l'heure actuelle. Ce n'est pas le temps saisi, mais seulement le nombre de secondes.

Essayez d'écrire vous-même une formule pour calculer le nombre de secondes depuis le 01.01.1970 00:00:00.

Pour une courte période de temps, vous pourriez utiliser cette formule. Depuis le début du mois en cours, 6*24*60*60 + 11*60*60 + 59*60 + la valeur actuelle des secondes sur l'horloge que vous regardez.

 

Bien sûr, la comparaison est basée sur le nombre de secondes qui se sont écoulées depuis l'an 70, mais ce nombre de secondes tient compte de tout - date et heure.

Pour vous donner un exemple, il s'agit essentiellement d'une simplification d'un problème que j'ai rencontré récemment.

La tâche : calculer l'heure (datetime) de la fin des transactions le vendredi, en tenant compte de la variable string "21:30".

Au départ, j'avais une telle solution :

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");

Et maintenant, le truc : l'impression spécifiée dans le code apparaîtra le vendredi, mais pas après 21h30, mais à 00h00 au premier tick.

Parce que lorsque le serveur de mon courtier est arrivé à vendredi, sur mon PC local, c'était encore jeudi, le décalage horaire est différent.

Dans le testeur, tout est OK et l'impression sera libérée comme il se doit le vendredi après 21h30. N'est-ce pas déroutant ?

 
tuner:

Bien sûr, la comparaison est basée sur le nombre de secondes qui se sont écoulées depuis l'an 70, mais ce nombre de secondes tient compte de tout - date et heure.

Pour vous donner un exemple, il s'agit essentiellement d'une simplification d'un problème que j'ai rencontré récemment.

La tâche : calculer l'heure (datetime) de la fin des transactions le vendredi, en tenant compte de la variable string "21:30".

Au départ, j'avais une telle solution :

Et maintenant, l'astuce : l'impression spécifiée dans le code apparaîtra le vendredi, mais pas après 21h30, mais à 00h00 au premier tick.

Parce que lorsque le serveur de mon courtier est arrivé à vendredi, sur mon PC local, c'était encore jeudi, le décalage horaire est différent.

Dans le testeur, tout est OK et l'impression sera libérée comme il se doit le vendredi après 21h30. N'est-ce pas déroutant ?

Bien sûr, c'est déroutant. C'est juste de la confusion dans ta tête. TimeToString("21:30") donnera la date actuelle de 21:30:00 à 21:29:59 le jour suivant. Je vais corriger les commentaires dans votre code.

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)); // Посмотри что будет напечатано.
   }


Et ce code fonctionnera correctement

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
Print("Настала пятница и текущее время больше чем 21:30");
 
ikatsko:
Il y a deux terminaux MT4 sur le même ordinateur portable : un avec 4 décimales et un avec 5 décimales. Dans le même temps, le trafic sur le premier est de 105/0 kb, sur le second de 3450/0 kb. Le premier est plus gourmand en ressources CPU (6 %), le second (39 %). Quel est le problème ? Est-ce même une norme ?
Oui.
 

AlexeyVik

J'ai changé la date sur mon ordinateur pour 2000.

a lancé ce script :

input string time="21:30";

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

et j'ai obtenu ceci :

Donc StringToTime() prend la date de l'ordinateur local.

 
tuner:

AlexeyVik

J'ai changé la date sur mon ordinateur pour 2000.

a lancé ce script :

et j'ai obtenu ceci :

Donc StringToTime() prend la date de l'ordinateur local.

Et alors ? Laissez-le prendre sur la lune, tant que vous définissez "de et à" le temps passé XXX secondes et ce nombre entier que nous comparons avec le nombre de secondes passées depuis le 01.01.1970 du temps nécessaire.

Vous feriez mieux de vérifier cette ligne

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

où vous avez eu le problème. Nous sommes vendredi.

 
AlexeyVik:

Vous feriez mieux de vérifier cette ligne

où vous avez eu le problème. Nous sommes vendredi.

J'ai vérifié, si l'ordinateur local a une date inférieure à celle du courtier, alors les imprimantes sont là,

et si l'ordinateur local a une date supérieure à celle du courtier, pas d'imprimante.

En même temps, j'ai vérifié l'heure qui s'est définitivement écoulée, c'est-à-dire "11:30".

dans le premier cas TimeCurrent() est comparé à 2014.11.06 11:30, et dans le second casà 2014.11.0811:30

PS a corrigé la mise en évidence

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

La première ligne est claire, le commentaire de la deuxième ligne ne l'est pas.

Pourquoi le vendredi est-il loin alors qu'il est déjà arrivé ? Après tout, la deuxième ligne n'est exécutée que si c'est vendredi.

 
tuner:

J'ai vérifié, si l'ordinateur local a une date inférieure à celle du courtier, alors les imprimantes sont là,

et si la date sur l'ordinateur local est supérieure à la date du courtier, alors il n'y a pas d'imprimante.

c'est-à-dire que l'heure est passée, c'est-à-dire "11:30".

dans le premier cas TimeCurrent() est comparé à 2014.11.06 11:30, et dans le second casà 2014.11.0811:30

PS a corrigé la mise en évidence


Ici, l'heure locale est supérieure d'une heure à l'heure du serveur.

Ce script

   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"
          );


Produit les valeurs suivantes.

D'abord le nombre de secondes écoulées entre le 01.01.1970 et l'heure spécifiée, puis l'heure sous la forme à laquelle nous sommes habitués.


Sur cette base, veuillez expliquer ce qui vous trouble dans ces valeurs ?


Oui. Dans mon deuxième commentaire, je pensais à autre chose.

 
TheXpe
TheXpert:
да.
Merci. La brièveté est la sœur du talent !
 

Bonjour.

Il y a une tâche comme celle-ci. (on ne peut pas l'attacher à une coche)

Si un ordre en attente se déclenche {alors...}.

Dans mon EA, j'utilise Terminal.mqh pour calculer les ordres.

Terminal // Mas_Tip[0] ouvert Acheter

// si le nombre d'ordres d'achata augmenté de 1

if (Mas_Tip[0]+1)

{

fonction

}

Tout fonctionne. Mais il se déclenche à chaque nouveau tic-tac.

Comment attacher cet étui à une tique ? Et ensuite comparer la valeur du tick précédent et celle du tick actuel.