下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2014.01.27 08:04
程序库

XML 解析器 - MetaTrader 5程序库

| Chinese English Русский Español Deutsch 日本語 Português

显示:
480
等级:
投票: 19
\MQL5\Include\XML\
xmlbase.mqh (0.56 KB)预览
\MQL5\Scripts\
xml_test.mq5 (1.39 KB)预览

解析 XML 文档的库。纯 MQL5, 它未使用任何外部库。

为了使用该库, 仅需包含它:

#include <Xml\XmlBase.mqh>

举例:

#include <Xml\XmlBase.mqh>

CXmlDocument doc;

void OnStart() 
{
  string file = "File.xml";
  string err;
  if (doc.CreateFromText(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")
        {
           /* .... */
        }
      }
    }
  }
}

注:

  • 当用 MQL5编写这个库时, 未使用参数;
  • 仅支持标准 XML 的基本功能;
  • 若有错误, 建议和缺陷需修复, 请通知我。

主要部件:

CXmlDocument 类提供 XML文档自文件/字符串中下载方法, 以及保存文件。

CreateX 函数解析 XML 文档并创建 DOM 模型的层次结构, 这个工作可利用 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();
};

 

CXmlElement 类是任意 XML 文档的基础接口。它提供存取元素, 属性及内容

class CXmlElement 
{
  private:
    string         FName;
    CXmlAttribute* FAttributes[];
    CXmlElement   *FElements[];
    string         FText;
    CXmlElement*   FParent;
  public:  
    //--- 构造方法
    void  CXmlElement ();
    void ~CXmlElement ();
    void Init (const string aName, const CXmlElement* aParent=NULL, const string aText="");
    void CopyTo (CXmlElement &aDst);
    virtual void Clear ();
    
    //--- 主要服务方法
    string GetName () const;
    void SetName (const string aName);
    string GetText () const;
    void SetText (const string aText);
    CXmlElement* GetParent () const;
    void SetParent (CXmlElement* aParent);
    
    //--- 属性服务方法
    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 ();
  
    //--- 子节点服务方法
    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);
};

 

CXmlAttribute 是一个简单类工作于属性

class CXmlAttribute 
{
  private:
    string FName;
    string FValue;
 public:
    //--- 构造方法
    void CXmlAttribute ();
    void ~CXmlAttribute ();

    void Init (const string aName, const string aValue);
    virtual void Clear ();
    virtual CXmlAttribute* Clone ();
    
    //--- 服务方法
    string GetName () const;
    void SetName (const string aName);
    string GetValue () const;
    void SetValue (const string aValue);    
};

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/712

Break_Lag_ATR Break_Lag_ATR

该指标以直方图形式显示波动突破, 并作为市场进/出/仓位反转或加仓的信号。

sSyncScroll sSyncScroll

图表并发卷动的脚本。

EQUILIBRIUM-2011 EQUILIBRIUM-2011

多币种 "网格" 自带风险控制 (自动交易冠军杯 2011 年参赛版本, 以及升级版)。

保存历史至 HST 保存历史至 HST

这段脚本输出历史数据至 HST 格式, 它可用于 MetaTrader 4 客户端。文件可在 MetaTrader 4 中作为历史数据输入, 或您可以作为离线图表打开它。