错误、漏洞、问题 - 页 2888

 
Denis Diakonov:

能否请你告诉我!?

为什么当新的刻度出现时,服务器的时间没有更新?

在EA启动的那一刻,一切都按部就班地进行,但时间过去后,当前分钟的新值却没有进入变量。

也就是说,专家顾问的工作取决于变量int M = TimeMinute(TimeCurrent())中获得的数字。

实际上这一行代码来自于参考文献,它不起作用。

例如,我在12点启动它--服务器返回的当前时间 与变量中的时间相对应,但变量仍然停留在12点,尽管时钟上已经有15-20分钟了。

TimeMinute()在MQL5中不可用。

关于MQL4的问题应张贴在相应的MetaTrader 4分支。

如果你想要一个跨平台的解决方案,请使用MqlDateTime

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Порядковый номер в году day_of_year в високосном году, начиная с марта, будет отличаться от порядкового номера соответствующего дня в невисокосном году.
 
这是个可疑的警告。
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

但这很好。

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

有什么根本区别?

 
A100:
这是个相当可疑的警告。

但这很好。

有什么根本区别?

正确的警告。变量j在第一次使用前没有被初始化,当变量i被赋值为j时。

而在第二种变体中,j变量被赋予i+1的值,只有这样i=j

在没有警告的情况下应该是这样的,但还没有经过测试...

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

正确的警告。

对于另类天赋的人来说,这些是相同的周期
 
TheXpert:
对于交替天赋的人来说,这些是相同的循环。

所以呢,循环的这种特性允许使用未识别的变量?

 
Alexey Viktorov:

所以呢,循环的这种特性允许使用未识别的变量?

如果循环是相同的,那么编译器的行为应该是相同的,而它是不同的。这就是错误所在。你已经解释了为什么在案例(1)中有一个警告,然后解释为什么在案例(2)中没有一个?原则上有什么变化?然后,如果使用了一个未初始化的变量,为什么执行代码时最后的结果是正确的?

有这样一种科学--逻辑。如果A和B是一样的,而且A是红色的,那么B也应该是红色的,而不是绿色

 
A100:

如果循环是相同的,那么编译器的行为应该是相同的,而它是不同的。这就是错误所在。你解释了为什么在案例(1)中有警告,然后解释为什么在案例(2)中没有?原则上有什么变化?然后,如果使用了一个未初始化的变量,为什么执行代码时最后的结果是正确的?

有这样一种科学--逻辑。如果A和B是一样的,而且A是红色,那么B也一定是红色,而不是绿色

那里没有随机数字。那里有一个零。
MQ也修复了它 ))

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

那里没有随机数字。那里有一个零。
MQ也修复了这个问题 ))

首先你需要检查--然后是 "胡说八道"。

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

结果:-2052256859


 
A100:

你需要先检查--然后再 "胡说八道"。

结果:-2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

也许是因为我在VirtualBox上安装了测试终端
另外,编译器并没有警告说变量没有被初始化。

但它是这样警告的

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
可能是因为我在VirtualBox上安装了测试终端

你有一个随机数字0,我有540016640

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

但它们仍然是随机数字。