Un sous-atelier pour remplir les FAQ (questions fréquemment posées). Aidons nos camarades ! - page 5

 

J'ai promis, je vais commencer par le plus simple)

Question : MQL effectue-t-il des opérations arithmétiques de manière incorrecte ? Pourquoi la division d'un nombre par un autre donne-t-elle 0 ?

Réponse :

Vous avez probablement écrit une expression telle que

c = a/b;  // (1)

en déclarant les variables a et b comme des entiers :

int a,b;

Dans ce cas, le compilateur MQL interprète le signe "slash" comme une opération de "division entière". Ainsi, même si avant l'apparition de (1) dans le code, on attribue à a et b des valeurs quelconques, même non entières, la variable c contiendra toujours la réponse " b rentre dans le nombre a tant de fois entier". Cela signifie que si, avant le calcul (1), a était plus petit que b, le résultat sera nul, quel que soit le type de la variable c (elle peut être double dans cet exemple).

L'erreur décrite est souvent la raison du comportement "incorrect" du programme dans le terminal du client - message " diviser par zéro " dans les journaux des conseillers experts, non-affichage d'une ou plusieurs lignes d'indicateurs dans la fenêtre du terminal, etc.

La solution au problème :

Corriger le type de données dans la déclaration des variables à celui correspondant aux opérations à utiliser :

double a,b;
 
Question : Pourquoi la division de 3 par 2 est-elle égale à 1 et non à 1,5 ?

Alert(3/2);

Réponse : Les nombres 3 et 2 dans cette expression sont des nombres entiers. Un nombre entier n'est pas divisible sans reste. Pour obtenir le résultat 1,5, vous devez spécifier que le diviseur est un nombre à virgule flottante :

Alert(3.0/2);

* * *

Question : Pourquoi l'expression ne se calcule-t-elle pas correctement ?

  double price=1.0; // Цена
  double point=0.0001; // Величина пункта
  double level=272.0; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

R : Les variables à virgule flottante ont un nombre limité de décimales. Pour cette raison, les valeurs peuvent être légèrement déformées lors du processus de calcul. Après avoir calculé l'expression, avant de comparer les nombres à virgule flottante, ils doivent être normalisés au niveau de précision requis :

  levelprice=NormalizeDouble(levelprice,4);

  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

* * *

Question : Comment puis-je obtenir la valeur d'un indicateur personnalisé dans mon Expert Advisor ?

Réponse : Pour cela, nous disposons de la fonction iCustom().

* * *

Question : Où dois-je commencer à apprendre MQL4 ?

Réponse : Il existe un guide d'aide très détaillé intégréà MetaEditor (Ouvrir MetaEditor - Menu principal - Affichage - Navigateur - Dictionnaire).
Le terminal est livré avec deux Expert Advisors - MACD Sample et Moving Average, vous pouvez commencer par l'analyse de leur code.
En outre, sur mql4.com, on trouve un tutoriel, un grand nombre d'articles et toutes sortes de codes.
 
Q : Pourquoi la valeur est 0 alors qu'elle n'est absolument pas 0 ?

  double point=0.00001; // Величина пункта
  Print(point);

R : Print() et Alert() n'affichent que quatre décimales. Si vous avez besoin de plus, vous devez convertir le nombre double en chaîne en utilisant DoubleToStr().
Print(DoubleToStr(point,5));
 

Q : L'EA produit un grand nombre de messages avec Print(), mais plus de la moitié des messages sont manquants quelque part dans le testeur.

R : Pendant le test, si la fréquence de sortie est élevée, une partie des messages n'est pas imprimée dans l'onglet "Log", mais tous les messages peuvent être vus dans le fichier journal du testeur après le test. Le fichier se trouve dans le dossier tester/logs.

 
Merci à tous, écrivez encore.
J'élaborerai une FAQ uniquement dans la soirée, lorsque je serai sur place.
 

Une suggestion aux modérateurs, et à ceux qui sont prêts à fournir une aide minimale.

Vous conviendrez que le forum n'est pas suffisant pour une présentation structurée de l'information, son traitement et sa recherche. Je vois que la seule issue est de créer le manuel CHM le plus complet, qui pourra ensuite être utilisé pour créer une section entière sur le forum.

Pour commencer, j'ai créé une structure d'aide.
Il est divisé en 3 grandes sections .

1) COMMENT. Cette section décrit les réponses proactives aux questions possibles. Par exemple, comment récupérer les données des indicateurs, comment clôturer tous les ordres, etc. Cette section contient également une grande base de données systématisée de fonctions (analogues de fonctions de Kim). Et surtout, des exemples de TOR primitifs terminés avec une explication détaillée du code et des commentaires. Il s'agit d'une section très complexe, car elle exige une systématisation accrue des connaissances et des analyses. Sera rempli en dernier lieu.

2) POURQUOI. Cette section décrit les questions fréquentes des débutants (leurs exemples ont été joliment démontrés par alsu et integer dans ce fil).

3) OÙ. Cette section est principalement un lien vers l'endroit où chercher ou trouver quelque chose. Je ne vais pas le décrire, voyez par vous-même.
Je joins l'archive de la structure chm prête à l'emploi (téléchargement en bas de l'article).


1. Structure manuelle


2. Démonstrations - allez à "Where : Useful Links -> MQL4 Tutorial".

Dossiers :
mql4_4.zip  53 kb
 


La voie à suivre est la suivante :

1. Des contributeurs indépendants sont nécessaires pour remplir les sous-sections. C'est-à-dire qu'ils ont besoin de questions réfléchies et de réponses détaillées avec une explication détaillée, un ensemble de références croisées, etc. (le modèle de message qui est suggéré sur la première page du sujet FAQ. (selon le modèle de message proposé sur la première page de la rubrique FAQ).

2. Toutes les questions créées pour une sous-section sont collectées par le curateur de cette sous-section (1-2 personnes). Ils les traitent, les amènent dans un style commun et forment une référence croisée le cas échéant Cela aura chaque sous-section du propriétaire, et ne désordonnera pas la base de données sera un style et un modèle de réponse.
Par exemple, la section Où est divisée en 4 sous-sections : Questions sur le testeur, le terminal, le forum et les liens utiles . Il y aurait assez d'une personne pour chaque sous-section. Ils seront pleinement engagés dans le tri de la base de connaissances entrante des freelances, qu'ils jugent nécessaire, ainsi que de toutes les suggestions qui peuvent provenir des autres membres des sections voisines. Et bien sûr, ils doivent eux-mêmes participer activement au remplissage de la base de données et à la création de questions.

3. Comme les sous-sections de remplissage - elles sont transférées au collecteur (comme moi). Il est nécessaire de les rassembler dans un seul fichier chm et de les conserver dans un seul style. Créez des références croisées supplémentaires, indexez, ajoutez des mots-clés pour les requêtes de recherche.

Les
sous-sections peuvent être réorganisées ou élargies sur proposition du conservateur et après accord de la nouvelle structure avec l'assembleur.

En résumé :
Participants : Bienvenue dans notre cabane. :) Si vous souhaitez être un conservateur de sous-section et ceux qui ont déjà quelque chose à apporter, n'hésitez pas à poster des réponses ici.
Modérateurs : Il y aura beaucoup de matériel. Veuillez ne pas autoriser les discussions et les messages vides et distraits dans ce fil de discussion. Il sera également nécessaire de supprimer les messages des participants après le déplacement du message vers la base commune, afin de faciliter le travail de la section.
Curateurs : Le fichier d'aide est créé en WinCHM 4.17 (pour ceux qui en ont besoin, contactez-moi). Exigences relatives aux noms et à l' emplacement des fichiers :
- la structure des dossiers doit répéter exactement la structure de l'aide
- tous les noms de fichiers/dossiers doivent être donnés uniquement en anglais dans des phrases significatives
- exemple de la base actuelle, qui "compile" WinCHM dans l'archive

Dossiers :
chm4_2.zip  19 kb
 

sergeev:

...


1) COMMENT. Cette section décrit les réponses anticipées aux questions possibles. Par exemple, comment obtenir des données sur les indicateurs, comment clôturer tous les ordres, etc. Et surtout, des exemples de TOR primitifs prêts à l'emploi avec une explication détaillée du code et des commentaires. Il s'agit d'une section très complexe, car elle exige une systématisation accrue des connaissances et des analyses. Sera rempli dans le dernier.

...

Alexey, toutes les fonctions de commande de Kim sont très douteuses en termes de fiabilité et de précision. Vous leur rivetez aussi des EA ?

 
Integer:

Alexey, toutes les fonctions de commande de Kim sont très douteuses en termes de fiabilité et de précision. Est-ce que vous rivetez les EAs sur eux aussi ?

Non. Je vais utiliser le mien, testé de façon réaliste. :)

Pour être honnête, je n'ai vu les Kim's pratiquement nulle part, sauf dans les recommandations de ce forum. Je ne les ai donnés dans la description de la section qu'à titre d'exemple, pour que vous sachiez de quoi nous parlons. Et je ne suis pas sûr que Kim's sera dans le manuel dans son code. Seule une idée sera prise et élaborée dans un style général.

La section HOW est la plus sérieuse. Elle doit être traitée par un maximum de 2 ou 3 personnes, car toutes les sections HOW sont une introduction à la dernière section - "Exemples de RPT et leur mise en œuvre", qui montrera toutes les options possibles et les combinaisons d'utilisation de toutes les fonctions des sections précédentes.

 

Question : Comment comparer deux nombres réels de type "double" ?


Réponse :

double A;
double B;

if(NormalizeDouble(MathAbs(A-B),Digits)<0.1*Point)return(true);
else return(false);