Questions des débutants MQL5 MT5 MetaTrader 5 - page 532

 
-Aleks-:
Nous obtiendrons les secondes dont nous avons besoin pour arrondir - l'arrondi est le problème.

duh

datetime Day00=86400*(time[n]/86400);//начало дня
et il y a un arrondi au début de la journée. 86400=24*60*60
 
-Aleks-:

Je n'arrive pas à comprendre comment l'utiliser.

La deuxième valeur nécessite"MqlDateTime&dt_struct// structure pour prendre des valeurs" et je ne comprends pas comment utiliser ce MqlDateTime.

Il y a un temps. L'heure comporte des paramètres tels que : l'année, le mois, le jour, les heures, les minutes, les secondes, etc. En appelant la fonction TimeToStruct(), vous décomposez le temps en ces composantes. Ensuite, par exemple, vous pouvez mettre à zéro les heures, les minutes et les secondes - vous obtenez le début de la journée.

MqlDateTime est un type de données, tout comme int, bool, etc. Il s'agit simplement d'un type composé, c'est-à-dire que pour accéder à ses champs (heures, minutes, secondes...), vous devez utiliser un point. Par exemple : dt_struct.hour - valeur de l'heure. Pour en savoir plus sur les structures, consultez le site https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Que signifie ce commentaire sur l'ordre dans le carnet de route qui ne change rien

 
Aleksey Lebedev:

bien

et il y a un arrondi au début de la journée. 86400=24*60*60
Selon votre formule, nous obtenons le nombre de jours entre la barre actuelle et la barre à distance, mais ces jours sont conditionnels, il pourrait être 9 heures ce jour et 1 heure le jour précédent, alors la différence en secondes sera de 122400 , ce qui est 1,42 jours - une fois arrondi à 1 jour, et le besoin d'être 2.
 
Alexey Kozitsyn:

Il y a du temps. L'heure comporte des paramètres tels que : année, mois, jour, heures, minutes, secondes, etc. En appelant la fonction TimeToStruct(), vous décomposez le temps en ces composantes. Ensuite, par exemple, vous pouvez mettre à zéro les heures, les minutes et les secondes - vous obtenez le début de la journée.

MqlDateTime est un type de données, tout comme int, bool, etc. C'est juste un type composé, c'est-à-dire que pour avoir accès à ses champs (heures, minutes, secondes...) il faut utiliser un point. Par exemple : dt_struct.hour - valeur de l'heure. Pour en savoir plus sur les structures, consultez le site https://www.mql5.com/ru/docs/basis/types/classes.

Et comment, je suis désolé, effectuer cette remise à zéro ?
 
-Aleks-:
Selon votre formule, nous obtenons le nombre de jours entre la barre actuelle et la barre à distance, mais ces jours sont conditionnels, c'est-à-dire qu'il peut être 9 heures le jour actuel et 1 heure le jour précédent. Alors la différence en secondes sera de 122400, ce qui équivaut à 1,42 jours - une fois arrondi à 1 jour, et la nécessité d'en avoir 2.

un jour perdu, 23h+24h+9h=2 jours 8h... Je n'ai pas besoin de cette formule si j'en ai besoin :

J'ai besoin de calculer sur chaque graphique de l'intervalle de temps actuel. Pour le calcul, j'ai besoin de connaître la date du cadre temporel supérieur (jours). J'ai joint le code ci-dessus - le but est de connaître sur chaque barre le prix maximal de la TF supérieure au moment de l'ouverture de la barre dans le cadre temporel actuel.

Encore une fois :
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



Et vous dites que la structure... :)

 
Aleksey Lebedev:

un jour perdu, 23h+24h+9h=2 jours 8h... Vous n'avez pas besoin de cette formule si vous en avez besoin :

Encore une fois :



Et vous dites que la structure... :)

Pourquoi avez-vous 23 heures - J'ai écrit 1 heure, mais le point ne change pas.

24 (la veille - une heure hier)+24 (hier - une heure aujourd'hui)+8 (après une heure aujourd'hui - moins une heure)=56/24=2,33, ce qui fait deux jours, n'est-ce pas ?

 
-Aleks-:

Pourquoi avez-vous 23 heures - J'ai écrit 1 heure, mais l'essence ne change pas.

24 (avant-hier - à l'heure d'hier)+24 (hier - à l'heure d'aujourd'hui)+8 (après une heure d'aujourd'hui - moins une heure) =56/24 = 2,33 c'est-à-dire deux jours, n'est-ce pas ?

23h avant hier +

24h hier +

9h aujourd'hui=

2 jours 8h=2,(33)jours

C'est la bonne façon de faire :

int DayN=time[0]/86400-time[163]/86400;

Peu importe, ce n'est pas nécessaire)
 
Aleksey Lebedev:

23h avant hier+

24h hier+

9h aujourd'hui=

2 jours 8h=2,(33)jours

La méthode correcte est la suivante :

Peu importe, ce n'est pas nécessaire)

Imaginons maintenant qu'il ne soit pas 9h ce jour mais 19

24(avant-hier +24(hier - 1h aujourd'hui)+18(après 1h aujourd'hui - moins 1h)=66/24=2,75 c'est-à-dire que cela fait trois jours, êtes-vous d'accord ?

Comme si la gamme n'avait pas changé chaque jour, et que le calcul pendant la journée donnait alors 2, puis 3 jours - c'est là que le bât blesse.

La variante

 int DayN=time[0]/86400-time[163]/86400;

Ce n'est pas bon non plus, si nous supposons que la barre actuelle est de 1 heure et que celle calculée est de 23 heures, dans ce cas le résultat du calcul sera zéro, alors qu'il devrait être 1.
 
-Aleks-:
Cela ne fonctionne pas non plus si nous supposons que la barre actuelle est de 1 heure et que la barre estimée est de 23 heures, auquel cas le résultat du calcul est zéro et devrait être 1.

Ce sera 1, les deux temps sont d'abord arrondis à un jour entier, puis soustraits.