Bug de redimensionnement des tableaux dans la version bêta 530 - page 6

 
ubzen:
***P : (Je ne veux pas l'oublier). La plupart d'entre nous n'aiment pas ne pas savoir ce que contiennent les codes que nous utilisons. Ou nous nous consumons à essayer de comprendre les codes de quelqu'un d'autre, sinon nous ne les utiliserions probablement pas. Cependant, la plupart des fonctions natives (par exemple OrderSend()) de mql4 sont des objets de notre point de vue. Nous ne voyons pas leurs codes, mais nous les acceptons. Je pense que cette acceptation des bibliothèques d'autrui est une chose qu'un programmeur professionnel travaillant sur de grands projets doit accepter et sur laquelle il doit s'appuyer. Sinon, on est obligé de recréer la roue.
Oui, quand vous le dites de cette façon, nous réinventons tous la roue tout le temps dans mql4.
 
ubzen:

Je crois que vous décrivez un flux de programme. Je ne pense pas que ce soit la grande idée derrière la POO. (imo) La POO essaie de résoudre les problèmes suivants. Je suis un noob de la POO, mais je suis en train de former ma vision du monde à ce sujet.

1) Vos fonctions sont-elles indépendantes des variables globales ? En d'autres termes, vos fonctions sont-elles des objets autonomes ? Encapsulation

2) Votre fonction cache-t-elle les détails comme les noms des variables locales ? Est-ce qu'elle simplifie le volume de codes à l'écran ? Abstraction

3) A-t-elle la capacité de créer des copies d'elle-même pour des modifications ? Comme la possibilité de créer ses propres types de données ? Héritage.

4) A-t-il la capacité de changer à la volée ? Exemple : la fonction peut-elle gérer aussi bien les tableaux d'entiers que les tableaux de doubles ? Polymorphisme.

La manière dont la POO peut aider à construire une ea est similaire à la manière dont un ea_builder aide un non_programmeur à construire un expert_conseil. Il suffit de prendre votre fonction préférée Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. Et boum, vous avez un Expert_Advisor. Toutes les fonctions de définition des critères de négociation que vous avez développées au fil des ans peuvent être facilement remplacées.

Moi, par exemple, si vous voulez modifier mon conseiller expert, vous devrez étudier où mes variables globales sont appliquées et quelle autre fonction en dépend (comme dans vos tableaux d'état ou de statut). La POO rend les choses aussi simples que Accounting(Option_3) ; Display(Option_1) ; Caption(Option_5) ; TradingSys(Option_7) ; VolumeSize(Option2) ; OrderType(Option_2) et c'est tout l'expert.

Cela permet à quelqu'un d'autre d'utiliser plus facilement votre ensemble de bibliothèques, et généralement, ce qui fonctionne pour quelqu'un d'autre fonctionne aussi pour vous à l'avenir. Au moins, pensez à des objets autonomes sur une chaîne de montage :)

Merci d'avoir décrit cela de façon si concise ubzen, j'ai déjà fait des recherches à ce sujet et ils se lancent généralement dans un roman tellement long que je n'ai jamais vraiment compris.
 
SDC: Merci d'avoir décrit cela de manière si concise ubzen, j'ai déjà fait des recherches à ce sujet et ils se lancent généralement dans un roman si long que je n'ai jamais vraiment compris.
Je t'en prie.
 
RaptorUK: Il y a une différence... Je n'ai pas d'autre choix que d'utiliser OrderSend() si je veux passer un ordre... J'ai le choix d'utiliser ou non la bibliothèque de quelqu'un d'autre... Même lorsque la source est respectée, j'essaie toujours de la comprendre avant d'essayer de l'utiliser, c'est ainsi que certaines erreurs sont trouvées et corrigées : https://www.mql5.com/en/forum/133792/page3 "Et ma correction pour le commentaire deRaptorUK :"
Aucun argument ici. La POO ne résout pas le problème des bogues dans les codes et ne vous oblige pas à utiliser la bibliothèque de quelqu'un d'autre.
 
RaptorUK:
J'ai bricolé un peu avec MQL5 et je n'ai pas eu besoin d'utiliser la POO dans le code que j'ai écrit.

Les classes et la POO sont en grande partie un ajout facultatif dans MQL5. Le cadre de la plate-forme ne les utilise pas lui-même. Par exemple, vous pourriez vous attendre à ce que la plate-forme dispose de quelque chose comme une collection Orders contenant une liste d'objets Order, ce qui vous permettrait d'écrire un code comme celui qui suit :

for (int i = 0; i < Orders.length; i++) {
  Order O = Orders.getByIndex(i);
  if (O.symbol == "EURUSD" && O.magicNumber = 12345) {
  }
}

Mais ce n'est pas le cas. Au lieu de cela, la façon de procéder est fondamentalement identique entre MQL4 et MQL5 :

for (int i = 0; i < OrdersTotal(); i++) {
  if (OrderGetTicket(i)) {
    if (OrderGetString(ORDER_SYMBOL) == "EURUSD" && OrderGetInteger(ORDER_MAGIC) == 12345) {
    }
  }
}

(Vous pourriez aussi vous attendre à ce que l'EA que vous écrivez soit une classe dérivée d'une classe ExpertAdvisor qui a des choses comme les fonctions virtuelles OnTick et OnInit dans sa déclaration. Mais ce n'est pas le cas non plus. Le cadre MQL5 reste fondamentalement non POO, mais avec la possibilité pour vous d'utiliser vous-même la POO pour toutes les tâches où elle est utile).

Par conséquent, vous pouvez continuer à utiliser le code MQL4 sur MQL5 via une série de fonctions d'aide telles que string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. Le seul domaine où cela ne fonctionne pas est l'accès aux séries temporelles, car il est organisé de manière très différente dans MQL5. Une fonction telle que iOpenMQL4() dans https://www.mql5.com/en/articles/81 fonctionne, mais elle est terriblement lente et inefficace pour un usage répété.

 

(Si cela intéresse encore quelqu'un, le rapport de bogue qui a donné le coup d'envoi de ce fil de discussion s'applique toujours à la version 535. Il en va de même pour https://forum.mql4.com/56885/page20#861740, bien qu'il semble que MetaQuotes ait eu une tentative ratée de corriger ce problème).

 
Désolé pour la réponse tardive, mais parfois je dois dormir et travailler

.

Je suis d'accord avec RaptorUK, la documentation sur mql5.com concernant la POO est au moins imparfaite. Mais malheureusement je ne connais pas de bonne référence sur la POO. Tout ce que j'ai lu est soit trop abstrait soit trop basique, prenant la poire et la pomme comme exemple d'objets et le fruit comme classe.

La programmation OOP n'est utile que si vous avez un grand projet. Un grand projet n'est pas nécessairement 1 EA, votre projet peut être de construire une série d'EA avec des indicateurs, etc... Alors il est bon de réutiliser le code, et l'OOP est principalement sur la réutilisation du code, il vous aide à construire une structure qui peut facilement être réutilisé dans d'autres programmes. Malheureusement, je n'ai pas le temps maintenant d'aller en profondeur avec cela. Mais il est dans mon plan d'écrire quelques articles à ce sujet.

Un exemple d'un grand projet est le MQL5 Wizard créé par Metaquotes. Il vous permet de créer un EA en 5 minutes avec quelques entrées utilisateur. Il est basé sur la librairie standard mql5 qui fournit tous les éléments nécessaires à la construction d'un EA. Le même assistant peut probablement être réalisé de manière procédurale, mais ce serait beaucoup plus difficile à mon avis. Et puis vous devez maintenir ce code. Mais cette librairie standard est difficile à comprendre car elle n'est pas bien documentée et décrite. J'ai créé un sujet pour centraliser tout ce qui existe sur le sujet (mql5 wizard not oop).

 
ubzen:

Je crois que vous décrivez un flux de programme. Je ne pense pas que ce soit la grande idée derrière la POO. (imo) La POO essaie de résoudre les problèmes suivants. Je suis un noob de la POO, mais je suis en train de former ma vision du monde à ce sujet.

1) Vos fonctions sont-elles indépendantes des variables globales ? En d'autres termes, vos fonctions sont-elles des objets autonomes ? Encapsulation

2) Votre fonction cache-t-elle les détails comme les noms des variables locales ? Est-ce qu'elle simplifie le volume de codes à l'écran ? Abstraction

3) A-t-elle la capacité de créer des copies d'elle-même pour des modifications ? Comme la possibilité de créer ses propres types de données ? Héritage.

4) A-t-il la capacité de changer à la volée ? Exemple : la fonction peut-elle gérer aussi bien les tableaux d'entiers que les tableaux de doubles ? Polymorphisme.

La manière dont la POO peut aider à construire une ea est similaire à la manière dont un ea_builder aide un non_programmeur à construire un expert_conseil. Il suffit de prendre votre fonction préférée Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. Et boum, vous avez un Expert_Advisor. Toutes les fonctions de définition des critères de négociation que vous avez développées au fil des ans peuvent être facilement remplacées.

Moi, par exemple, si vous voulez modifier mon conseiller expert, vous devrez étudier où mes variables globales sont appliquées et quelle autre fonction en dépend (comme dans vos tableaux d'état ou de statut). La POO rend les choses aussi simples que Accounting(Option_3) ; Display(Option_1) ; Caption(Option_5) ; TradingSys(Option_7) ; VolumeSize(Option2) ; OrderType(Option_2) et c'est tout l'expert.

Cela permet à quelqu'un d'autre d'utiliser plus facilement votre ensemble de bibliothèques, et généralement, ce qui fonctionne pour quelqu'un d'autre fonctionne aussi pour vous à l'avenir. Au moins, pensez à des objets autonomes sur une chaîne de montage :)

C'est un bon aperçu, sauf pour le polymorphisme. Quand vous dites "La fonction peut-elle gérer integer_array aussi bien que double_arrays", il ne s'agit pas de polymorphisme, mais de surcharge de fonctions. Vous pouvez également avoir une surcharge d'opérateurs dans mql5 (mal traduite en surcharge d'opérations). La POO et le polymorphisme sont plus que cela. Je n'ai pas le temps d'élaborer (surtout en anglais), donc je vous suggère de lire l'introduction au polymorphisme de mql5.
 
cyclops993:

Les classes et la POO sont en grande partie un ajout optionnel dans MQL5. Le cadre de la plate-forme ne les utilise pas lui-même. Par exemple, vous pourriez vous attendre à ce que la plate-forme dispose de quelque chose comme une collection Orders qui contiendrait une liste d'objets Order, vous permettant d'écrire un code comme le suivant :

Mais ce n'est pas le cas. Au lieu de cela, la façon de procéder est fondamentalement identique entre MQL4 et MQL5 :

(Vous pourriez aussi vous attendre à ce que l'EA que vous écrivez soit une classe dérivée d'une classe ExpertAdvisor qui a des choses comme les fonctions virtuelles OnTick et OnInit dans sa déclaration. Mais ce n'est pas le cas non plus. Le cadre MQL5 reste fondamentalement non POO, mais avec la possibilité pour vous d'utiliser vous-même la POO pour toutes les tâches où elle est utile).

Par conséquent, vous pouvez continuer à utiliser le code MQL4 sur MQL5 via une série de fonctions d'aide telles que string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. Le seul domaine où cela ne fonctionne pas est l'accès aux séries temporelles, car il est organisé de manière très différente dans MQL5. Une fonction telle que iOpenMQL4() dans https://www.mql5.com/en/articles/81 fonctionne, mais elle est terriblement lente et inefficace pour un usage répété.

Je suis d'accord. J'ajouterais que mql5 fournit plus de fonctions de "bas niveau" que mql4. Par exemple, beaucoup de gens se plaignent de l'absence de iBarShift() dans mql5. Mais mql5 fournit des fonctions plus détaillées, de sorte que vous pouvez construire votre propre iBarShift() et fournit également oop afin que vous puissiez le réutiliser facilement dans n'importe quel projet (bien sûr, oop n'est pas obligatoire pour le réutiliser). Je ne suis pas sûr que mon explication soit claire, car mon anglais est encore quelque peu rudimentaire.
 
Ovo:

La POO est assez courante actuellement et elle attirera plus de vrais codeurs vers le MQL. Mais l'éditeur de type bloc-notes repoussera la plupart d'entre eux, j'en suis sûr.

Avez-vous essayé le méta-éditeur mql5 (ou le nouvel éditeur mql4 qui est le même) ? Il y a beaucoup d'améliorations.