échec de l'initialisation globale !!!!!!! - page 6

 
SDC:

Vous utilisez int OnCalculate() à la place de int start(). Il s'exécute à chaque tick comme start(). Un avant et un après ressembleraient à ceci,

Les paramètres formels de OnCalculate le rendent plus autonome, le codeur n'a pas besoin d'appeler toutes sortes de globales, ce qui apparemment dans les cercles oop est un mauvais codeur, une tape sur les doigts. En pratique, il n'y a pas vraiment de différence entre les deux. De plus, OnCalculate est le même que mql5, vous avez donc la possibilité d'écrire un code compatible.


Merci, SDC. Je pense que je vois où tu veux en venir. Je ne suis pas sûr d'aimer la direction que prend MetaQuotes avec cela. Ils font la même chose que Microsoft. Cela peut faciliter le codage, mais cela réduit sérieusement le besoin du programmeur de comprendre ce qui se passe réellement "sous le capot", pour ainsi dire. C'est un énorme problème, à mon avis, car cela réduit les compétences et la compréhension des programmeurs. Si vous voulez être un maître de ce que vous faites, vous devez le comprendre du niveau le plus basique aux concepts les plus élevés. J'ai commencé à programmer en 1978. Nous écrivions en code binaire et octal. La plupart des gens n'en auraient pas la moindre idée aujourd'hui. Microsoft a poussé les langages de programmation à un niveau qui empêche complètement le programmeur de savoir ce qui se passe réellement sous le capot depuis de nombreuses années et ce n'est pas dans notre intérêt. Leur intention est de faire en sorte que seuls leurs programmeurs sachent ce qui se passe réellement à bas niveau et que tous les autres doivent s'en remettre à eux.

Un exemple de ce dont je parle est l'évolution de C++ à C#. Ostensiblement, C# est censé faciliter la vie du programmeur en faisant la "plomberie" de bas niveau pour lui, le libérant ainsi de la nécessité de savoir comment le faire lui-même et accélérant également le temps de développement dans le processus. Bien sûr, cela a été le cas, mais à quel prix ? Nous, les "anciens", comprenons parfaitement l'accès direct à la mémoire et comment l'utiliser. Nous savons ce qui se passe "sous le capot". J'ai souvent eu besoin d'allouer spécifiquement une certaine quantité de mémoire ou de manipuler la mémoire octet par octet ou même bit par bit. Est-ce que quelqu'un qui ne connaît que le "nuage" de haut niveau du C# en a la moindre idée ? Pas du tout. Appelez Microsoft.

Je sais que je suis parti dans une diatribe ici, mais je pense que MetaQuotes va dans la même direction et ce n'est pas une bonne chose. Ce n'est certainement pas une bonne chose lorsqu'il s'agit d'écrire des applications qui doivent traiter des données en temps réel. Dans notre domaine, une erreur peut coûter beaucoup d'argent à quelqu'un. Je peux vivre avec ça si je me plante sur une application que je destine uniquement à mon usage personnel. Si je me plante sur une application que je vends, ce n'est pas acceptable.

BTW, je ne pense pas que les globaux utilisés dans la POO et les globaux utilisés dans MQL soient le même concept. MQL est encore un enfant en termes de véritable langage orienté objet. En fait, "global" ne signifie rien en POO. C'est ce qu'on appelle une variable "statique" et elle est disponible pour tous les objets créés à partir de la même classe ainsi que pour toutes les classes dans une hiérarchie dérivée. Elle est désapprouvée pour des raisons d'encapsulation des données et constitue un cauchemar de maintenance, en particulier lorsqu'elle est utilisée dans une classe de très haut niveau dont tout dépend dans une application.

 

En fait, si vous voulez obtenir les chiffres du compte, il vous suffit d'utiliser AccountBalance().

Donc, si vous voulez vraiment savoir comment le solde est calculé, vous n'en avez aucune idée. Seuls les développeurs le savent.

 
ProfessorMetal:


Merci, SDC. Je pense que je vois où vous voulez en venir. Je ne suis pas sûr d'aimer la direction que prend MetaQuotes dans ce domaine. Ils font la même chose que Microsoft. Cela peut faciliter le codage, mais cela réduit sérieusement le besoin du programmeur de comprendre ce qui se passe réellement "sous le capot", pour ainsi dire. C'est un énorme problème, à mon avis, car cela réduit les compétences et la compréhension des programmeurs. Si vous voulez être un maître de ce que vous faites, vous devez le comprendre du niveau le plus basique aux concepts les plus élevés. J'ai commencé à programmer en 1978. Nous écrivions en code binaire et octal. La plupart des gens n'en auraient pas la moindre idée aujourd'hui. Microsoft a poussé les langages de programmation à un niveau qui empêche complètement le programmeur de savoir ce qui se passe réellement sous le capot depuis de nombreuses années et ce n'est pas dans notre intérêt. Leur intention est de faire en sorte que seuls leurs programmeurs sachent ce qui se passe réellement à bas niveau et que tous les autres doivent s'en remettre à eux.

Un exemple de ce dont je parle est l'évolution de C++ à C#. Ostensiblement, C# est censé faciliter la vie du programmeur en faisant la "plomberie" de bas niveau pour lui, le libérant ainsi de la nécessité de savoir comment le faire lui-même et accélérant également le temps de développement dans le processus. Bien sûr, cela a été le cas, mais à quel prix ? Nous, les "anciens", comprenons parfaitement l'accès direct à la mémoire et comment l'utiliser. Nous savons ce qui se passe "sous le capot". J'ai souvent eu besoin d'allouer spécifiquement une certaine quantité de mémoire ou de manipuler la mémoire octet par octet ou même bit par bit. Est-ce que quelqu'un qui ne connaît que le "nuage" de haut niveau du C# en a la moindre idée ? Pas du tout. Appelez Microsoft.

Je sais que je suis parti dans une diatribe ici, mais je pense que MetaQuotes va dans la même direction et ce n'est pas une bonne chose. Ce n'est certainement pas une bonne chose lorsqu'il s'agit d'écrire des applications qui doivent traiter des données en temps réel. Dans notre domaine, une erreur peut coûter beaucoup d'argent à quelqu'un. Je peux vivre avec ça si je me plante sur une application que je destine uniquement à mon usage personnel. Si je me plante sur une application que je vends, ce n'est pas acceptable.

BTW, je ne pense pas que les globaux utilisés dans la POO et les globaux utilisés dans MQL soient le même concept. MQL est encore un enfant en termes de véritable langage orienté objet. En fait, "global" ne signifie rien en POO. C'est ce qu'on appelle une variable "statique" et elle est disponible pour tous les objets créés à partir de la même classe ainsi que pour toutes les classes dans une hiérarchie dérivée. Elle est désapprouvée pour des raisons d'encapsulation des données et constitue un cauchemar de maintenance, en particulier lorsqu'elle est utilisée dans une classe de très haut niveau dont tout dépend dans une application.

Eh bien, je pense que la direction de MQ est vers la réalisation de la compatibilité mql4 - mql5, vous verrez que nous sommes déjà à la dérive dans le territoire mql5 avec OnTick, OnTimer, OnCalculate, et un ensemble de fonctions mql5 qui sont maintenant disponibles pour nous d'utiliser. Vous constaterez que cela ne rend pas les choses plus faciles pour autant. L'ancienne version de mql4 nous permettait d'écrire du code très peu soigné et de nous en tirer à bon compte, la nouvelle version nous demande d'être plus précis.
 

C'est pourquoi le générateur ea ne peut plus être utilisé. À moins que le code ne soit mis à jour, vous devez vraiment coder l'indi/ea vous-même.

En pratique, la discipline est la clé pour faire de la programmation. C'est difficile, mais vous devenez plus puissant dans le codage.

 
SDC:
Vous verrez que nous sommes déjà en train de dériver vers le territoire mql5 avec OnTick, OnTimer, OnCalculate, et un ensemble de fonctions mql5 qui sont maintenant disponibles pour que nous les utilisions. Vous constaterez que cela ne rend pas les choses plus faciles pour autant. L'ancienne version de mql4 nous permettait d'écrire du code très peu soigné et de nous en tirer à bon compte, la nouvelle version nous demande d'être plus précis.


Je vois ce dont vous parlez. Je regardais une partie de la documentation et j'ai réalisé que j'avais mal compris l'utilisation des nouvelles méthodes. OnStart() est pour le démarrage des scripts, OnCalculate() remplace l'ancien start() pour les indicateurs et est censé remplacer une grande partie des barres comptées que tout le monde utilisait dans l'ancienne incarnation de MQL ainsi que de lancer l'exécution du code de l'indicateur quand un nouveau tick est reçu (à condition qu'il ne soit pas en cours d'exécution) et, enfin, OnTick() remplace start() pour les EAs. Avec beaucoup d'autres changements, vous avez raison - cela ne nous facilite pas la vie parce que nous devons "réapprendre" et pour ceux qui sont dans ce domaine depuis un certain temps et qui ont un certain nombre d'applications assemblées, cela va entraîner beaucoup de réingénierie pour les faire fonctionner. Pour ma part, je commençais tout juste à me familiariser avec le MQL et j'ai eu droit à une bonne leçon. La plupart de ce que j'avais appris, je dois maintenant le "désapprendre", pour ainsi dire.

Quant au fait que les choses soient plus strictes, c'est une bonne chose, à mon avis. Il est peut-être difficile de s'y habituer, mais cela réduira le risque d'erreurs qui pourraient s'avérer coûteuses pour nos utilisateurs et pour nous-mêmes. Du point de vue de quelqu'un qui a passé des années dans le monde de l'entreprise à travailler sur des applications dans lesquelles des erreurs de notre part pouvaient coûter à nos utilisateurs d'énormes sommes d'argent (et à nous nos emplois), je suis un champion de la précision. Ce que je voulais dire, cependant, c'est qu'en faisant des choses comme l'introduction de OnCalculate() qui fait la moitié du travail pour vous, cela réduit votre compréhension de ce qui se passe sous le capot. Je parle d'expérience quand je parle du passage de C++ à C#. Vous êtes passé de "comment ça marche" à "j'appuie sur ce bouton et ça arrive". Je suis peut-être de la vieille école, mais je ne pense pas que l'abrutissement soit une bonne chose. Cette réingénierie a des points positifs et négatifs.

 
deysmacro:

C'est pourquoi le générateur ea ne peut plus être utilisé. À moins que le code ne soit mis à jour, vous devez vraiment coder l'indi/ea vous-même.

En pratique, la discipline est la clé pour faire de la programmation. C'est difficile, mais vous devenez plus puissant dans le codage.


Pas d'argument là-dessus, mon ami. Pour dire la vérité, je pense que les générateurs d'EA n'auraient jamais dû être utilisés. Vous n'avez aucune idée de ce que fait réellement une "boîte noire". Quant à votre deuxième affirmation, je suis d'accord avec vous sur toute la ligne.
 
ProfessorMetal:

Vous êtes passé de "comment ça marche" à "j'appuie sur ce bouton et ça arrive". Je suis peut-être de la vieille école, mais je ne pense pas que l'abrutissement soit une bonne chose. Cette réingénierie a des points positifs et négatifs.

Voyez les choses ainsi : il serait pratiquement impossible pour une seule personne ou même pour une société organisée de programmer quelque chose comme MT4 entièrement en code binaire à partir de zéro. Sans parler des jeux informatiques modernes qui existent. Il y aura un moment où aucune personne vivante n'aura la moindre idée du binaire, de l'octal, de l'hexadécimal ou même du Basic. D'abord, vous construisez des éléments, puis avec le temps, vous obtenez des blocs, puis peut-être des histoires entières, des livres entiers. Vous réassemblez les intrigues et vous obtenez quelque chose d'apparemment nouveau, bien qu'il s'agisse toujours de la même chose. Le monde change, on ne peut pas rester bloqué sur le même vieux scénario ! On doit réapprendre tout le temps, lire le manuel, d'abord. Puis encore, et encore, et encore. Sinon, on prend du retard et on devient un dinosaure.

 
Dadas:

Voyez les choses ainsi : il serait pratiquement impossible pour une seule personne ou même pour une société organisée de programmer quelque chose comme MT4 entièrement en code binaire à partir de zéro. Sans parler des jeux informatiques modernes qui existent. Il y aura un moment où aucune personne vivante n'aura le moindre indice sur le binaire, l'octal, l'hexadécimal ou même le Basic. D'abord, vous construisez des éléments, puis avec le temps, vous obtenez des blocs, puis peut-être des histoires entières, des livres entiers. Vous réassemblez les intrigues et vous obtenez quelque chose d'apparemment nouveau, bien que ce soit toujours la même chose. Le monde change, on ne peut pas rester bloqué sur le même vieux scénario ! On doit réapprendre tout le temps, lire le manuel, d'abord. Puis encore, et encore, et encore. Sinon, on prend du retard et on devient un dinosaure.


Je vois ce que tu veux dire, Dadas. Et je suis d'accord avec toi jusqu'à un certain point. Cependant, quelqu'un devra TOUJOURS connaître le sujet de fond en comble, sinon le château de cartes s'écroulera. Laissez-moi vous donner une illustration de ce que je veux dire. J'ai passé mon temps en tant qu'éducateur professionnel. J'ai le grade de professeur adjoint de mathématiques et de physique. J'ai enseigné dans un collège communautaire et notre département de physique "permanent" se composait de moi-même et du chef du département.

À l'époque, le département de mathématiques s'orientait vers l'enseignement des statistiques, du calcul, de l'algèbre linéaire, etc. à l'aide de programmes informatiques ou de calculatrices. Ils ne leur enseignaient rien sur les sujets réels. Tout ce qu'on leur apprenait, c'était comment utiliser les programmes. Ce n'est pas apprendre les mathématiques. C'est appuyer sur le bouton "Start", entrer quelques chiffres et appuyer sur le bouton "Go". J'ai vu des élèves venir se plaindre amèrement parce qu'ils avaient suivi toutes les "instructions" et qu'ils s'étaient quand même trompés dans le problème. La première question que je leur posais était : "La réponse donnée par la calculatrice vous semblait-elle raisonnable ?" La réponse ? "Eh bien, euh, je ne sais pas." Pourquoi ne savaient-ils pas ? Parce qu'ils ne connaissaient rien aux maths. Tout ce qu'ils savaient, c'était qu'il suffisait d'appuyer sur ces boutons dans cet ordre pour que la calculatrice donne la réponse comme par magie. FAUX !

Maintenant, revenons à mon point de départ. Mon partenaire était tout à fait en faveur de cela. Son raisonnement : "Un jour, c'est comme ça que tout se fera. Personne n'aura besoin de savoir comment faire les maths et la physique comme nous le faisons. Je lui ai répondu : "Oui, c'est vrai. Et comment, exactement, vont-ils savoir que les "réponses qu'ils obtiennent sont complètement irréalistes" ? D'ailleurs, qui diable va écrire et maintenir tout ce matériel alors que les gens en sont arrivés au point où ils ne peuvent même pas faire des maths de base parce qu'ils ont été formés à laisser la machine le faire pour eux ?" Vous voyez où je veux en venir ? QUELQU'UN va devoir savoir "comment ça marche" ou, comme le disait Jim Morrison, "toute la maison de merde va partir en fumée". Et c'est là, mon ami, que les dinosaures comme moi entrent en scène. Je peux descendre en donnant des coups et en criant mais je descendrai en enseignant jusqu'à la fin. Quand la maison de merde partira en flammes, ce ne sera pas parce que j'ai choisi la voie de la paresse. :-)

 
ProfessorMetal:


Je vois ce que tu veux dire, Dadas. Et je suis d'accord avec toi jusqu'à un certain point. Cependant, il faudra TOUJOURS que quelqu'un connaisse le sujet de fond en comble, sinon tout le château de cartes s'écroulera. Laissez-moi vous donner une illustration de ce que je veux dire. J'ai passé mon temps en tant qu'éducateur professionnel. J'ai le grade de professeur adjoint de mathématiques et de physique. J'ai enseigné dans un collège communautaire et notre département de physique "permanent" se composait de moi-même et du chef du département.

À l'époque, le département de mathématiques s'orientait vers l'enseignement des statistiques, du calcul, de l'algèbre linéaire, etc. à l'aide de programmes informatiques ou de calculatrices. Ils ne leur enseignaient rien sur les sujets réels. Tout ce qu'on leur apprenait, c'était comment utiliser les programmes. Ce n'est pas apprendre les mathématiques. C'est appuyer sur le bouton "Start", entrer quelques chiffres et appuyer sur le bouton "Go". J'ai vu des élèves venir se plaindre amèrement parce qu'ils avaient suivi toutes les "instructions" et qu'ils s'étaient quand même trompés dans le problème. La première question que je leur posais était : "La réponse donnée par la calculatrice vous semblait-elle raisonnable ?" La réponse ? "Eh bien, euh, je ne sais pas." Pourquoi ne savaient-ils pas ? Parce qu'ils ne connaissaient rien aux maths. Tout ce qu'ils savaient, c'était qu'il suffisait d'appuyer sur ces boutons dans cet ordre pour que la calculatrice donne la réponse par magie. FAUX !

Maintenant, revenons à mon point de départ. Mon partenaire était tout à fait en faveur de cela. Son raisonnement : "Un jour, c'est comme ça que tout se fera. Personne n'aura besoin de savoir comment faire les maths et la physique comme nous le faisons. Je lui ai répondu : "Oui, c'est vrai. Et comment, exactement, vont-ils savoir que les "réponses qu'ils obtiennent sont complètement irréalistes" ? D'ailleurs, qui diable va écrire et maintenir tout ce matériel alors que les gens en sont arrivés au point où ils ne peuvent même pas faire des maths de base parce qu'ils ont été formés à laisser la machine le faire pour eux ?" Vous voyez où je veux en venir ? QUELQU'UN va devoir savoir "comment ça marche" ou, comme le disait Jim Morrison, "toute la maison de merde va partir en fumée". Et c'est là, mon ami, que les dinosaures comme moi entrent en scène. Je peux descendre en donnant des coups et en criant mais je descendrai en enseignant jusqu'à la fin. Quand la maison de merde partira en flammes, ce ne sera pas parce que j'ai pris la voie de la paresse. :-)


Eh bien, alors tu vas finir comme Don Kichote.

Et, oui, nous ne vivrons pas pour le voir, mais il en sera ainsi, tôt ou tard. Après tout, personne ne sait comment et pourquoi l'Univers fonctionne, mais il fonctionne. Savez-vous si vous obtenez les bonnes réponses de l'Univers lui-même ? Comment pouvez-vous le savoir ? Je comprends la façon de penser des mathématiciens. Ils veulent des formules pour tout contrôler et ils veulent savoir/comprendre d'où viennent les formules, c/z ils veulent avoir le contrôle. 2+2=4, mais pourquoi ? Est-ce vraiment la bonne réponse ? La vérité, c'est qu'on ne peut jamais tout contrôler.

Et, une fois que tout est dit et fait, vous obtenez "l'initialisation globale a échoué" et personne ne sait vraiment pourquoi ou comment réparer cela.

 
Dadas:


Eh bien, alors vous allez finir comme Don Kichote.

Et, oui, nous ne vivrons pas pour le voir, mais il en sera ainsi, tôt ou tard. Après tout, personne ne sait exactement comment et pourquoi l'Univers fonctionne, mais il fonctionne. Savez-vous si vous obtenez les bonnes réponses de l'Univers lui-même ? Comment pouvez-vous le savoir ? Je comprends la façon de penser des mathématiciens. Ils veulent des formules pour tout contrôler et ils veulent savoir/comprendre d'où viennent les formules, c/z ils veulent avoir le contrôle. 2+2=4, mais pourquoi ? Est-ce vraiment la bonne réponse ? La vérité, c'est qu'on ne peut jamais tout contrôler.

Et, après avoir tout dit et fait, vous obtenez "global initialization failed" et personne ne sait vraiment pourquoi ou comment réparer cela.


LOL Je pense que tu voulais dire Don Quichotte. Quoi qu'il en soit, le fait est que nous devons vraiment comprendre ce avec quoi nous travaillons, sinon nous nous dirigeons tout droit vers un échec éventuel.
Raison: