Questions pour les débutants en MQL5. Les professionnels ne passent pas leur chemin. - page 7

 
Artyom Trishkin:

DRAW_NONE == 0

DRAW_LINE == 1

Donc vous avez quelque chose d'autre quelque part. C'est censé fonctionner pour vous aussi.

Je ne peux pas encore vous dire ce que c'est, mais ça ne marche pas toujours.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 
Artyom Trishkin:

Non, tu n'es pas obligé. Tout est fait une fois à la limite>1. C'est la première exécution et le chargement de l'historique. Et si vous avez une période de lissage_sm=10, alors la limite dans ce cas doit être inférieure de 10. En conséquence :

if(limit>1)
  {
   limit=rates_total-period_sm-1;
   ArrayInitialize(Buffer,InitValue);
  }

InitValue - valeur pour initialiser le tampon - 0 ou EMPTY_VALUE - selon le cas. Ou -100500 ...

comme vous le suggérez dans votre exemple - ce n'est pas la bonne façon de procéder - ou, si vous ne vous comprenez pas, donnez une explication détaillée.

Décider de ce que l'on appelle "C'est le premier historique d'exécution et de chargement" -- est fait par prev_calculated

limite (la limite n'est pas claire dans votre cas) - si c'est le nombre de barres, à partir duquel le recalcul commence - alors la limite ici peut être plus que 1, par exemple, 5 minutes sans connexion - à l'apparition de la connexion sur M1 limite=5, et il n'y a pas besoin de recalculer l'indicateur depuis le début

vous pouvez voir dans les exemples de terminal standard comment tout utiliser.

exemples de l'indicateur "Bears" :

MQL4 (numérotation des mesures du début à la fin) :

   int limit=rates_total-prev_calculated;
//---
   if(rates_total<=InpBearsPeriod)
      return(0);
//---
   if(prev_calculated>0)
      limit++;
   for(int i=0; i<limit; i++)

MQL5 (numérotation des mesures de la fin au début) :

   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
 

Bonjour à tous. J'avais un compte de démonstration sur MT-5. J'ai perdu mon mot de passe pour me connecter à MT-5 après avoir réinstallé mon Windows. Maintenant je l'ai enregistré dans le terminal web

Mon compte de démonstration MT-5. Tout va bien. J'ai mis un nouveau login et un nouveau mot de passe sur le terminal d'origine MT-5. Tout fonctionne, seulement à l'ouverture de la nouvelle commande F9,

dans une fenêtre de nouvelle commande - les boutons Acheter et Vendre ne sont pas actifs. Je ne peux pas passer de commande. S'il vous plaît, que dois-je faire ?

Je suis désolé, je dois demander.

Je n'ai pas d'ordre. Merci.

 
Shara1:

Bonjour à tous. J'avais un compte de démonstration sur MT-5. J'ai perdu mon mot de passe pour me connecter à MT-5 après avoir réinstallé mon Windows. Maintenant je l'ai enregistré dans le terminal web

Mon compte de démonstration MT-5. Tout va bien. J'ai mis un nouveau login et un nouveau mot de passe sur le terminal d'origine MT-5. Tout fonctionne, seulement à l'ouverture de la nouvelle commande F9,

dans une fenêtre de nouvelle commande - les boutons Acheter et Vendre ne sont pas actifs. Je ne peux pas passer de commande. S'il vous plaît, que dois-je faire ?

Je suis désolé, je dois demander.

Merci.

J'ai compris le problème. J'avais 0,00 dans la fenêtre de nouvel ordre F9 et le volume était de 0,00. J'ai mis 0,01 et ça a marché.

 

Bonjour, veuillez me conseiller, il y a ces chaînes dans certains Expert Advisors.

  double highest=DBL_MIN,lowest=DBL_MAX;

Question - à quoi servent les variables assimilées à ces constantes DBL_MIN, DBL_MAX ?

 
refounder83:

Bonjour, veuillez me conseiller, il y a ces chaînes dans certains Expert Advisors.

Ma question est la suivante : à quoi servent les variables assimilées à ces constantes DBL_MIN et DBL_MAX ?

Pour les comparer aux données réelles qui sont évidemment inférieures à DBL_MAX et évidemment supérieures à DBL_MIN.

Par exemple :

double x=DBL_MIN;
int total=ArraySize(array);
for(int i=0; i<total; i++)
  {
   double y=array[i];  
   if(y>x) x=y;
  }
Print("x=",DoubleToString(x,Digits()));
 
Merci, je vois.)
 

Cette procédure permet-elle de convertir le temps du serveur en secondes ?

datetime time=TimeTradeServer()+60*60*24;
   
  
 
refounder83:

Cette procédure permet-elle de convertir le temps du serveur en secondes ?

C'est le "temps du serveur" plus un jour (60 secondes * 60 minutes * 24 heures).

Vous pouvez utiliser PeriodSeconds()

Print("PeriodSeconds(PERIOD_D1)=",PeriodSeconds(PERIOD_D1),", PeriodSeconds(PERIOD_H1)*24=",PeriodSeconds(PERIOD_H1)*24,", 60*60*24=",60*60*24);