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

 
Vladimir Fionov:
Pour les paires de devises, si vous mettez une limite, tout fonctionne, mais pour la période de temps ne fonctionne pas, même si vous le mettez sur l'indicateur h1 ne fonctionne pas.

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valeur de retourPériode du graphique actuel (en minutes).

if(Period() != 60)  return(-1); // для H1

Essayez, ça marchera peut-être.

if(Period() != PERIOD_H1)  return(-1);

Ou supprimer les guillemets.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valeur de retourPériode du graphique actuel (en minutes).

Essayez-le et voyez si ça marche.

Merci beaucoup, ça a marché ! !!
 
Une autre question, lorsque l'on ajoute un #property strict au début de l'indicateur, celui-ci donne une erreur "array out of range" dans "Indicator name" (100,41) comment gérer cela ?

 
Vladimir Fionov:
Une autre question, lors de l'ajout au début lorsque l'indicateur #property strict donne l'erreur array out of range dans 'Indicator name' (100,41) comment le gérer ?

Vous devez réparer le tableau hors de portée. Localisation du problème dans votre code : ligne 100, caractère en position 42.
 
Vladimir Fionov:

Qu'est-ce qu'il y a de mal à ça ?

  1. Coller correctement le code dans le forum
  2. Vous devriez corriger l'erreur de dépassement des limites du tableau"ema[]". Vous calculez probablement la variable"limite" de manière incorrecte.
 
Karputov Vladimir:
  1. Insertion correcte du code dans le forum
  2. Vous devriez corriger l'erreur de dépassement des limites du tableau"ema[]". Vous calculez probablement la variable"limite" de manière incorrecte.
Désolé, je ne savais pas pour l'insertion du code, mais pour le code lui-même, pourquoi cela se produit-il lorsque vous insérez #property strict et que tout fonctionne sans cela ?
 
Vladimir Fionov:
Je suis désolé, je n'étais pas au courant de l'insertion du code, mais pour ce qui est du code lui-même, pourquoi cela se produit-il lorsque vous insérez #property strict et que tout fonctionne sans cela ?

Avez-vous vu l'aide dans MetaEditor ?

Le travail avec les fonctions, la portée des variables et la libération de la mémoire dans les tableaux locaux ont également changé. Comme les changements se sont avérés assez importants, il a été décidé d'introduire une nouvelle propriété #property strict afin de maximiser la compatibilité avec l'ancienne approche d'écriture des programmes MQL4. Lors de la création d'un nouveau programme MQL4 à l'aide de l'assistant MQL4, cette propriété est toujours ajoutée au modèle.

Et ainsi de suite :

Tableau des différences entre compilateurs :

Ancien compilateur MQL4

Nouveau compilateur MQL4

Nouveau compilateur MQL4 avec #property strict

Les points d'entrée init(), start(), deinit() peuvent avoir tous les paramètres et tous les types de retour.

init(), start(), deinit() conservés pour la compatibilité,

et les nouveauxOnInit(),OnStart(),OnCalculate(),OnTick(),OnTimer(),OnChartEvent(),OnTester(),OnDeinit() doivent correspondre exactement à leurs signatures

Même

Le résultat du retour de la fonction init() n'est analysé d'aucune façon par le sous-système d'exécution.

Le résultat du retour des fonctions init() et OnInit() n'est en aucun cas analysé par le sous-système d'exécution.

Lorsque l'expert ou l'indicateur renvoie une valeur non nulle de OnInit(), il s'arrête et le programme est déchargé.

Les noms des variables peuvent être presque tous les types de caractères (sauf les mots réservés), y compris les caractères spéciaux et les points.

Les noms de variables ne peuvent pas comporter de caractères spéciaux ni de points.

La listedes mots réservés est étendue, de sorte que des mots courants comme short, long, const, etc. ne peuvent pas être nommés.

Même

La portée d'une variable s'étend de la déclaration (même dans un bloc imbriqué) à la fin de la fonction.

Même

Plage de visibilité d'une variable - de la déclaration à la fin du bloc dans lequel la variable est déclarée.

Initialisation implicite de toutes les variables (globales et locales) avec des zéros.

Le même

Initialisation des variables globales uniquement. A partir des variables locales, seules les chaînes de caractères sont initialisées implicitement.

Les tableaux locaux ne sont pas libérés à la sortie de la fonction.

Les tableaux locaux sont libérés à la sortie de la fonction

Les tableaux locaux sont libérés à la sortie {}

L'erreur"Array out of range" ne conduit pas à une erreur critique*.

Idem. Sauf pour les tableaux de structures et les classes pour lesquels cette erreur est critique.

"Array out of range" est une erreur critique qui entraîne l'arrêt du programme.

Pas de structures et de classes

Il existe desstructures et des classes. Des types de données supplémentaires apparaissent.

Même

Chaînes de caractères - simple octet.

datetime - entier de 32 bits

La variable prédéfinie Volume est de type double

Chaînes de caractères - unicode.

datetime - entier de 64 bits

Levolume est une variable prédéfinie de type long.

Même

ArrayCopyRates() produit une copie virtuelle vers le tableau double[][6]

ArrayCopyRates() produit une copie virtuelle vers le tableau MqlRates[]. Pour des raisons de compatibilité, la copie dans le tableau double[][6] est maintenue, mais cette copie n'est pas virtuelle mais réelle.

Aussi.

Les fonctions ne peuvent pas renvoyer de valeurs même si elles ont un type. À cette fin, le compilateur insère automatiquement return(0) à la fin de la fonction.

Idem.

Les fonctions de tout type doivent toujours retourner une valeur

Nombre de fichiers ouverts simultanément - 32

Nombre de fichiers ouverts simultanément - 64

Même

Les fichiers sont toujours ouverts en mode partagé **

Le mode de partage doit être déclaré explicitement avec FILE_SHARE_READ et/ou FILE_SHARE_WRITE.

Même

Les scripts dans la fenêtre d'entrée montrent les noms des variablesexternes.

Les noms desvariablesexternes et d'entrée sont affichés dans la fenêtre des paramètres d'entrée pour les scripts en mode show_inputs.

Pour les scripts en mode show_inputs, les commentaires de chaîne sont affichés dans la fenêtre d'entrée à la place des noms devariablesexternes et d'entrée.

* Vous devez prêter une attention particulière à l'erreur "Array out of range" - de nombreux anciens indicateurs personnalisés produiront cette erreur dans le nouveau compilateur en mode strict lorsqu'ils sont exécutés sur un graphique. Il est souhaitable d'en trouver la cause et de l'éliminer.

** Dans les nouveaux MQL4 et MQL5, les drapeaux FILE_SHARE_READ et FILE_SHARE_WRITE sont responsables du mode de partage des fichiers, ils n'existaient pas dans l'ancien MQL4.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
dis-moi ce qui ne va pas ?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Essayez d'ajouter une ligne comme celle-ci.
 
Vladimir Fionov:

Désolé si je vous dérange, mais maintenant il y a cette erreur

39ème position.

Même erreur, le tableau est hors de portée ?
 
Vladimir Zubov:
Même erreur, le tableau est hors de portée ?
OUI
Raison: