mql5语言的特点、微妙之处以及技巧 - 页 51

 
fxsaber:

这是个好把戏。诀窍是将图案应用 于TParent。我以前没有见过这样的事情。

嗯,这不是多重继承。这实际上是一个链条 基地->A->B->C->X。如果够用的话,谁会阻止你直接使用它?

 
斯坦尼斯拉夫-科罗茨基

嗯,这不是多重继承。这实际上是一个链条 基地->A->B->C->X。如果足够的话,谁会阻止你直接使用它呢?

简明扼要。

 
fxsaber:

简明扼要。

我非常同意。IMHO,直接规定四个继任者类别会更短、更清晰。

 
斯坦尼斯拉夫-科罗茨基

我非常同意这一点。IMHO,直接规定四个继任者类别会更短、更清晰。

如果突然间引入了复数继承,你只需要在一行中做一个小小的改动即可

class X : public INHERIT3(A, B, C)  {  };   // Объявляем класс, наследуемый от A, B, C
 
fxsaber:

如果突然引入了多重继承,你只需要在一行中做一个小小的替换就可以了

可惜的是,论坛除了投票之外,没有投注的形式--就像有选项的投票,但在账户里堵上几个 "便士 "的答案。选择正确选项的人将在事后得到输家的赌注;-)。我不认为他们会引进它。

 
斯坦尼斯拉夫-科罗茨基

嗯,这不是多重继承。这实际上是一个链条 基地->A->B->C->X。如果够用的话,谁会阻止你直接使用它?

是的,但整个特点是,所有的源类都被定义并作为模板使用。因此,这个链条可以按任何顺序设置。从本质上讲,多重继承并无根本区别。正如我已经写过的,班级可能会有陷阱。至于接口,所有东西都是一样的。唯一的一点是,它看起来会有点结皮,但在这里,每个人都可以自由决定是检查还是开车 )
 

还有一件事我想补充。多重继承的一个完整的替代方案(并且具有更灵活的功能)可以通过重载ghost操作符来实现。但MQ出于某种原因没有添加这种超载功能,尽管我已经要求他们做了很久。而我甚至没有从他们那里听到一个具体的答案,他们只是忽略了这一点。

 

有这样的情况

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.07.24 09:27

EA是在1641年下编制的,其中实现了快速交易历史。

有没有可能优化到Agent build 1596,历史工作非常缓慢,并因此得到多次优化的减速?

作为一个更普遍的情况,云上的优化有时不仅在时间上,而且在计算量上都有不同的结果。有时你可能会听到优化结果与单次运行不一致的情况。

这可能是由于参与优化的代理和参与单一运行的本地代理可能有不同的构建编号。

而且每个版本都包含不同的bug。例如,这里有一个现在相关的错误,但在几年前的构建中并不存在。

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.07.17 23:08

再次出现测试器中的HistorySelect错误。在1626年似乎没有。在1629年,有。

#include <Trade\Trade.mqh>

void OnTick()
{
  static CTrade Trade;

  const datetime NowTime = TimeCurrent();
  
  if (Trade.Buy(1) && Trade.PositionClose(_Symbol) && HistorySelect(NowTime, NowTime))
  {
    Print(HistoryDealsTotal()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-время
      
    ExpertRemove();
  }
}

相应地,如果你的EA在优化过程中击中了代理b1626,它可能会显示一个结果,但在本地代理b1641单次运行时,会显示一个完全不同的结果。

由此,我们可以得出结论,在优化之前,你应该知道你想对你的EA进行哪些构建的优化,哪些是不需要的。

开发者为不适合的代理提供了一个切割器 -INIT_AGENT_NOT_SUITABLE


因此,我建议在OnInit中为基于云的优化写一个检查,以匹配TerminalInfoInteger(TERMINAL_BUILD)与期望的值

但几乎不可能知道符合你需求的检查清单,所以你很可能会这样写

int OnInit( void )
{
  // Если Агент не совпадает с билдом компиляции, отказываемся от его услуг
  if (TerminalInfoInteger(TERMINAL_BUILD) != __MQLBUILD__)
    return(INIT_AGENT_NOT_SUITABLE);
//....

但这也是一个糟糕的解决方案。一个更灵活的解决方案是在优化过程中 你的构建号传递给Agent


一般来说,要保持警惕。


SZY.可以将每个Agent的运行情况生成交易报告,并在优化过程中一次性获得。这可以帮助进一步了解为什么在一次运行中,云代理的结果与本地的不同。在这个库 的帮助下,在优化和单次运行期间自动生成此类报告是可能的。

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

Renat Fatkhullin, 2017.07.25 08:26

我们定期切断clouda中的旧构建,等待它们的更新,这样做非常快,而且没有人注意到。

这不是每个版本都要做,而是取决于所做修改的重要性。
Report
Report
  • 投票: 12
  • 2017.07.19
  • fxsaber
  • www.mql5.com
Библиотека для MetaTrader 4/5, которая позволяет формировать отчеты по истории торгов.
 

调试时(不一定是调试),当你想在测试器中快速减少测试间隔时,我使用以下函数

// Выгружает эксперт, если количество сделок в истории больше DealsNum.
void ConditionStopExpert( const int DealsNum = INT_MAX )
{
  if ((DealsNum != INT_MAX) && ::HistorySelect(0, ::TimeCurrent()) && ::HistoryDealsTotal() > DealsNum)
    ::ExpertRemove();

  return;  
}

// Выгружает эксперт, если с момента запуска прошло AmountHours-часов.
void ConditionStopExpert( const double AmountHours )
{
  static datetime FirstTime = ::TimeCurrent();
  
  if (::TimeCurrent() > FirstTime + (datetime)(AmountHours * 3600))
    ::ExpertRemove();

  return;  
}
 
fxsaber:

调试时(不一定是调试),当你需要在测试器中快速减少测试间隔时,我使用以下函数

纠正代码,你在第一个函数中的数字是5,而不是DealsNum。