智能采集组合文章(一个5策略测试器中策略测试多个策略表简介)

优采云 发布时间: 2022-02-18 02:06

  智能采集组合文章(一个5策略测试器中策略测试多个策略表简介)

  目录

  介绍

  通常我们需要创建一个可以与另一个算法共存的算法,例如,一个算法的执行不能影响另一个同时运行的算法。当您需要将多个算法集成到一个可执行的 ex5 模块中时,就会出现这种情况。尽管它很简单,但它也有明显的“缺陷”——在创建交易策略引擎时必须考虑的算法特征。

  CStrategy 交易引擎收录一组算法,可以实现两个或多个交易策略的联合操作。我们将在本文中详细讨论它们。同时我们也会创建一个交易组合——一组同时交易的EA,以分散交易风险。CStrategyList 类——CStrategy 类型策略的容器——属于提供同时操作策略的算法。此类允许上传基于 XML 描述的策略,同时使用相应的方法(策略存储库)动态创建它们。

  随附的视频显示了在 MetaTrader 5 策略测试器中测试多个策略的过程。基于所述交易引擎的所有策略都有一个默认自定义面板,可帮助您直接从图表轻松控制每个策略。

  CStrategyList 策略经理

  CStrategy 类及其主要模块在“General Expert Advisor”系列 文章 的第二部分中进行了描述。通过使用这个类和模块中的功能函数,每个派生策略都有一个统一的交易逻辑。但是,使用程序来组织事务处理不仅仅是执行事务请求。确保策略之间的协作非常重要,其中包括在单个可执行 ex5 模块中运行多个算法。

  CStrategyList 类用于此特定目的。从它的名字就可以猜到,这个类提供了一个 CStrategy 风格的策略列表,但是它的操作比普通的数据容器要复杂。该模块解决了以下问题:

  这是 CStrategyList 类的头文件:

  //+------------------------------------------------------------------+

//| 管理CStrategy类型策略的容器类

//+------------------------------------------------------------------+

class CStrategyList

{

private:

   CLog*       Log;                 // 日志

   CArrayObj   m_strategies;        // CStrategy类型策略

   CLimits*    m_limits;

   void        ParseStrategies(CXmlElement* xmlStrategies, bool load_curr_symbol);

   void        ParseLimits(CXmlElement* xmlLimits);

   CStrBtn     StrButton;  

public:

   CStrategyList(void);

   ~CStrategyList(void);

   void LoadStrategiesFromXML(string xml_name, bool load_curr_symbol);

   bool AddStrategy(CStrategy* strategy);

   int  Total();

   CStrategy* At(int index);

   void OnTick();

   void OnTimer();

   void OnBookEvent(string symbol);

   void OnDeinit(const int reason);

   void OnChartEvent(const int id,

                     const long &lparam,

                     const double &dparam,

                     const string &sparam);

                    

};

  如您所见,大多数方法都是事务事件处理程序。它们具有相同类型的内容。让我们分析其中之一,OnBookEvent:

<p>//+------------------------------------------------------------------+

//| 发送 OnBookEvent 事件到所有列表策略

//+------------------------------------------------------------------+

void CStrategyList::OnBookEvent(string symbol)

  {

   for(int i=0; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线