文章 "MQL5 向导:如何教导 EA 以任意价格建立挂单" - 页 2

 

你好,弗拉基米尔、


我很喜欢这篇文章,有没有可能编写一个只使用挂单的 EA,使用另一个指标进行开仓交易。例如,如果价格向一个方向移动了 5%,无论如何都会触发买入或卖出。

 
Tafadzwa Nyamwanza :

你好,弗拉基米尔、


我喜欢这篇文章,是否有可能编写一个只使用挂单的 EA,在使用另一个指标的情况下开启交易。例如,如果价格向一个方向移动 5,无论如何都会触发买入或卖出。

您确定您的问题与文章MQL5 Wizard: How to Teach an EA to Open Pending Orders at Any Price 有关吗?

 
嘿,弗拉基米尔。

我知道这篇文章是关于挂单 的,但您是如何编程让您的 EA 开立市场订单的?

 
Ayanda Mhlauli:
嘿,弗拉基米尔

我知道这篇文章是关于挂单 的,但您是如何编程让您的 EA 开立市场订单的?

input double             Signal_PriceLevel         =0.0;         // 执行交易的价格水平
 
在信号生成器里面直接调用PriceLevel()不就可以了吗,为什么一定要把*signal指针传进信号生成器?
 

你好@Vladimir Karputov-- 这是一篇很有启发性的文章,谢谢!

我个人认为 MQL5 中的这种 OOP 框架非常有趣,可以通过组合代表专家、信号、过滤器、指标、风险管理器等的对象来构建机器人 - 在我看来,这是一种非常优雅的方法,因为它有利于代码重用和可扩展性,而且显然不会牺牲太多功能......不过,由于其复杂性,学习曲线似乎相当陡峭。

无论如何,由于我正在完全过渡到 MQL5,并且在 OOP 概念/语言方面有很好的经验,我真的很想调整它,用于我自己的原型开发和交易系统研究。我一直在研究和使用库中的代码,想知道您推荐的以下最佳实践方法:

问题:您将如何为专家中接收到的信号整合趋势过滤器?

该库包含 CExpertBase::m_trend_type 属性,但遗憾的是,在平台提供的示例中没有真正使用该属性。我在两种设计可能性之间犹豫不决...添加一个 趋势过滤对象 直接在我的 CExpert 子类中添加一个趋势过滤对象(见下面的代码片段),这样可以在专家级别上对交易决策进行更多控制。另一种解决方法是在我的主信号对象的过滤器中做手脚,以某种方式计算趋势并在我的 CSignalExpert 子类 做出决定,例如在 CSignalWithTrendFilter::Direction() 中。我还不太确定一种方法与另一种方法相比有哪些优缺点,哪种方法能让我更灵活地满足未来项目的要求,即更多代码重用而不复杂,减少对基类的调整。

class CExpertWithTrendFilter : public CExpert
{
protected:
   CExpertSignal    *m_trend;   //与 CExpert::m_signal 并行工作,以过滤它生成的信号
// ...
   virtual bool      Processing(void);
   virtual bool      CheckOpen(void);
// ...
};

bool CExpertWithTrendFilter::Processing(void)
{
   CExpertBase::m_trend_type = (ENUM_TYPE_TREND) m_trend.Direction();   //根据从 CExpertSignal 派生的专门对象确定当前趋势
   
   m_signal.TrendType(m_trend_type);             //将趋势类型/强度作为输入传递给 m_signal,该信号也是 CExpertSignal 的子类
   m_signal.SetDirection();                      //方案 #1 >>> 计算信号方向,可能考虑上文确定的趋势(也可能不考虑)

// ...

   if(CheckOpen())                               //方案 #2 >>或者,在做多或做空之前,可由专家检查趋势类型/强度
      return(true);

   retun(false);                                 // 返回时不进行任何操作
}

bool CExpertWithTrendFilter::CheckOpen(void)
{
   if(m_trend_type > TYPE_TREND_FLAT && CheckOpenLong())     // 只有当趋势过滤器方向一致时,才允许开仓做多
      return(true);
   if(m_trend_type < TYPE_TREND_FLAT && CheckOpenShort())    // 只有当趋势过滤器方向一致时,才允许开仓做空
      return(true);

   return(false);                                // 返回时不进行任何操作
}

提前感谢您的帮助和建议。

 
我很久以前就改用了我的交易引擎,尝试开发一个 EA 构造器- 它更灵活。
An attempt at developing an EA constructor
An attempt at developing an EA constructor
  • www.mql5.com
In this article, I offer my set of trading functions in the form of a ready-made EA. This method allows getting multiple trading strategies by simply adding indicators and changing inputs.
 
Vladimir Karputov #:
我很久以前就改用了我的交易引擎,尝试开发一个 EA 构造函数- 它更灵活。

好的,我明白了 -- 我正在阅读这篇文章,并将查看所附代码......无论如何,如果您不介意的话,我还是希望您能就上述问题发表评论/意见。非常感谢!

 
Dima Diall # :

好的,我明白了 -- 我正在阅读这篇文章,并将查看所附代码......无论如何,如果您不介意的话,我还是希望您能就上述问题发表评论/意见。非常感谢!

CExpertSignal 已成为过去。没有评论。

 
Vladimir Karputov #:

CExpertSignal 已成为过去。没有评论。

:-)