新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1738

 
Nikolay Ivanov #:

你的代码打印的是0,而不是-1...

也许-1被打印在其他地方,最有可能的是整个代码在打印机中...

是的,你是对的,每一步都是预印的,可以看到它 "停滞 "的地方。

例子不正确,对不起,代码本身很大。

但是,Konstantin的解决方案解决了问题!真的把i--和零点检查换了个地方,现在逻辑工作正常了,不再是-1,而是输出0或1。(在0或-1之前,后者会立即出现错误)。

 
Nikolay Ivanov #:

你的代码打印的是0,而不是-1...

有可能-1被打印在其他地方,最有可能的是整个代码在打印机中...

在你试图解决问题之前,你需要确定它...确保它在那里,并在你解决这个问题之前找到它...

找一支笔和一张纸。并写下循环计数的方式。在这个代码中。

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }

检查

if (i==0) break;

在这段代码中永远不会起作用。除非你最初设置了

int i=11;

一个奇数值。如果是偶数,那么这个代码

int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

if (i==0) break;

将会有一个奇数值。

 
Nikolay Ivanov #:

在试图解决一个问题之前,你需要确定它...确定它的存在,并将其本地化,然后解决它...

我明白你的意思。

 
Konstantin Nikitin #:

找一支笔和一张纸。并写下周期是如何计算的。在这个代码中。

如果条件中说打印=-1,但事实上(我检查过)打印为0,也就是说,这个例子举得不对,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的......

 
Nikolay Ivanov #:

如果条件说打印=-1,但事实上(我检查过)打印为0,所以这个例子是不正确的,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的......

从这一行开始打印0

for (i; i>0; i--)

而不是从检查和中断 输出。

一般来说,更正确的写法是

for (i; i>= 0; i--)

因为数组是以零索引开始的

 
Konstantin Nikitin #:

从这一行开始打印0

不是从休息 检查和退出。

从这一行开始打印出0,用于给定的代码...

Print(i);

问题不是为什么break不起作用,问题是为什么打印机会打印出-1......就是这样。 而且不管i开头是偶数还是奇数,它都不会打印出-1......。

 
能否请您告诉我如何计算长时间内的ticks或candles?(例如一年)。

尝试Close[],但指数没有给出5000以上的数据。
 
Ivan Butko #:
能否请您告诉我如何计算长周期内的ticks或candles?(例如一年)。 我试过Close[],但指数没有超过5000。

蜱虫或蜡烛会产生如此大的差异,至少可以说是可怕的......

 
Alexey Viktorov #:

蜱虫和蜡烛之间的区别很大,说起来很吓人...

例如,一个EA,如果你为它指定任何时期,在测试器中,它将按点或按M1条走,每个人都会考虑到这一点。

,但如果你采取一个EA,实时进入长历史,并从那里获取数据,我不明白如何组织它。终端不提供超过5000支蜡烛。


UPD
我将尝试使用这个东西,代码在网上。

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Strange.突然间,它就起作用了。甚至第100万条也被检查。没有做任何事情,读了文件,喝了茶。刚刚又运行了一次,它成功了。我整天都有错误,尽管我昨天已经下载了历史记录并更改了设置。
所以,也不需要检查额外的代码(以上)。
MT4是有些脾气的。或者,也许forex chif有这样的功能。我必须把标准的,而不是经纪人的。

 
Ivan Butko #:

例如,一个专家顾问,如果你为它指定任何时期,它将通过测试器按点或按M1条,每个人都会考虑到它。

,但如果你把一个专家顾问,在实时模式下进入长历史并从那里获取数据,我不明白如何组织它。终端不提供超过5000支蜡烛。


UPD
我将尝试使用这个东西,代码在网上。

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Strange.突然间,它就起作用了。甚至第100万条也被检查。没有做任何事情,读了文件,喝了茶。刚刚又运行了一次,它成功了。我整天都有错误,尽管我昨天已经下载了历史记录并更改了设置。
所以,也不需要检查额外的代码(以上)。
MT4是有些脾气的。或者,也许forex chif有这样的功能。我得把标准的,而不是经纪公司的。

对CopyRates()的第一次调用已经启动了对历史数据的抽查(不要运行一周,你会再次得到同样的东西,好吧,也许不是一周,而是一些时间)。
你只需要检查服务器上有多少数据,并与专家顾问的可用数量进行比较。如果低于要求--将EA留到下一次打勾。在下一次打勾时,再次检查。如果在一些尝试中,我们无法获得所需的历史数量--在这种情况下,我们将按要求处理这个错误。

原因: