关于MQL5向导和标准交易类库的问题 - 页 10

 
Sevrer:

你好。

我决定自己写一个信号模块,纯粹是为了认知的目的。我遇到了一个问题。我必须设置挂单,我知道这可以通过CExpertSignal::OpenLongParams(...)来完成。但我有一个问题--我的测试人员警告说无效过期。在挖掘了源代码之后,我意识到除了ORDER_TIME_SPECIFIED 之外,我们不能得到任何类型的时间,而我们希望得到ORDER_TIME_GTC。

到目前为止,我已经做了一个聪明的举动,但它不太正确。我已经纠正了库中的功能。

你能提供什么建议?

你好。

你说得很对。我没有考虑到过期为零的情况。

你的解决方案很好。我将对标准库进行适当的编辑。

谢谢你。

 
uncleVic:

你好。

你说得很对。我没有考虑到零到期的问题。

你的解决方案很好。我将对标准库 进行适当的编辑。

谢谢你。

这将是很好的,但与此同时,在这种情况下,我找到了另一条出路,正确的出路 :)通过创建一个继承自CExpert的类,我在其中重载了CheckOpenLong()和CheckOpenShort()函数,我在那里进行了这种修正。

        if (expiration == TimeCurrent() || expiration == 0)
        {
                m_expiration = 0;
                m_trade.SetOrderTypeTime(ORDER_TIME_GTC);
        }
        else
        {
              if(!m_trade.SetOrderExpiration(expiration))
        	{
         		 m_expiration=expiration;
        	}
        }
 
Sevrer:

但与此同时,我已经找到了摆脱这种情况的另一种方法--正确的方法 :)通过创建一个继承自CExpert的类,我在其中覆盖了CheckOpenLong()和CheckOpenShort()函数,并在那里进行了这种修正。


继承是正确的方法。
 

请解释Expert_EveryTick参数的逻辑。

如果Expert_EveryTick=true,专家顾问就会处理每一个刻度?也就是说,它在每一个新的tick上检查进入/退出条件和仓位跟踪(trawl),对吗?

如果Expert_EveryTick=fasle--只在新条形 的第一个刻度线上触发? 而跟踪也将只在第一个刻度线上触发?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
mr.Taras:

请解释Expert_EveryTick参数的逻辑。

如果Expert_EveryTick=true,专家顾问就会处理每一个刻度?也就是说,它在每一个新的tick上检查进入/退出条件和仓位跟踪(trawl),对吗?

如果Expert_EveryTick=fasle--只在新条形图 的第一个刻度处? 拖网也将只在第一个刻度处触发?


是的,你说对了。
 

关于专家顾问的逻辑的更多问题。


一个开放的位置,例如买入和一个固定的手数,例如1。

有一个信号给对方,要卖掉。

是两笔各1手的交易(第一笔将关闭1手)还是一笔2手的交易? 赢得和失去当前的买入有什么区别吗?


如果有一个买入的位置,又是一个买入的信号,我应该重新定义什么方法来使它关闭?

 
mr.Taras:

关于专家顾问的逻辑的更多问题。


1.有一个开放的头寸,例如买入和一个固定的手数,例如1。

有一个信号给另一方,要卖出。

专家顾问应该怎么做?是开两笔各1手的交易(第一笔交易将关闭1手)还是开一笔2手的交易?


2.EA不会自己做多,即如果有一个买入的位置,又有一个买入的信号,我应该重新定义哪些方法让它做多,CheckOpenLong()


1.两个触发阈值(专家顾问设置)。 如果超过平仓阈值,头寸就会简单关闭,如果超过两个阈值(平仓和开仓),头寸就会逆转。-/+ 没有区别。

2.处理方法

 
uncleVic:

1.两个触发阈值(EA 设置)。如果超过平仓阈值,头寸将直接关闭。如果超过两个阈值(平仓和开仓),头寸将反转。-/+ 没有区别。

2.处理方法

收盘和开盘阈值是 "投票 "的结果,信号模块中的ShortCondition()或LongCondition()会返回什么?

 
mr.Taras:

收盘价和开盘价是对信号模块中ShortCondition()或LongCondition()返回的内容进行 "投票 "的结果吗?

阈值是参数(Signal_ThresholdOpen和Signal_ThresholdClose),"投票 "的结果要与之相比较。
 

三个问题。

  1. 如何使信号模块只在开盘价上工作,而不是在每一个点上工作?
  2. 我如何在位置跟踪模块中获得信号模块的投票值?你需要在一个已经计算好的信号上进行拖曳,而不是编造另一个信号模块来跟踪。
  3. 如何获得资金 和风险管理模块 中报警模块的投票值?你需要根据已经计算好的交易信号来打开交易量,而不是为了计算交易量而编制另一个信号模块。

理论上,我们当然可以使用向导建立EA,然后手动添加所有这些功能到代码中。但是,所有这些都以标准方法的形式实现,也就是说,对于想使用向导的傻瓜来说,他们不需要进入代码进行编辑,例如,如果他们想用一个信号模块替换另一个信号模块,那是很理想的。