Discussion de l'article "Extension de la bibliothèque standard MQL5 et réutilisation du code"

 

Un nouvel article Extension de la bibliothèque standard MQL5 et réutilisation du code a été publié :

La bibliothèque standard MQL5 vous facilite la vie en tant que développeur. Néanmoins, il ne met pas en œuvre tous les besoins de tous les développeurs du monde, donc si vous sentez que vous avez besoin de plus de choses personnalisées, vous pouvez aller plus loin et étendre. Cet article vous guide tout au long de l’intégration de l’indicateur technique Zig-Zag de MetaQuotes dans la bibliothèque standard. Nous nous inspirons de la philosophie de conception de MetaQuotes pour atteindre notre objectif.

La bibliothèque standard MQL5 est un framework orienté objet composé d’un ensemble de classes prêtes à l’emploi qui vous facilite la vie en tant que développeur. Néanmoins, il ne met pas en œuvre tous les besoins de tous les développeurs du monde entier, donc si vous sentez que vous avez besoin de plus de choses personnalisées, vous pouvez aller plus loin et vous développer. Cet article vous explique l’intégration de l’indicateur technique Zig-Zag de MetaQuotes dans la bibliothèque standard. Nous nous inspirerons de la philosophie de conception de MetaQuotes afin d’atteindre notre objectif.

En un mot, l'API MQL5 est destinée à vous faire bénéficier de la réutilisation du code, de la fiabilité, de la flexibilité et de la facilité de maintenance. C’est ce que dit la théorie, mais au-delà de tout cela, si vous avez l'intention de continuer à progresser dans MQL5 et de développer des choses plus sophistiquées, telles que des Experts Advisors multi-devises, vous devez d'abord être capable de coder à la manière de la bibliothèque standard afin que vos applications soient garanties d'une vie réussie.

Plus vos EA et indicateurs deviennent complexes, plus il est nécessaire de maîtriser les concepts impliqués dans le développement d'un cadre. A titre d'exemple concret, c'est mon besoin personnel de développer un EA complexe multi-devises qui me dicte la nécessité de renforcer la base de mon projet à partir de zéro.

Figure 1. Les polyèdres réguliers sont des objets parfaits. Ils  illustrent bien l’approche consistant à créer des applications sur des concepts solides.

Figure 1. Les polyèdres réguliers sont des objets parfaits. Ils décrivent bien l’approche de la création d’applications sur des concepts solides

Auteur : Jordi Bassaganas

[Supprimé]  

Je vous remercie. Très instructif.

 

J'essaie de comprendre la signification de ce code dans cet article, pourquoi nous avons un * près du CINDICATOBUFFER et utilisons ensuite at.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG") ;
((CIndicatorBuffer*)At(1)).Name("HIGH") ;
((CIndicatorBuffer*)At(2)).Name("LOW") ;

J'apprécierais une explication détaillée

merci

 
rodlivar:<br/ translate="no">

J'essaie de comprendre la signification de ce code dans cet article pourquoi nous avons un * près du CINDICATOBUFFER et utilisons ensuite at.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG") ;
((CIndicatorBuffer*)At(1)).Name("HIGH") ;
((CIndicatorBuffer*)At(2)).Name("LOW") ;

J'apprécierais une explication détaillée

merci

* indique un pointeur. Explication détaillée dans cet article Utiliser les pointeurs d'objets dans MQL5
 

chaîne de caractères

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep) ;

Je ne trouve pas le chemin d'accès à l'indicateur.

Quelle est la manière correcte de spécifier le chemin ici, les indicateurs que j'essaie d'appeler se trouvent dans le dossier standard.

 
Tango_X:

chaîne de caractères

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep) ;

Je ne trouve pas le chemin vers l'indicateur.

Les indicateurs que j'essaie d'appeler se trouvent dans le dossier standard.

Le Zigzag standard se trouve dans le dossier Examples - vous devez ajouter le nom du dossier au chemin d'accès.


 
Rashid Umarov:

Le Zigzag standard se trouve dans le dossier Examples - vous devez ajouter le nom du dossier dans le chemin d'accès.



2017.07.12 10:38:05.703 Proba2(EURUSD.m,M1) cannot load custom indicator 'Examples\ZigZag' [4302]

Qu'est ce qui ne va pas ? tout est comme dans votre image.
 
Tango_X:

2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) cannot load custom indicator 'Examples\ZigZag'[4302]

Qu'est ce qui ne va pas ? tout est comme dans votre image.

Qui va regarder le code d'erreur?

ERR_MARKET_NOT_SELECTED

4302

Symbole non sélectionné dans MarketWatch

 
Rashid Umarov:

Qui va regarder le code d'erreur?

ERR_MARKET_NOT_SELECTED

4302

Symbole non sélectionné dans MarketWatch


Je mets NULL - ça marche, je mets "EURUSD" - ça ne marche pas !!!!

bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- vérifier l'historique
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- créer
   //m_handle=iCustom(symbol,period, "Examples\\ZigZag",depth,deviation_create,backstep) ;
     //m_handle=iCustom("EURUSD",period, "Examples\\NZigZag",depth,deviation_create,backstep) ; - ne fonctionne PAS
     m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep);       - работает
//--- vérifier le résultat
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- l'indicateur a été créé avec succès
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- erreur d'initialisation
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
 
Je l'ai fait ! J'ai un nom de symbole avec un préfixe - "EURUSD.m".
 
//+------------------------------------------------------------------+
//|| Créer l'indicateur "Zig Zag".|
//+------------------------------------------------------------------+
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- vérifier l'historique
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- créer
   m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
//--- vérifier le résultat
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- l'indicateur a été créé avec succès
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- erreur d'initialisation
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
                        const int depth,const int deviation_init,const int backstep)
  {
   if(CreateBuffers(symbol,period,3))
     {
      //--- ligne d'état de rendu
      m_name  ="ZigZag";
      m_status="("+symbol+","+PeriodDescription()+","+
               IntegerToString(depth)+","+IntegerToString(deviation_init)+","+
               IntegerToString(backstep)+") H="+IntegerToString(m_handle);
      //--- enregistrer les paramètres
      m_depth=depth;
      m_deviation=deviation_init;
      m_backstep=backstep;       
      //--- créer des tampons
      ((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
      ((CIndicatorBuffer*)At(1)).Name("HIGH");
      ((CIndicatorBuffer*)At(2)).Name("LOW");
      //--- ok
      return(true);
     }
//--- erreur
   return(false);
  }


Aidez-moi à comprendre comment la direction d'indexation du tableau de tampons d'indicateurs est définie ici, c'est-à-dire de la même manière que ArraySetAsSeries. La direction par défaut est de présent à passé, mais j'ai besoin de le faire de passé à présent. Depuis hier, je me débats avec cette question ! A l'aide !