错误、漏洞、问题 - 页 1564

 
Anton Zverev:

iCustom+IndicatorRelease。这可能不是一个当场生产复杂实体的拐杖解决方案。关于口味,没有什么好争论的。问题是这种对多个代理人的拐杖会在多大程度上去浪费资源。

好吧,几乎所有的东西在5中都是很酷的。速度是一流的。而在这里,对不起,在你意想不到的地方,有一些完全的毛发。

为什么要做一个释放指标?

让它在每一个新的刻度上向被测专家发送一个图表事件。

在每个刻度上创建一个指标,然后再发布--这就是浪费资源的地方。

 
Anton Zverev:

Vasiliy提到,在FORTS(不在测试器中),该机制通过订阅和BookEvent工作。这样就不需要将EA与任何图表联系起来。

BookEvent在测试者中尚未实现。
 
Slawa:

为什么要对一个指标进行发布?

让它在每一个新的刻度上向被测专家发送一个图表事件。

在每一个刻度处创建一个指标,然后释放它--这是一种资源的浪费。

我不善于表达自己,所以你不明白。点击这里了解详情 https://www.mql5.com/ru/code/280

而这个方案在实现这样一个简单的事情时要消耗多少资源!?

Мультивалютный обработчик событий OnTick(string symbol)
Мультивалютный обработчик событий OnTick(string symbol)
  • 投票: 27
  • 2011.02.01
  • Konstantin Gruzdev
  • www.mql5.com
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
 
Slawa:
BookEvent还没有在测试器中实现。
那么,如果它在外汇市场上都不工作,那么它在测试器中又有什么用呢?Vasiliy提出了我认为是明智的建议。
 
Slawa:

而且不要循环一秒钟,而是仅仅不到一个小时。有义务检查IsStopped()。

顺便说一下,睡眠是必须的。否则你会挂掉测试器。而在专家顾问的正常运行过程中,系统的资源将被蹂躏。

甚至不要测试你的变体

2016.04.26 19:39:05     Core 1  2016.04.25 00:16:48   infinite Sleep loop detected while testing
2016.04.26 19:39:05     Core 1  EURUSD : 2016.04.25 00:00 - 2016.04.26 00:00  1439 minute bars absent in total while real ticks present
2016.04.26 19:39:05     Core 1  EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.04.26 19:39:05     Core 1    SleepPause=10
2016.04.26 19:39:05     Core 1    TimerInterval=1000

编码

sinput uint TimerInterval = 1000; // Через сколько секунд вызывать OnTimer
sinput uint SleepPause = 10;      // На сколько милисекунд делать Sleep
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   EventSetTimer(TimerInterval);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   const uint Amount=TimerInterval*1000/SleepPause;

   for(uint i=0;(i<Amount) && (!IsStopped()); i++)
      Sleep(SleepPause);
  }
//+------------------------------------------------------------------+
 
Anton Zverev:

甚至没有测试你的选项

编码

那你在这里测试什么呢?
 
Slawa:
那你在这里测试什么呢?
我在测试器中运行该代码。我 测试发现 有一个无限的睡眠 循环。
 
Anton Zverev:
我在测试器中启动了该代码。 测试,我得到了检测到无限睡眠循环 的挂起。

人们已经说过很多次:"阅读文件"。

你不是说,"我已经阅读了所有的文件。几次"?

你读过这个 吗?看来你还没有...

如果在执行Sleep()函数时,测试器中的当前时间超过了测试期的结束时间,你会得到一个错误 "Sleep中的无限循环"。如果发生这样的错误,测试结果不会被丢弃,所有的计算都会全部执行(交易量、缩减量等),并将结果传递给终端。

 
Slawa:

你读过这个 吗?

我有,而且我非常仔细地阅读了。问题是,如果在OnTimer中使用Sleep,程序员无法确定他/她 何时离开测试区间。IsStopped(因为看了文档,我一下子把它放进了代码中)在退出的时候不工作。这是谁的错?
 
Slawa:

而关于OnTimer中的循环缺失点,你需要可重复的证据。你有吗?

你在文件中写 到了这一点!

在测试器中,Sleep()调用不会延迟测试过程。当调用Sleep()时,产生的ticks在指定的延迟内被 "播放",结果是挂单、止损等可以触发。调用Sleep()后,在测试器中建模的时间会按Sleep函数参数中指定的时间间隔增加。

因此,专家顾问不能在每一个点位都被调用。证明是否被接受?