错误、漏洞、问题 - 页 38

 

出现了一个问题,我不知道该把它放在哪里。

这是我感兴趣的代码部分。

      Print("itogo do=",itogo);
      if(itogo>1000)
        {
         Print("itogo>1000 =",itogo);
         itogo=500;
         Print("vsego_if=",itogo);
        }
      Print("itogo posle=",itogo);
      Print("+-----------------------------------------------------------+");

它说,首先我们需要取消印有 "itogo do "文字的itogo变量值。

如果itogo大于1000,则打印itogo,并附上文字 "itogo>1000"

itogo被分配到500个

打印带有 "vsego_if="文字的itogo,然后离开保护区。

用 "itogo posle="的文字打印itogo。

画出一条线。

我为什么要讲细节呢?

应该很清楚,如果没有条件,它们之间会有两行;如果有条件,会有四行。

我们知道,当条件被触发时,变量的值会发生变化。

首先要做的是取消itogo do变量的打印,这里的取消显示了两个打印机,所以没有触发任何条件,但变量的值已经改变。

这怎么可能是??????????


这里有一张代码的截图,显示行与行之间,即字段边界以外的某个地方,没有任何东西被隐藏。

代码完全崩溃,编译没有问题,但却拒绝按预期工作。

变量是全局声明的int,代码本身很大,但在代码的其他地方没有打印。

而最有趣的是,调试器工作正常,但当你在正常模式下运行时,这里有这样的洗牌现象

而这不是打印机,根据程序的逻辑,我发现有些东西是错误的。

 

我还没能在其他例子上重现这个问题,但这似乎是解决办法

以前有DebugBreak();,代码通过调试器运行,后来DebugBreak()被删除,一切都被重新编译。

但显然,ME记得使用了调试器,并拒绝在编译后没有调试的情况下正确工作。

如果我运行调试器,那么即使在正常启动时,该脚本也能正常工作。

 
Urain:

我还没能在其他例子上重现这个问题,但这似乎是解决办法

以前有DebugBreak();,代码通过调试器运行,后来DebugBreak()被删除,一切都被重新编译。

但很明显,ME记得曾经使用过调试器,并且在编译后不运行调试器就拒绝正确工作。

如果你通过调试器运行它,即使在正常运行时,该脚本也能正常工作。


他们还说这是一种释放?

2010年锦标赛 的潜在参赛者已经写了一个专家顾问,并对其进行了调试,但调试器的东西仍然在代码中。然而,专家顾问工作得很好。然而,它只对 "技巧 "起作用。 然而,参与者并不知道这一点--他/她怎么可能知道这样一个没有记录的功能?

因此,该参赛者将其EA的源代码发送给MetaQuotes,以便参加2010年锦标赛,他们只是进行了编译,当然,代码结果是干净的,没有任何 "调试器的东西"。

2010年的锦标赛开始了,但MetaQuotes Expert Advisor不知为何与他或她电脑上的交易方式不一样。一个参与者感到困惑,有各种想法......

 
Urain:

出现了一个问题,我不知道该把它放在哪里。

我做了这个代码作为例子(我把你的值放进去了)。

void Check(int itogo)
  {
   Print("itogo do=",itogo);
   if(itogo>1000)
     {
      Print("itogo>1000 =",itogo);
      itogo=500;
      Print("vsego_if=",itogo);
     }
   Print("itogo posle=",itogo);
   Print("+-----------------------------------------------------------+");  
  }
void OnStart()
  {
   Check(158);
   Check(179);
   Check(202);
   Check(222);
   Check(243);
   Check(261);
   Check(288);
   Check(301);
  }

它工作得很好。

2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=301
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=301
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=288
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=288
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=261
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=261
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=243
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=243
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=222
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=222
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=202
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=202
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=179
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=179
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=158
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=158

正如你所看到的,变量值中没有错误或不一致的地方。

也许你在多次重新编辑后忘记了重新编译代码,而使用了一个旧版本。

你需要做什么。

  • 从头开始复制你的代码,重新启动终端(为了保证)并检查
  • 如果错误仍然存在,请通过servicedesk(甚至在论坛)向我们发送完整的代码--我们一定会检查的。
 
simpleton:

不要再歇斯底里了。

如果这一错误得到确认,将立即得到纠正。软件开发不可能没有错误地进行下去。

 
Renat:

不要再歇斯底里了。

如果这一错误得到确认,将立即得到纠正。软件开发不可能没有错误地进行下去。

Renat,我建议开设 "MQL5的批评 "或类似的话题。而所有这些来自其他主题(线程)的信息都应该作为非顶层的信息被删除。

这样一来,批评家们就有了表达自己的地方,线索也会得到安排。

 

我想知道关于从EA调用指标第18261号 请求的命运(数值与指标不匹配)。

如果他们以某种方式作出回应就好了......

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
ddd06:

我想知道关于从EA调用指标第18261号 请求的命运(数值与指标不匹配)。

如果他们以某种方式作出回应就好了......

您的请求已经得到答复。有人建议。

为什么在你的资料中没有更新--我们会想办法解决的。

 
Renat:

我做了这段代码作为例子(放上你的值)。

它工作得很好。

正如你所看到的,变量值没有错误或不一致的地方。

有可能在多次重新编辑后,你忘了重新编译代码,而使用了一个旧版本。

该怎么做。

  • 从头复制你的代码,重新启动终端(以确保),并检查
  • 如果你仍然有错误,请通过servicedesk(甚至在论坛上)将完整的代码发送给我们--我们一定会检查。

在我在这里发帖之前,我也做了同样的事情,结果和你一样,但在最初出现错误的那张纸上,全部崩溃了。

我在调试器中重复了这个原因,如果在那个特定的工作表上做了重新编译,并且没有通过调试运行是不正确的,在调试运行后一切正常。我不知道为什么调试器会钩住这个特定的工作表,其他工作表上的代码拷贝可以正常工作,但这个工作表却不行。

这就是为什么我在上面写道,到目前为止,我无法重现这个错误(或者说,它重现了,但只在本地化的项目中)。

也许调试器或ME有一个功能可以记住编辑的历史,也许在事件发生之前有一个关键的错误,而我没有注意到。

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
Urain:

而我在这里发布之前也做了同样的事情,结果和你一样,但在最初发生错误的那张纸上,一切都崩溃了。

我在调试器中重复了这个原因,如果我在特定的工作表上重新编译,没有通过调试运行,就会出现错误,调试后一切正常。我不知道为什么调试器会钩住这个特定的工作表,其他工作表上的代码拷贝可以正常工作,但这个工作表却不行。

这就是为什么我在上面写道,到目前为止,我无法重现这个错误(或者说,它重现了,但只在本地化的项目中)。

也许调试器或ME有一个功能可以记住编辑的历史,也许在事件发生前有一个关键的错误,而我没有注意到。

你还记得DebugBreak()是在哪里设置的吗?

到目前为止,还没有运气重现它。