Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 570

 

Comment vérifier la condition à un moment donné ? par exemple sur le graphique M5, à 22:59, c'est-à-dire une minute avant la fermeture de la barre. vérifier pour toute la minute.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

Comment vérifier la condition à un moment donné ? Par exemple, sur le graphique M5, à 22:59, c'est-à-dire une minute avant la clôture de la barre.

Dans l'indicateur sur l'historique - seulement en lisant les données du TF plus jeune (dans ce cas M1), nous devrons nous agiter. Mais pour la barre de zéro :

  1. Calculez le temps restant pour fermer la barre.
  2. S'il y a 1 minute ou moins, nous faisons ce qui est nécessaire.

 
Ihor Herasko:

...Bien pour la barre de zéro :

  1. Calculez le temps jusqu'à la fermeture de la barre.
  2. S'il reste une minute ou moins, faites le nécessaire.

C'est-à-dire que l'heure actuelle soustrait l'heure d'ouverture du bar ?

Nous devrions peut-être sauter l'itération si l'heure n'est pas dans la plage 22:59, 23:00.

comment écrire correctement cette condition ?

 
PolarSeaman:

Est-ce que c'est l'heure actuelle soustraite de l'heure d'ouverture de la barre ? Est-ce que cela compte pour moins d'une minute ?

Peut-être sauter l'itération si l'heure n'est pas dans l'intervalle 22:59, 23:00

Comment écrire correctement cette condition ?

Si l'heure est explicitement fixée, c'est la même chose que dans le schéma ci-dessus :

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

Je n'ai pas vérifié le code. Il peut y avoir des erreurs d'impression ou d'autres défauts. L'essentiel ici est le sens de la pensée.

Vous devez également vérifier que les valeurs des heures et des minutes sont correctes. Après tout, un utilisateur peut saisir des valeurs telles que 38 heures et 112 minutes.

 
Ihor Herasko:

Si l'heure est explicitement définie, c'est la même chose que ci-dessus :

Je n'ai pas vérifié le code. Il peut y avoir des fautes de frappe et quelques erreurs. L'essentiel ici est la direction de la pensée.

Vous devez également vérifier que les valeurs des heures et des minutes sont correctes. Après tout, un utilisateur peut saisir des valeurs telles que 38 heures et 112 minutes.

Dans l'œil, utilisateur, pendant 112 minutes)

pourquoi ça ne peut pas être comme ça ?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

ne s'affiche pas à l'heure spécifiée

Il y aura plusieurs gammes à désactiver chacune d'entre elles

 

les guillemets peuvent "s'endormir" pendant une minute et vous manquerez l'heure)

La bonne chose à faire est de créer une minuterie, de synchroniser l'heure locale et l'heure actuelle, et de faire en sorte que la minuterie "attrape" la bonne heure.

 
PolarSeaman:

Dans l'œil, vers l'utilisateur, en 112 minutes)

Pourquoi ne pouvez-vous pas le faire de cette façon ?

C'est exactement la mauvaise solution, car vous comparez des chaînes de caractères, pas des nombres. Bien que vous puissiez également faire quelque chose avec TimeToStr. Mais cette approche est condamnée à être plus lente que le fonctionnement avec des chiffres. Après tout, les opérations sur les chaînes de caractères prennent beaucoup plus de temps que les opérations arithmétiques les plus simples (+, -, /, *).

Il y aura plusieurs gammes, chacune doit être désactivée.

Pour ce faire, les valeurs des plages souhaitées sont stockées dans des tableaux. Certes, on ne sait pas très bien comment cela se présenterait dans les paramètres de configuration - il faudrait en faire trop. Les solutions existent pourtant. Pas simple, mais ils sont disponibles.

 
Taras Slobodyanik:

les guillemets peuvent "s'endormir" pendant une minute et vous manquerez l'heure)

La bonne méthode consiste à créer une minuterie, à synchroniser l'heure locale et l'heure actuelle, et à "attraper" la bonne heure dans la minuterie.

Eh bien, vous n'avez pas à faire quoi que ce soit à une heure précise. Donc c'est bon))

 
Taras Slobodyanik:

les citations peuvent "s'endormir" pendant une minute et manquer l'heure)

faire correctement une minuterie, synchroniser l'heure locale et l'heure actuelle, et dans la minuterie "attraper" la bonne heure

pouvez-vous insérer OnCalculate() dans OnTimer() ?

Je ne sais pas comment synchroniser l'heure locale et l'heureactuelle, je ne le trouve pas dans l'aide.

 
Ihor Herasko:

Eh bien, c'est ce qu'il faut pour ne rien faire à un moment donné. Donc c'est bon.)

comment, ne rien faire ? seulement cette minute est nécessaire pour vérifier, et dormir pendant 24 heures)