新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1738 1...173117321733173417351736173717381739174017411742174317441745...1953 新评论 Ivan Butko 2021.11.10 11:05 #17371 Nikolay Ivanov #:你的代码打印的是0,而不是-1...也许-1被打印在其他地方,最有可能的是整个代码在打印机中... 是的,你是对的,每一步都是预印的,可以看到它 "停滞 "的地方。 例子不正确,对不起,代码本身很大。 但是,Konstantin的解决方案解决了问题!真的把i--和零点检查换了个地方,现在逻辑工作正常了,不再是-1,而是输出0或1。(在0或-1之前,后者会立即出现错误)。 Konstantin Nikitin 2021.11.10 11:06 #17372 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; 将会有一个奇数值。 Ivan Butko 2021.11.10 11:06 #17373 Nikolay Ivanov #:在试图解决一个问题之前,你需要确定它...确定它的存在,并将其本地化,然后解决它... 我明白你的意思。 Nikolay Ivanov 2021.11.10 11:10 #17374 Konstantin Nikitin #:找一支笔和一张纸。并写下周期是如何计算的。在这个代码中。 如果条件中说打印=-1,但事实上(我检查过)打印为0,也就是说,这个例子举得不对,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的...... Konstantin Nikitin 2021.11.10 11:14 #17375 Nikolay Ivanov #:如果条件说打印=-1,但事实上(我检查过)打印为0,所以这个例子是不正确的,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的...... 从这一行开始打印0 for (i; i>0; i--) 而不是从检查和中断 输出。 一般来说,更正确的写法是 for (i; i>= 0; i--) 因为数组是以零索引开始的 Nikolay Ivanov 2021.11.10 11:19 #17376 Konstantin Nikitin #:从这一行开始打印0不是从休息 检查和退出。 从这一行开始打印出0,用于给定的代码... Print(i); 问题不是为什么break不起作用,问题是为什么打印机会打印出-1......就是这样。 而且不管i开头是偶数还是奇数,它都不会打印出-1......。 Ivan Butko 2021.11.10 15:34 #17377 能否请您告诉我如何计算长时间内的ticks或candles?(例如一年)。 尝试Close[],但指数没有给出5000以上的数据。 Alexey Viktorov 2021.11.10 16:16 #17378 Ivan Butko #: 能否请您告诉我如何计算长周期内的ticks或candles?(例如一年)。 我试过Close[],但指数没有超过5000。 蜱虫或蜡烛会产生如此大的差异,至少可以说是可怕的...... Ivan Butko 2021.11.10 17:29 #17379 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有这样的功能。我必须把标准的,而不是经纪人的。 Artyom Trishkin 2021.11.11 00:06 #17380 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留到下一次打勾。在下一次打勾时,再次检查。如果在一些尝试中,我们无法获得所需的历史数量--在这种情况下,我们将按要求处理这个错误。 1...173117321733173417351736173717381739174017411742174317441745...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你的代码打印的是0,而不是-1...
也许-1被打印在其他地方,最有可能的是整个代码在打印机中...
是的,你是对的,每一步都是预印的,可以看到它 "停滞 "的地方。
例子不正确,对不起,代码本身很大。
但是,Konstantin的解决方案解决了问题!真的把i--和零点检查换了个地方,现在逻辑工作正常了,不再是-1,而是输出0或1。(在0或-1之前,后者会立即出现错误)。
你的代码打印的是0,而不是-1...
有可能-1被打印在其他地方,最有可能的是整个代码在打印机中...
在你试图解决问题之前,你需要确定它...确保它在那里,并在你解决这个问题之前找到它...
找一支笔和一张纸。并写下循环计数的方式。在这个代码中。
检查
在这段代码中永远不会起作用。除非你最初设置了
一个奇数值。如果是偶数,那么这个代码
至
将会有一个奇数值。
在试图解决一个问题之前,你需要确定它...确定它的存在,并将其本地化,然后解决它...
我明白你的意思。
找一支笔和一张纸。并写下周期是如何计算的。在这个代码中。
如果条件中说打印=-1,但事实上(我检查过)打印为0,也就是说,这个例子举得不对,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的......
如果条件说打印=-1,但事实上(我检查过)打印为0,所以这个例子是不正确的,我为什么要拿笔和纸呢。而对于一个不正确的例子,是不可能给出正确答案的......
从这一行开始打印0
而不是从检查和中断 输出。
一般来说,更正确的写法是
因为数组是以零索引开始的
从这一行开始打印0
不是从休息 检查和退出。
从这一行开始打印出0,用于给定的代码...
Print(i);
问题不是为什么break不起作用,问题是为什么打印机会打印出-1......就是这样。 而且不管i开头是偶数还是奇数,它都不会打印出-1......。
尝试Close[],但指数没有给出5000以上的数据。
能否请您告诉我如何计算长周期内的ticks或candles?(例如一年)。 我试过Close[],但指数没有超过5000。
蜱虫或蜡烛会产生如此大的差异,至少可以说是可怕的......
蜱虫和蜡烛之间的区别很大,说起来很吓人...
例如,一个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有这样的功能。我必须把标准的,而不是经纪人的。
例如,一个专家顾问,如果你为它指定任何时期,它将通过测试器按点或按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留到下一次打勾。在下一次打勾时,再次检查。如果在一些尝试中,我们无法获得所需的历史数量--在这种情况下,我们将按要求处理这个错误。