Projet du conseiller

 
Bonjour.
Lorsque la quantité de code augmente, elle devient parfois difficile et confuse.
J'ai vu du code d'EA avec un nombre énorme de lignes de code, je me demande comment sont conçus les EA complexes, peut-être existe-t-il des outils ou des techniques pour traiter des algorithmes aussi complexes ?
 
Gregory Kovalenko:
Bonjour.
Lorsque la quantité de code augmente, elle devient parfois difficile et confuse.
J'ai vu du code d'EA avec un nombre énorme de lignes de code, je me demande comment sont conçus les EA complexes, peut-être existe-t-il des outils ou des techniques pour travailler avec des algorithmes aussi complexes ?

Quelle quantité est trop importante ? Est-ce qu'il y a tellement de choses qu'on ne peut pas les décomposer en dossiers ?

 
Gregory Kovalenko:
Bonjour.
Lorsque la quantité de code augmente, elle devient parfois difficile et confuse.
J'ai vu du code d'EA avec un nombre énorme de lignes de code, je me demande comment sont conçus les EA complexes, peut-être existe-t-il des outils ou des astuces pour traiter des algorithmes aussi complexes ?
Oui, c'est très simple : vous devez documenter précisément les différentes fonctions et les attribuer à un fichier séparé. Le fichier principal sera immédiatement réduit et deviendra plus lisible.
 

Deux principes de base :

1. Divisez le code en fonctions. Une fonction doit être plus ou moins logiquement complète et ne pas dépasser un écran à couvrir d'un seul coup d'œil.

2. Réduire le nombre de variables globales. A partir des variables globales, il est souhaitable de n'utiliser que des paramètres qui ne changent pas pendant l'exécution du programme.

...et plus encore :

3. la programmation orientée objet.

4. Placer le code dans plusieurs fichiers (cela complique un peu le débogage, mais cela a un sens).

 
STARIJ:
C'est très simple : nous devons documenter précisément les différentes fonctions et les attribuer dans un fichier séparé. Le fichier principal deviendra immédiatement plus petit et plus lisible.

J'ai toujours un fichier mq4/mq5 et un tas de fichiers mqh avec des classes, pour chaque classe un fichier séparé. En général, c'est ainsi qu'on procède dans le développement industriel. Pas de fichiers de plusieurs kilomètres de long où tout est mélangé.

Parfois, vous pouvez voir un chef-d'œuvre où l'ensemble de l'EA est emballé dans OnTick avec les mêmes morceaux de code pour ouvrir les ordres 20 fois chacun dans cette horrible feuille. Je veux sortir le sac à vomi tout de suite !)

 
Gregory Kovalenko:
Bonjour.
Lorsque la quantité de code augmente, elle devient parfois difficile et confuse.
J'ai vu du code d'EA avec un nombre énorme de lignes de code, je me demande comment sont conçus les EA complexes, peut-être existe-t-il des outils ou des astuces pour traiter des algorithmes aussi complexes ?

N'écrivez pas de fonctions qui sont toujours constantes et ne changent jamais dans ce style.

void CloseOrders(int cmd)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY && cmd==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue))
                 {
                  Print("Order BUY not close! Error = ",GetLastError());
                 }
              }
            if(OrderType()==OP_SELL && cmd==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red))
                 {
                  Print("Order SELL not close! Error = ",GetLastError());
                 }
              }
           }
        }
     }
  }

Rédigez-les de manière concise, personne ne les regarde jamais de toute façon, et ils prennent deux fois moins de place.

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}


Commentez le code tout le temps, ce dont ce morceau de code est responsable, ce n'est pas difficile, et maintenant vous saurez toujours ce qu'est le code, et réduire le temps pour l'étudier.

 
Vitaly Muzichenko:

N'écrivez pas de fonctions qui sont toujours constantes et ne changent jamais dans ce style

Rédigez-les de manière concise, personne ne les regarde jamais de toute façon, et ils prennent deux fois moins de place.

Commentez le code tout le temps, ce dont ce morceau de code est responsable, ce n'est pas difficile, et maintenant vous saurez toujours ce qu'est le code, et réduire le temps pour l'étudier.

Le commentaire doit occuper la moitié du texte du programme.

 
Vitaly Muzichenko:

N'écrivez pas de fonctions qui sont toujours constantes et ne changent jamais dans ce style

Rédigez-les de manière concise, personne ne les regarde jamais de toute façon, et ils prennent deux fois moins de place.

Commenter le code tout le temps, ce dont ce morceau de code est responsable, ce n'est pas difficile, et ici dans la révision saura toujours ce que le code, et de réduire le temps pour l'étudier

Réarranger les parenthèses ne rend pas le décalage moins important. Avant de donner des conseils, élevez au moins votre niveau à un niveau moyen.

 
STARIJ:

Le commentaire doit occuper la moitié du texte du programme.

Dans ce cas, 90% du code devrait contenir des commentaires. Et vous avez besoin d'autant de code vide de sens et peu lisible que possible pour pouvoir mettre plus de commentaires !
 
Vasiliy Sokolov:
Non, eh bien, alors 90% du code est constitué de commentaires. Et vous avez besoin d'autant de code inutile et peu lisible que possible, afin de pouvoir mettre plus de commentaires !

Vos idées sont également dignes d'intérêt. Vous devriez en parler plus souvent

 

Je voulais vous le demander depuis longtemps. Si dans mcl5 vous obtenez les données de l'indicateur à partir des fichiers include, des classes, l'optimisation sera-t-elle plus rapide ?

C'est-à-dire qu'aucun handle d'indicateur n'est appelé dans le code du conseiller expert lui-même.