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

 
Aleksey Vyazmikin:

Veuillez m'aider à résoudre ce problème.

Supposons que j'ai un cadre temporel actuel M1, j'ai besoin de connaître l'heure de la dernière barre N de la barre donnée de n'importe quelle TF supérieure, l'heure peut ne pas être de 60 minutes, mais de 45 ou toute autre heure, et en plus il y a les week-ends, j'ai besoin de connaître la date de la dernière barre de la TF actuelle de n'importe quelle TF.

Comment dois-je m'y prendre ?

Vous spécifiez le numéro de la barre, le nom du symbole et la période de temps requise :

//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }

Vérifiez (juste au cas où) - si la fonction renvoie l'heure D'1970.01.01 00:00:00' - alors il y a une erreur.

 

J'ai rencontré un problème avec un ordre de vente qui n'a pas été placé.

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

Ai-je bien compris que le courtier a accepté l'ordre puis l'a rejeté ?

Pour quelles raisons alors et pourquoi pas ? Il n'y a plus d'erreurs dans les journaux. Avant cette erreur, il y avait plus de 50 commandes sans erreur. Après cette erreur, nous n'avons pas non plus enregistré d'erreurs.

Est-il possible de se débarrasser de ce problème ?

 
Vladimir Karputov:

Indiquez le numéro de la barre, le nom du symbole et la période souhaitée :

Vérifiez (juste au cas où) - si la fonction renvoie l'heure D'1970.01.01 00:00:00' - alors il y a une erreur.

J'utilise cette fonction, est-elle pire que celle que vous proposez ?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime(string symbol,int tf,int index)
  {
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol,timeframe,index,1,Arr)>0)
      return(Arr[0]);
   else return(-1);
  }

Le problème est que si l'intervalle de temps actuel est de 1 minute, je veux connaître le numéro de la dernière barre de l'intervalle de temps actuel dans l'intervalle de temps sélectionné, mais beaucoup de temps s'est écoulé (un écart à cause du week-end ou parce que la session du soir a fermé à 23-50, et la suivante n'a ouvert qu'à 10-00), alors je renvoie 09:59 et non 23:49:00, je demande l'heure de la façon suivante

datetime         StopDt=iTime(Symbol(),TF_iDeltaP,_Shift-1)-60;

C'est pourquoi j'ai demandé, comment obtenir ce temps de la dernière mesure avec n'importe quelle combinaison de TFs ?

 
Aleksey Vyazmikin:

...

Le problème est le suivant : si j'ai un intervalle de temps actuel de 1 minute, je veux connaître le numéro de la dernière barre de l'intervalle de temps actuel dans l'intervalle de temps sélectionné, ...

A la phrase surlignée, mon cerveau a explosé.

 
Vladimir Karputov:

A la phrase surlignée, mon cerveau a explosé.

Il y a une faute de frappe, j'ai besoin de la date de la dernière barre de l'intervalle de temps actuel, qui fait référence à la barre sélectionnée de l'intervalle de temps supérieur.

C'est clair ?
 
Aleksey Vyazmikin:

Il y a une faute de frappe, j'ai besoin de la date de la dernière barre de l'intervalle de temps actuel, qui fait référence à la barre sélectionnée de l'intervalle de temps supérieur.

C'est clair ?

Non, ce n'est pas clair. Mon cerveau n'arrête pas de bouillonner et d'exploser :). Une barre n'appartient qu'à sa propre période de temps.

 
Aleksey Vyazmikin:

Il y a une faute de frappe, j'ai besoin de la date de la dernière barre de l'intervalle de temps actuel, qui se réfère à la barre sélectionnée de l'intervalle de temps supérieur.

Est-ce que c'est clair ?

Si j'ai bien compris votre demande, alors :

1) Déterminez l'heure de clôture de la barre souhaitée du cadre temporel supérieur.

2. Calculez le temps de la barre de la TF basse qui ferme en même temps que la barre de la TF haute.

3. Sur cette période, demandez la barre du TF le plus jeune (la demande n'est pas stricte) - obtenez la barre la plus proche de la gauche sur la ligne de temps - celle dont vous avez besoin.

4. Vérifiez, si nécessaire, que cette barre est située à l'intérieur de la barre du TF supérieur (excluez la variante où les barres du TF junior ne sont pas présentes à l'intérieur de la barre du TF senior pour une raison quelconque).

 
Vladimir Karputov:

Non, ça ne l'est pas. Le cerveau continue de bouillonner et d'exploser :). Une barre n'appartient qu'à son cadre temporel.

Ok, passons à la visualisation des pensées :)

En blanc, j'ai indiqué l'endroit où nous faisons la demande, en jaune le délai que nous devrions obtenir.

C'est plus clair ? Si ce n'est pas le cas, veuillez poser des questions.

 
Aleksey Vyazmikin:

OK, passons à la visualisation des pensées :)

Le blanc indique l'endroit où nous faisons la demande, le jaune le temps de barre que nous devrions obtenir.

Est-ce plus clair ? Si ce n'est pas le cas, veuillez poser des questions pour clarifier la situation.

1. La photo est petite - la prochaine fois, mettez 2m par 2m :)

2. Encore une fois, je ne comprends pas ce que vous voulez dire : vous m'avez montré un graphique sur une certaine période de temps. Quel est le problème pour demander la barre numéro N sur cette période ?

 
Vladimir Karputov:

1. La photo est petite - la prochaine fois, mettez 2 mètres par deux à la fois :)

2. Je ne comprends pas cette idée - vous avez montré un graphique sur une certaine période. Quel est le problème de demander un numéro de barre N sur cette période ?

1. Je peux en faire plus - pas de problème ;)

2) Le délai indiqué dans le coin supérieur gauche est M5. Je ne peux pas demander le numéro de barre N car je ne sais pas comment le connaître exactement, surtout si le décalage n'est pas de 1 barre du TF supérieur, mais de plusieurs barres.

Je vais essayer d'obtenir un décalage d'une barre de l'algorithme suivant :

1. Découvrez combien de barres se sont écoulées depuis le début de la TF supérieure actuelle.

2. Décalez le nombre obtenu de 1 barre et trouvez le temps en utilisant la fonction iTime.