Auto-apprentissage du langage MQL5 à partir de zéro - page 29

 
Реter Konow:
Vous avez rempli un novice d'informations inutiles).

C'est au débutant de décider si l'information est utile ou non.

Vasiliy Sokolov:

Bien dit, instructif, merci

 
Alexey Viktorov:

Cela suggère que vous ne devriez pas étaler vos désirs de cette manière. Vladimir aurait tout aussi bien pu poser des questions portant spécifiquement sur telle ou telle fonction et recevoir des conseils utiles, plutôt que les inepties des "experts" comme apprendre le C++ ou apprendre l'assembleur. Vous pourriez commencer par étudier les cartes perforées.

Je suis favorable à ce que TC étudie selon son plan et ne "saute" pas par-dessus sa tête. Tout cela au bon moment. Et il faut bien sûr apprendre les MQL et dans le bon ordre. La philosophie ci-dessus (donnée par Vasily et moi) peut aider à structurer la connaissance, mais pas le vide. Et alors que l'étudiant est au tout début de son apprentissage, il doit essayer de structurer le vide selon notre notation philosophique.

Retournez au manuel et oubliez toutes ces histoires pour l'instant.
 
Vasiliy Sokolov:

On avance :

  • Comme il y a beaucoup d'événements, il y a beaucoup de gestionnaires d'événements. Puisque les événements sont appelés de manière incohérente, leurs gestionnaires d'événements sont également appelés de manière incohérente. Comme les appels sont incohérents, les gestionnaires d'événements ne peuvent pas dépendre les uns des autres, et ils ne peuvent pas non plus dépendre des données des autres. La seule construction qui répond à ces exigences strictes est une fonction.
  • Les fonctions ne peuvent pas dépendre les unes des autres. Si une fonction renvoie la somme a+b, et que la seconde fonction renvoie le produit a*b, le résultat de ces deux fonctions ne dépendra pas de la séquence d'appels. Nous pouvons appeler la première fonction avec les arguments 3 et 5 et obtenir 8. Ensuite, appelez la deuxième fonction avec les mêmes arguments et obtenez 24. Puis échangez leurs appels. Les résultats seront les mêmes. La fonction d'addition renverra toujours 8 avec les arguments 3 et 5. La fonction de multiplication retournera toujours 24 avec les mêmes arguments.
  • Il ressort clairement de ce qui précède que le gestionnaire d'événement ne peut être qu'une fonction. Si un nouvel événement tick se produit, il est traité par la fonction OnTick. Si l'événement Start (un lancement unique du script) se produit, il est géré par la fonction spéciale OnStart.
  • Cette fonction est universelle. Cette fonction peut gérer non seulement les événements. La fonction peut retourner quelque chose d'utile, par exemple l'heure actuelle. Une fonction peut effectuer des calculs complexes avec les arguments qui lui sont transmis et renvoyer le résultat final de ces calculs sous la forme d'une valeur unique. Enfin, une fonction peut être un fournisseur de données : Vous appelez la fonction et obtenez les données dont vous avez besoin, telles que des citations, à partir de celle-ci.
  • En interne, MetaTrader se compose de milliers de fonctions, dont environ 1500 mille sont gentiment mises à la disposition des utilisateurs. Ces fonctions sont très utiles. Ils vous permettent de vérifier l'heure du système et d'obtenir les données d'un instrument qui vous intéresse. Ces fonctions sont utilisées pour envoyer des ordres de transaction. Vous pouvez ouvrir le manuel ICL et voir qu'il est constitué de fonctions et de leurs arguments. Ainsi, MetaTrader, en ce qui concerne les programmes utilisateurs, est un grand ensemble de fonctions.
  • Les fonctions universelles ne suffisent pas. Quel que soit le nombre de nouvelles fonctions ajoutées au système, il y aura toujours une pénurie de celles-ci. La raison en est que chacun a des besoins différents. Il n'existe pas de dispositif unique pour toutes les occasions. Les fonctionnalités les plus génériques et universelles sont déjà incluses dans MetaTrader et sont aimablement partagées avec nous. Cependant, les besoins des utilisateurs sont infinis. MetaQuotes ne peut pas répondre aux besoins individuels de 100 000 utilisateurs de son terminal. Au lieu de cela, ils ont opté pour une solution plus souple : ils ont laissé les utilisateurs créer eux-mêmes les fonctionnalités qu'ils souhaitaient. Les utilisateurs en ont profité. Au lieu d'utiliser une fonction système qui ne leur convient pas, ils peuvent écrire leur propre fonction qui résout parfaitement leur problème. Aucune fonction du système n'est parfaite en raison de son universalité.
  • La capacité d'un utilisateur à écrire ses propres fonctions et à comprendre leur fonctionnement vous indique le niveau de compétence du programmeur. S'il comprend qu'un programme est un ensemble disjoint de gestionnaires (sous forme de fonctions) qui ne traitent pas de manière cohérente les événements entrants, il est bon. S'il sait écrire ses propres fonctions, c'est un autre plus. S'il peut combiner le travail de plusieurs fonctions (les siennes et celles du système) dans un algorithme commun, c'est un autre atout pour lui.
  • Si vous comprenez que tout dans MetaTrader (le quatrième et le cinquième) est en quelque sorte basé sur des fonctions, des fonctions et des fonctions - tout devient soudainement clair. L'aide n'est plus présentée comme un livre épais contenant un tas d'extraits de code éparpillés, mais comme un guide des fonctions disponibles et de ce qu'elles font. Tout le reste, comme les types de données, les tableaux, les structures, les classes, est sans intérêt. Il s'agit de soutenir les fonctions afin qu'elles puissent retourner quelque chose et accepter quelque chose.

(pour l'instant)

Super ! !! Vasily, vous avez un talent naturel pour l'enseignement. Tout est clair et compréhensible, surtout pour ceux qui sont au point mort. Avez-vous déjà pensé à écrire un livre similaire à MQL4 Tutorial de Sergey Kovalev, mais qui s'appellerait MQL5 Tutorial de Vasily Sokolov ?

Vous pensez quece sujet donnera un élan à une telle initiative, n'est-ce pas, Vasily ?

Salutations, Vladimir.

 
Vasily ne focalise votre attention que sur certains aspects particuliers, les considérant comme plus importants que d'autres. Par exemple, Fonction ou Événement. Lisez les fonctions dans l'ouvrage de S.Kovalev et vous trouverez des explications non moins (et même plus) détaillées et accessibles, mais sans se concentrer sur elles, au détriment des autres domaines. Par conséquent, vous devez lire le manuel.

Oui, Vasiliy a très bien écrit, mais c'est un peu "biaisé" par sa compréhension subjective.

Je ne dis pas "apprenez de moi, je sais comment le faire correctement", je dis "apprenez d'un manuel et obtenez les bases correctes, pas mes concepts hâtivement formulés de ce qui m'intéresse maintenant dans le sujet".

P.S. Cependant, c'est vous qui décidez.
 
Реter Konow:
Vasily concentre votre attention uniquement sur certains aspects particuliers, croyant qu'ils sont plus importants que les autres. Par exemple, une fonction ou un événement. Lisez sur les fonctions dans l'ouvrage de S.Kovalev et vous trouverez une explication non moins (et même plus) détaillée et accessible, mais sans se concentrer sur elles, au détriment des autres domaines. Par conséquent, vous devez lire le manuel.

Oui, Vasiliy a très bien écrit, mais c'est un peu "biaisé" par sa compréhension subjective.

Je ne dis pas "apprenez de moi, je sais comment le faire correctement", je dis "apprenez d'un manuel et obtenez les bases correctes, pas mes concepts hâtivement formulés de ce qui m'intéresse maintenant dans le sujet".

P.S. Cependant, c'est vous qui décidez.

Et toi, Peter, tu peux proposer à Vasily et toi de faire un bon travail ensemble et d'écrire un tel livre sur MQL5.

Écrire un livre est le meilleur moyen de laisser une trace dans l'histoire de l'humanité, en particulier dans l'histoire de la programmation. Pensez-y !

Salutations, Vladimir.

 
MrBrooklin:

Peter, je vous propose, à vous et à Vasily, de faire un bon travail ensemble et d'écrire un tel livre sur MQL5.

Écrire un livre est le meilleur moyen de laisser une trace dans l'histoire de l'humanité, en particulier dans l'histoire de la programmation. Pensez-y !

Salutations, Vladimir.

Merci pour la suggestion, mais Vasiliy me "bat" facilement à l'approche classique, qui est nécessaire dans un tel livre. Je ne peux offrir qu'une compréhension abstraite de l'objet et de l'environnement dans leur interaction dynamique à travers le prisme de la programmation, mais ce sera le dernier chapitre. ))))
 
Реter Konow:
Merci pour l'offre, mais Vasily me "bat" facilement à une approche classique, ce qui est exactement ce dont j'ai besoin dans un tel livre. Je ne peux offrir qu'une compréhension abstraite de l'objet et de l'environnement dans leur interaction dynamique à travers le prisme de la programmation, mais ce sera le dernier chapitre. ))))

Je vois. Maintenant, je voudrais connaître l'opinion de Vasily sur ma proposition de livre.

En ce moment, j'étudie son article "Universal Trading Expert Advisor : Working with Custom Trailing Stops (Part 6)".

Sincèrement, Vladimir.

 

Suite de l'article

Il était clair dans le post ci-dessus que l'accent était mis sur les fonctions. Tout était consacré à eux et rien qu'à eux. On pourrait penser qu'il s'agit d'un parti pris subjectif évident ou d'une "philosophie" obscure. Cependant, il n'y a pas de philosophie ici. Et cette attention portée aux fonctions n'est pas fortuite. Le fait est qu'en programmation, la fonction est d'une importance fondamentale. De plus, la fonction est une notion très importante et fondamentale en mathématiques. Dans les années 20 du siècle dernier, Alonzo Church a développé un système de calcul basé sur les fonctions. Cela s'appelait le lambda-calcul. Ce système a permis de formaliser la notion de calculabilité et de lier étroitement les calculs informatiques et les mathématiques. Les principaux programmeurs du monde ont développé des langages de programmation dits fonctionnels basés sur le lambda-calcul, dans lesquels les fonctions occupent une place prépondérante. Par exemple, dans le langage de programmation fonctionnel Haskell, il n'y a même pas de boucle for ou quelque chose de similaire. Au lieu de cela, il est proposé d'appeler une fonction de manière spéciale, récursive, pour calculer la valeur souhaitée. Il est possible de prouver qu'avec seulement des fonctions et aucune affectation, il est possible d'écrire un langage de programmation complet de Turing. Il s'agit d'un langage qui permettrait d'écrire tout ce qui est possible dans tout autre langage turing-complet, tel qu'un langage procédural ou OOP.

MQL n'est pas un langage fonctionnel, mais plutôt un langage procédural, extensible par des classes, avec un typage strict et une riche API orientée sujet (sous la forme des mêmes fonctions, oh surprise). D'un autre côté, la théorie des fonctions repose sur une base mathématique solide et offre des modèles simples et efficaces d'utilisation de n'importe quel langage de programmation où il y a des fonctions, de sorte qu'il n'est au moins pas prévoyant d'abandonner les fonctions et la base mathématique qui les sous-tend. C'est pourquoi je prête tant d'attention aux fonctions. Peu importe que vous compreniez bien la structure du tableau, peu importe que vous fassiez une erreur avec un certain type de données. Cela peut être rapidement réparé et corrigé. Mais si vous ne comprenez pas les fonctions et comment elles sont liées, vous ne deviendrez même pas un programmeur moyen.

Ainsi, pour apprendre à faire du prog normal, c'est-à-dire linéaire dans le temps pour étendre les fonctionnalités de votre programme, vous devez apprendre ce qui suit :

  • Représentez clairement (si ce n'est pas complètement, mais c'est nécessaire) le modèle d'événement de MetaTrader 4.5.
  • Savoir comment travailler avec les fonctions du système. Résumer leurs résultats dans leurs propres fonctions. Combinez les appels des fonctions du système dans vos propres fonctions.
  • Être capable et aimer écrire ses propres fonctions.
  • Être capable de comprendre les chaînes d'appels de fonctions : par exemple, lorsque la fonction a() appelle la fonction b(), et b() appelle c() et e() appelle la fonction c().
  • Savoir comment écrire des fonctions propres et comprendre pourquoi vous devez écrire des fonctions propres. J'expliquerai plus tard ce qu'est une fonction pure.

Les fonctions semblent simples. "Qu'y a-t-il à apprendre ? Vous devez juste lire un paragraphe ici, et c'est tout. Et puis les tableaux, for, while..." - Non, ils ne le sont pas. Les fonctions semblent vraiment simples (et c'est bien ainsi). Mais pour qu'elles puissent vraiment résoudre des tâches efficacement, les fonctions doivent avoir certaines propriétés et être combinées entre elles d'une certaine manière. Comment faire tout cela, je l'écrirai probablement plus tard.

 
MrBrooklin:

Je vois. Maintenant, j'aimerais connaître l'opinion de Vasily sur ma proposition de livre.

J'étudie actuellement son article "Universal Trading Expert Advisor : Working with Custom Trailing Stops (Part 6)".

Sincèrement, Vladimir.

Non. Il n'y aura pas de livre. Peut-être quelques articles. Mais pas dans un avenir proche, c'est sûr.

 
MrBrooklin:

Peter, je peux vous suggérer, à vous et Vasily, de faire un bon travail ensemble et d'écrire un tel livre sur MQL5.

Je ne pense pas. Mes vues avec Peter et moi sont trop différentes. Vous pouvez jeter un coup d'œil à certains de nos codes pour voir à quel point ils sont différents).