到底发生了什么事? - 页 5

 
Andrey F. Zelinsky:

全局声明一个变量,并在声明时对其进行初始化,例如int kk=0。

然后在OnTick()中取消打印并改变数值,例如,Print("kk=",kk); ++kk。

然后改变TF--看看结果。

很明显,即使TF被改变,全局变量 也会保留它的值--但在测试器中没有发生这样的情况。

 
Andrey Dik:

很明显,即使TF被改变,全局变量 也会保留它的值--但在测试器中没有发生这样的情况。

现在你已经找到了造成结果差异的原因的答案。

在优化时,参数被重新选择,即以不同的设置重新启动专家顾问。

 
Andrey F. Zelinsky:

现在你已经找到了结果差异的答案。

你认为全局 EA变量会保留过去优化器运行时的数值,并延续到下一次运行中吗?

 
Andrey F. Zelinsky:

检查它,检查比猜测更容易。

上面的Renat写道,优化器的工作 "像时钟一样",原因在代码中 -- 他多次建议进行解压 -- 我想没有人做过。

你自己检查过了吗?有什么明确的例子说明单次运行的效果与作为优化的一部分不同?

例如,我记得,在测试器中删除一个句柄以前是不行的,它会导致内存溢出和终端与系统一起崩溃。也许这个问题已经解决了,但在创建和删除指标句柄方面仍有一些隐患,而且在优化器和单一指标运行方面存在差异。正如我所知,开发人员非常努力地加快和尽可能减少内存消耗。

 
Andrey Dik:

你自己检查过吗?是否有明确的例子,在哪些情况下单次运行的效果会与作为优化的一部分不同?

在这种情况下,它不是一个单一的运行。

[删除]  
Andrey F. Zelinsky:

检查全局声明变量的初始化

如果初始化不是在OnInit()中,而是在声明中,并且如果它们的值在代码中被改变。

  1. 我检查了一下。
  2. 这就是变量--它们可以被改变。
  3. 如果我说错了,请纠正我。
  • 如果定义了一个变量,就会为它保留内存。
  • 如果它没有被初始化,任何东西都可能被储存在里面。
  • 立即用0初始化,还是将计算结果赋值在某个地方,有什么区别?
  • 如果你试图使用一个未初始化的变量,编译器将产生一个警告。

一个简单的例子。

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

虽然....如果你把声明放在全局范围内,编译器就不会因为某些原因而产生警告(((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

我在期待着不同的东西...

 
Сергей Таболин:

  1. 我查过了。
  2. 变量仅仅是变量,它们可以被改变。
  3. 如果我说错了,请纠正我。
  • 如果声明了一个变量,就会为它保留内存。
  • 如果它没有被初始化,任何东西都可能被储存在里面。
  • 立即用0初始化,还是将计算结果赋值在某个地方,有什么区别?
  • 如果你试图使用一个未初始化的变量,编译器将产生一个警告。

一个简单的例子。

虽然....如果你把声明放在全局范围内,编译器就不会因为某些原因而产生警告(((

我在期待着不同的东西。

第五页正在进行中,但仍然没有mql5代码...关于测试,仍然有一个笼罩在黑暗中的谜团:符号(们)、时间框架(们)、测试设置。

[删除]  

好吧,在我开始打底之前还有一个问题。

例如,我已经记录了结果。

优化器 - 买入;卖出;卖出;买入;买入;卖出

测试员 - 买入;卖出;卖出;买入;买入;卖出;买入;买入;卖出

这些"额外"交易的数据如何能帮助理解它们来自哪个天花板?也许我们也应该写出以前的酒吧的价格,或者还有什么?

[删除]  
Vladimir Karputov:

第五页正在进行,但mql5代码仍然不在那里......。关于测试,仍然有一个笼罩在黑暗中的谜团:符号(们)、时间框架(们)、测试设置。

欢迎从假期回来 ))))

你可以在这里看到一切

 
Сергей Таболин:

  1. 我查过了。
  2. 变量仅仅是变量,它们可以被改变。
  3. 如果我说错了,请纠正我。
  • 如果声明了一个变量,就会为它保留内存。
  • 如果它没有被初始化,任何东西都可能被储存在里面。
  • 立即用0初始化,还是将计算结果赋值在某个地方,有什么区别?
  • 如果你试图使用一个未初始化的变量,编译器将产生一个警告。

一个简单的例子。

虽然....如果你把声明放在全局范围内,编译器就不会因为某些原因而产生警告(((

我在期待着不同的东西...

如果'x'是双倍类型,所给的例子从根本上说是错误的,在这两种情况下'y'的状态都是未定义的。

也就是说,有可能在神经网络深处的某个地方,人们会得到特殊的双倍值--inf-types、nan-types或类似于eps-values的值

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...