智能采集组合文章(一个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