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

 

干杯!帮助 :)

从一个指标(mt5)中复制一个tick历史,以便进一步处理。我从参考书上复制了这个算法,我只是把它改了一下。

         int     attempts = 0;
         bool    success = false;
         MqlTick tick_array[];
         datetime startCopyTime = (copyTickTime < periodStartTime) ? periodStartTime : copyTickTime;
         datetime checkPoint;

         while(attempts < 3) {
            uint start = GetTickCount();
            checkPoint = TimeCurrent();
            int received = CopyTicks(_Symbol, tick_array, COPY_TICKS_ALL, startCopyTime, ticksSizeToCopy);
            if(received != -1) {
               PrintFormat("%s: received %d ticks in %d ms", _Symbol, received, GetTickCount() - start);
               if(GetLastError() == 0) {
                  success = true;
                  break;
               } else
                  PrintFormat("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d",
                              _Symbol, received, GetTickCount() - start, _LastError);
            }
            attempts++;
         }
         if(!success) {
            PrintFormat("Ошибка! Не удалось получить %d тиков по %s с трех попыток", ticksSizeToCopy, _Symbol);
            return;
         }
         copyTickTime = checkPoint;

但我得到了一个警告,蜱虫历史是不同步的。

2020.07.12 10:07:12.092 Volumes (GBPUSD,H1)     GBPUSD: Ticks are not synchronized yet, 10103745 ticks received for 532 ms. Error=4403

而在手册中,它说。

err_history_timeout

4403

历史请求超时

船长的直觉告诉我,要同步进行抽签......这就是我想表达的意思吗?如何做到这一点?或者说,只要取消成功检查,在没有同步的情况下,也可以不受影响地工作?

 
Yevhenii Levchenko:

干杯!帮助 :)

从一个指标(mt5)中复制一个tick历史,以便进一步处理。

指标对历史数据有异步访问,而专家顾问和脚本有同步访问,或者至少MQL程序开发人员在处理数据时是这样称呼行为的

在人类语言中,当访问指标中的历史数据时,你需要退出计算周期,并在一段时间后,你需要重新应用于历史数据。

而且,在指标中多次循环调用历史记录是没有意义的--这种方法只在专家顾问和脚本中有效。

 
Igor Makanu:

在指标中是对历史数据的异步访问,在专家顾问和脚本中是同步访问,或者至少开发人员在处理数据时是这样称呼MQL程序的行为的

在人类语言中,当访问指标中的历史数据时,你需要退出计算周期,并在一段时间后,你需要重新应用于历史数据。

而且在指标中多次调用历史记录是没有意义的--这种方法只在专家顾问和脚本中有效。

谢谢你!

同步性与多线程有关吗?"蜱虫尚未同步" - 原来更像是一个警告?

 
ANDREY:

胡说八道...你不擅长逻辑,不擅长数学.....,同时你又长期成功地主持了一个主题同时渗透着逻辑和数学的论坛。

我哪里说过我不擅长逻辑了?

 
ANDREY:

我认为,一群专家所拥有的知识并不是福特本人的知识,也从未成为福特的知识。此外--他不需要这些知识,因为他称这些知识没有必要。而如果这些专家试图将他们的知识传授给福特,他将无法吸收这些知识并将其用于实际目的。为了吸收新知识,有必要对该主题有更多的了解,这与新知识有关。在上面的例子中,专家并没有向福特公司提供知识,而是向律师提供。

而在你的大脑中,在我看来,你有足够多的数学和逻辑方面的系统化知识,这套知识使你能够快速正确地对新的和缺失的信息进行搜索查询,并快速正确地解释它。我敢肯定,在你的大脑中不可能没有这样的信息,因为每天在这个论坛上花了很多时间,通过他的大脑,有很多专门与数学和逻辑相关的信息。这就像通过沉浸式学习外语。它是自动的、自发的,甚至可能是违背学习者意愿的学习。

如果有100位院士开始向我解释积分方程的计算规则,在他们 所有的数学和代数课本塞满我的脑袋之前,我是学不会的,因为在学校里,在老师开始解释积分方程之前,我就必须学习这些课本。

如果你不明白什么是变量,它有什么用,那么即使知道什么是变量也很难理解,更不用说其他甚至不是很复杂的概念。

福特并没有说会在他感兴趣的领域里教他正确的东西。他说,他身边有这么多不同领域的专家,他可以在任何时候得到他所需要的问题的答案。为什么一个经理需要知道200个专家能知道的事情,他们每个人都会在自己的领域里给出正确的答案?原则上不可能知道一切。但要在专家的帮助下迅速得到你所需要的问题的答案--这就是福特所说的,这就是我所说的参考书和使用正确的信息。而这是在一些狭窄的领域,这个资源以CodeBase和论坛的形式提供。

 
Yevhenii Levchenko:

谢谢你!

同步化与多线程有关吗?"蜱虫还没有同步",原来更多的是一种警告?

开发者暗示,同步意味着在调用 历史函数时 对历史数据的某种保证处理,但它并不保证在查询时一定会返回数据

...这里有非人类的语言))))


异步是一个查询和数据或一个错误。 错误发生后,同步开始,但同步的结束时间(或TF构建)是未知的,由于MT5的高性能,你每次都会得到一个错误,而不是同步的数据。

ZS:在MT5中,一切都很复杂,....有一个服务器,有一个终端,最后是我们的MQL程序。 当要求历史记录时,你必须同步服务器-终端,然后是终端-MQL程序,有人可能没有准备好时间框架或tick数据。

 
Igor Makanu:

开发者暗示,在调用 历史函数时, 同步是对历史数据的某种保证处理,但它不一定保证在查询时返回数据......

...这里有非人类的语言))))


异步是一个查询和数据或一个错误。 错误发生后,同步开始,但同步的结束时间(或TF构建)是未知的,由于MT5的高性能,你每次都会得到一个错误,而不是同步的数据。

ZS:在MT5中,一切都很复杂,....有一个服务器,有一个终端,最后是我们的MQL程序。 当要求历史记录时,你应该同步服务器-终端,然后是终端-MQL程序,有人可能没有准备好时间框架或tick数据。

比较容易的答案是这样的。

要在指标中等待同步,你应该在收到错误后简单地退出OnCalculate(),返回0。

在这种情况下,对历史数据的首次访问开始了数据同步的过程,现在只剩下检查其完成情况。如果接收数据出错,则返回0--因为0表示在上一次调用时已经计算过的数据量(prev_calculated),在当前调用和成功加载历史数据时,OnCalculate()将对整个历史深度进行计算(因为通过返回0,我们在上一次调用时表示没有计算过)。

 
a.lxrn:

大家下午好,请大家帮我解决这个问题,问题出在逻辑上,我今天把脑子搞坏了,我已经到了狼狈不堪的地步。

我写了一个基本的代码样本,有一个信号,如果蜡烛的收盘价超过了waggon,就有一个订单被打开。

该信号将长期保持并保持真实。 我相信你知道我的意思。

我相信你能理解我的意思。 实际上,我应该如何使买入信号打开一个订单,就这样,直到情况发生变化,收盘价 低于该波段的价格。

我可以使用旗子,但它们不会在关闭时保存订单,它打开或延迟15分钟。当开仓和平仓的条件同时为真时,就更酷了。在每一次打勾时,一个订单))))标志是如果打开订单的信号为真,而订单已打开的标志为假,那么我们就打开订单。而如果该订单的标志是真实的,该订单将不会打开)。拖延是更容易和更有效的。在订单结束后,我们设置了一个延迟。

 
Igor Makanu:

异步是一个查询和数据或一个错误,在一个错误后,同步开始,但同步结束的时间(或TF构建)是未知的,由于MT5的高性能,你每次调用都会得到一个错误,而不是同步的数据。

ZS:在MT5中,一切都很复杂,....你有一个服务器,一个终端,最后是我们的MQL程序。 当要求历史记录时,你需要同步服务器-终端,然后是终端-MQL程序,有人可能有未准备好的时间框架或tick数据。


大约得到了它...谢谢 :)

Artyom Trishkin:

像这样回答大约比较容易。

为了在一个指标中等待同步,你必须在收到错误后以返回0退出OnCalculate()。

在这种情况下,对历史数据的首次访问开始了数据同步的过程,只剩下检查其完成情况。如果接收数据出错,则返回0--因为0表示在上一次调用时已经计算过的数据量(prev_calculated),在当前调用和成功加载历史数据时,OnCalculate()将对整个历史深度进行计算(因为通过返回0,我们在上一次调用时表示没有计算过)。

更简单并不意味着更清晰 :)

切换到库存仪器,只打印了一次它们不同步的情况。随后的查询没有显示任何其他类似情况。

你能告诉我为什么测试器不显示体积吗?
 
Yevhenii Levchenko:

粗略地理解...谢谢 :)

更简单并不意味着更清晰 :)

切换到库存仪器,只打印了一次它们不同步的情况。随后的查询没有显示任何其他类似情况。

你能告诉我为什么测试器不显示体积吗?

为了保持历史数据的实际 "热 "状态,你需要每两分钟使用任何一个CopyXXX,iXXX函数来访问这些数据,例如CopyTime(),iTime(),等等。

我不知道你在测试器中没有得到什么量。有真实的和打勾的量。没有代码,就不可能在本质上回答。