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

 
uncleVic:
大师和班级为他搬来了迄今为止的 "维护模式"。对于最简单的多变量类的创建已经适应了(现在还没有准备好,但以后我将在这里放一个例子)。

我根据向导生成的多货币类做了一个多货币类。但我不得不纠正EXPERT类。

在INIT()方法的最开始,有一个工作符号的检查,因此没有多货币。检查被移除,一切都很顺利。看看当时的情况--至少是这样的想法?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

附加的文件:
Master01_ML.mq5  14 kb
 

主持人您好!

我有这样一个问题。

MQL5 Wizard有20个信号模块,可以进行分歧、超买、超卖等分析。您能否告知是否可以从MQL5向导中借用任何这样的信号模块来进行分析,但要从 自己设计的自定义指标 中进行分析,为此应该做什么?它是否需要大量的返工(重新设计),还是只需要在标准交付的模块(其副本)中改变一些东西就够了?

提前感谢!

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

ForexMoneyMaker:

您知道是否可以从MQL5向导中借用任何这样的信号模块来进行分析,但要从 自己设计的自定义指标 中进行分析,为此应该怎么做?它是否需要大量的返工(改变),或者只需改变模块中的一些东西(它的副本)就可以了,而不是标准交付?

好问题!这就是原因--只要对标准模块进行最小的修改,就真的可以创建一个新的模块,只需插入另一个指标而不是一个。我不知道我们什么时候能自己写一篇关于这个主题的文章,所以我建议。

谁有 ,并希望写一篇文章"如何在信号标准模块的基础上创建自己的"--在个人留言中写给我。

 
Erm955:

我根据向导生成的多货币类做了一个多货币类。但我不得不纠正EXPERT类。

在INIT()方法的最开始,有一个工作符号的检查,因此没有多货币。检查被移除,一切都很顺利。看看当时的情况--至少是这样的想法?

if(symbol!=Symbol() || period!=Period()) 

на

 if(period!=Period())

这个想法是一样的,但是。

1.改变CExpert类 是不好的。通过重写Init(...)方法来继承它是很好的。

2) 你不需要修改CExpert类。你必须要写。

...
   if(!ExtExpert_EG.Init(Symbol(),PERIOD_M10,Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert_EG.Deinit();
      return(-1);
     }
   ExtExpert_EG.Symbol("NZDUSD");
...

就目前而言...

 
ForexMoneyMaker:

主持人您好!

我有这样一个问题。

MQL5 Wizard有20个信号模块,可以进行分歧、超买、超卖等分析。您能否告知是否可以从MQL5向导中借用任何这样的信号模块来进行分析,但要从 自己设计的自定义指标 中进行分析,为此应该做什么?它是否需要大量的返工(重新设计),还是只需要在标准交付的模块(其副本)中改变一些东西就够了?

提前感谢!


请看这里 的英文论坛
 
uncleVic:

这个想法是一样的,但是。

1.修改CExpert类是不好的。通过覆盖Init(...)方法来继承它是不错的。

2.你不需要修改CExpert类。你必须要写。

到目前为止...

你应该重新定义Init()方法,并将工作符号的检查排除在其中。但第2页并不符合,因为Init()方法,除其他外,包含了对数字Digits数量的检查,如果工作符号包含5个数字,而被测试的符号包含3个数字,就会出现停止/盈利的错误。我继承和推翻了。现在一切正常了。

当然,我不是一个很好的OOP专家,但事实证明,为了灵活地配置程序以适应不同数量的测试符号,你必须直截了当地填写,例如,21段代码(所有的符号),然后通过选择输入参数的方法来传递这个或那个代码片段。我在没有OOP的情况下也做了同样的事情,但是init中所有的句柄和指标值都被写进了动态数组,然后OnTick已经使用了这些数组。那么,我还没有看到OOP的任何优势?

P S.我没有准确地写出来。我必须塞进这么多的代码,一次要测试多少个字符。 也许有一种方法可以在设置过程中动态连接数据(处理程序和指标值),用于同时工作的字符数。问题是,所有这些都应该插在Init中,在OnTic/OnTimer中使用。

附加的文件:
Master02_ML.mq5  20 kb
 
Erm955:

有必要重新定义Init()方法,排除对工作符号的检查。而P.2不适合,因为Init()方法,除其他外,检查数字Digits的数量,如果工作符号有5个数字,而被测试的符号有3个数字,那么在停止/盈利方面会有错误。我继承和推翻了。现在一切正常了。

当然,我不是一个很好的OOP专家,但事实证明,为了灵活地配置程序的不同数量的测试符号,你必须直截了当地填写,例如,21段代码(所有的符号),然后通过选择输入参数的方法来传递这个或那个代码段。我在没有OOP的情况下也做了同样的事情,但是init中所有的句柄和指标值都被写进了动态数组,然后OnTick已经使用了这些数组。那么,我还没有看到OOP的任何优势?

P S.我没有准确地写出来。我必须塞进这么多的代码,一次要测试多少个字符。 也许有一种方法可以在调整同时工作的字符数的过程中动态地连接数据(处理程序和指标值)。问题是,所有这些都应该插在Init中,在OnTic/OnTimer中使用。

它是这样的。顺便说一下,谢谢你对第2点的提示。 我将添加控制并改变字符的数量。
 
uncleVic:
是这样的。顺便说一下,谢谢你对第2点的提示。 我将添加一个控制和改变数字。

妈的!刚把它设置好,当我升级到485构建时,错误又弹了出来。

2011.08.08 17:13:04 核心1测试器因OnInit关键错误而停止运行。
2011.08.08 17:13:04 核心 1 2010.01.01 00:00:00 OnInit: 初始化指标错误
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpert::InitIndicators: 错误初始化货币对象的指标
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::InitIndicators: 设定的参数没有被检查。
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::SetOtherSeries: 禁止改变时间序列。
2011.08.08 17:13:04 Core 1 2010.01.01 00:00:00 CExpertBase::SetPriceSeries: 禁止改变时间序列。
2011.08.08 17:13:04 核心 1 EURUSD,H4: 历史从2009.01.02 04:00开始
2011.08.08 17:13:04 Core 1 EURUSD,H4: 历史缓存保留了估计的4692个柱子

附加的文件:
Master02_ML.mq5  20 kb
 
Erm955:

妈的!刚把它设置好,当我升级到485时,错误又弹了出来。

代理人是否已经更新?EA是否在新版本中重新编译?
 
Rosh:
代理人是否已经更新?EA在新版本中是否被重新编译过?

就是这样,我重新编译了!