Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Twitter !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Vues:
88
Note:
(32)
Publié:
\MQL5\Include\XML\
xmlbase.mqh (0.58 KB) afficher
\MQL5\Scripts\
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Bibliothèque pour l'analyse des documents XML. Implémentation en MQL5 sans utiliser de bibliothèques tierces.

Pour connecter la bibliothèque à vos projets, il suffit d'ajouter une commande du préprocesseur

#include <Xml\XmlBase.mqh>

Exemple d'utilisation :

#include <Xml\XmlBase.mqh>

CXmlDocument doc;

void OnStart() 
{
  string file = "File.xml";
  string err;
  if (doc.CreateFromFile(file,err))
  {
    CXmlElement * xmlItem = doc.FDocumentElement.GetChild(0);
    for (int i=0; i<xmlItem.GetChildCount(); i++) 
    if (xmlItem.GetChild(i).GetName() == "LAYER")
    {
      CXmlElement* layer = xmlItem.GetChild(i);
      for (int j=0; j<layer.GetChildCount(); ++j) 
      {        
        if (layer.GetChild(j).GetName() == "NEURON")
        {
           /* .... */
        }
      }
    }
  }
}

Notes :

  • La bibliothèque a été créée à l'époque lointaine où les constructeurs de classes ne pouvaient pas accepter de paramètres ;
  • Seules les fonctionnalités de base du standard Xml sont implémentées ;
  • Commentaires, corrections, ajouts, extensions sont les bienvenus.

Principaux composants :

Classe CXmlDocument - permet de charger des documents à partir d'un fichier ou d'une chaîne et de sauvegarder les modifications apportées au fichier.

Les fonctions CreateX analysent les documents et créent un modèle DOM hiérarchique, auquel on peut accéder via FDocumentElement.

class CXmlDocument 
{
  private:

    void DoElementTrimText(CXmlElement &aXmlItem) ;
  
  public:
    CXmlElement FDocumentElement;

    void CXmlDocument ();
    void ~CXmlDocument ();
    void Clear();
    void CopyTo (CXmlDocument &xmlDoc);
  
    bool  CreateFromText (const string& xml, string& err);
    bool  CreateFromFile (const string filename, string& err);
    bool  SaveToFile (const string filename);

    string GetXml();
};

La classe CXmlElement est l'interface principale de tout document Xml. Elle permet d'accéder aux éléments, à leurs attributs et à leur contenu

class CXmlElement 
{
  private:
    string         FName;
    CXmlAttribute* FAttributes[];
    CXmlElement   *FElements[];
    string         FText;
    CXmlElement*   FParent;
  public:  
    //--- méthodes du constructeur
    void  CXmlElement ();
    void ~CXmlElement ();
    void Init (const string aName, const CXmlElement* aParent=NULL, const string aText="");
    void CopyTo (CXmlElement &aDst);
    virtual void Clear ();
    
    //--- principales méthodes de service
    string GetName () const;
    void SetName (const string aName);
    string GetText () const;
    void SetText (const string aText);
    CXmlElement* GetParent () const;
    void SetParent (CXmlElement* aParent);
    
    //--- méthodes de service d'attributs
    int GetAttributeCount () const;
    int GetAttributeIndex (CXmlAttribute* aAttr) const;
    CXmlAttribute* GetAttribute (const string aName) const;
    CXmlAttribute* GetAttribute (int aPos) const;
    string GetAttributeValue (const string aName) const;
    
    CXmlAttribute* AttributeInsertAt (CXmlAttribute* aAttr, int aPos);
    CXmlAttribute* AttributeAdd (CXmlAttribute* aAttr);
    CXmlAttribute* AttributeInsertAfter (CXmlAttribute* aAfter, CXmlAttribute* aAttr);
    CXmlAttribute* AttributeInsertBefore (CXmlAttribute* aBefore, CXmlAttribute* aAttr);
    CXmlAttribute* AttributeRemove (CXmlAttribute* aAttr);
    CXmlAttribute* AttributeRemove (int aPos);
    void AttributeDelete (CXmlAttribute* aAttr);
    void AttributeDelete (int aPos);
    void AttributeDeleteAll ();
  
    //--- méthodes de service pour les enfants
    int GetChildCount() const;
    int GetChildIndex (CXmlElement* aElement) const;
    CXmlElement* GetChild (const string aName) const;
    CXmlElement* GetChild (int aPos) const;
    string GetChildText (const string aName) const;

    CXmlElement* ChildInsertAt (CXmlElement* aElement, int aPos);
    CXmlElement* ChildAdd (CXmlElement* aElement);
    CXmlElement* ChildInsertAfter (CXmlElement* aAfter, CXmlElement* aElement);
    CXmlElement* ChildInsertBefore (CXmlElement* aBefore, CXmlElement* aElement);
    CXmlElement* ChildRemove (CXmlElement* aElement);
    CXmlElement* ChildRemove (int aPos);
    void ChildDelete (CXmlElement* aElement);
    void ChildDelete (int aPos);
    void ChildDeleteAll ();
  
    string GetXml(int aLevel);
};

La classe CXmlAttribute - une classe simple pour travailler avec les attributs

class CXmlAttribute 
{
  private:
    string FName;
    string FValue;
 public:
    //--- méthodes du constructeur
    void CXmlAttribute ();
    void ~CXmlAttribute ();

    void Init (const string aName, const string aValue);
    virtual void Clear ();
    virtual CXmlAttribute* Clone ();
    
    //--- méthodes de service
    string GetName () const;
    void SetName (const string aName);
    string GetValue () const;
    void SetValue (const string aValue);    
};

Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/712

Indicateur de prix / volume Indicateur de prix / volume

L'une des puces les plus simples pour l'apprentissage automatique

RSI Alert - Multi Timeframe Overbought/Oversold Detector RSI Alert - Multi Timeframe Overbought/Oversold Detector

Un indicateur RSI simple mais efficace qui surveille les conditions de surachat et de survente sur n'importe quel symbole et horizon temporel. Il envoie des alertes instantanées via des notifications pop-up et mobiles lorsque l'IFR franchit les seuils que vous avez définis.

RSI_AC_Stochastic_Signal RSI_AC_Stochastic_Signal

Indicateur montrant la direction de la tendance (RSI) et les signaux de trading (Stochastique + Accélérateur).

ZigZag_INT ZigZag_INT

Version optimisée de l'indicateur ZigZag en termes de vitesse de calcul.