[SERVICE DESK]在获取计时器中的高级TF的时间时出错! - 页 5 123456789101112...16 新评论 Alexey Navoykov 2018.09.21 15:24 #41 Vitaly Gorbunov: iBarShift方法可以让你找到历史上的漏洞,但你必须每隔一段时间检查历史。我为自己写了一个程序来做这件事,之后我就忘记了MtF程序的差距。 这不是一个检测 "洞 "的问题。 这个人想得到历史上的最后一栏。 而这不一定是当前时间的一栏。 [删除] 2018.09.21 15:27 #42 Vitaly Gorbunov: 数据加载时出现了4066的错误,然后就是methaquotovs的故障,很可能是收到的数据是针对这种情况处理的,错误没有被发明。而在这一点上,一切都有意义。如果一个错误 "没有被发明",这并不意味着它不存在。 [删除] 2018.09.21 15:30 #43 Alexey Navoykov: 这不是一个检测 "漏洞 "的问题。 这个人想得到历史上的最后一个时间段。 而这不一定是当前的时间段。这与iBarShift()无关。它发送的错误与iTime()和SeriesInfoInteger()相同。这里的拐杖是在比较初始化期间获得的时间,然后将其与计时器的时间进行比较。这就是允许在加载终端时获得正确的实际数据,而不是IBarShift()。 是的,如果时间是15:00:45(例如),而15:00的条形图上还没有刻度,如果最后一个小时的条形图开放时间是 14:00--我想一切都正确。而如果系统返回13:00--那就是一个问题。 Ihor Herasko 2018.09.21 17:34 #44 Alexey Kozitsyn:1.伊戈尔,你看了代码了吗?在OnInit()中,我在哪里可以得到一些东西? 在你的案例中,一个或几个OnTimer调用在OnInit()之后被执行。目前还没有OnCalculate()事件。 2.什么检查?哪里写着指标必须至少使用 一次OnCalculate()才能正确工作?这里我们需要了解终端的逻辑。在将指标连接到图表时,OnInit()被立即调用。当启动终端时,指标与图表的连接是在图表窗口创建后立即进行的。此刻,终端甚至还没有向服务器发送请求。 第一个OnCalculate()是在读取本地可用的报价后调用的。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当寻址到Time[0]时,指标会从数组中出来。因此,你最好使用iTime功能和其他类似功能。 第二个和下一个OnCalculate()发生在历史记录加载时或真正的ticks到达时。 Igor Makanu 2018.09.21 17:59 #45 Ihor Herasko: 第一个OnCalculate()在读取本地可用报价后被调用。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当引用Time[0]时,指标会从数组中出来。因此,你最好使用iTime功能或类似功能。我想我们说的是MQL5,OHLC的准备与MT4不同。 长期以来,我一直在根据一个模板来写指标。 int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int i,limit; if(prev_calculated==0) { limit=rates_total-1; //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории } else limit=rates_total-prev_calculated+1; for(i=limit;i>=0;i--) //---- Основной цикл расчета { } return(rates_total); } 我从来没有在MT4的OHLC数组 上遇到过 "指标崩溃",我认为MT4在第一次准备好图表之前不会运行OnCalculate(),如果历史记录被加载,我没有检查过,但是prev_calculated==0,在MT5会像你写的那样 - 你需要额外检查OHLC数据是否已经被准备好了。 [删除] 2018.09.21 18:26 #46 Ihor Herasko: 在你的例子中,OnTimer的一个或几个调用是在OnInit()之后执行的。目前还没有OnCalculate()事件。 在这里,你需要了解终端的逻辑。在将指标连接到图表时,OnInit()被立即调用。当启动终端时,指标与图表的连接是在图表窗口创建后立即进行的。此刻,终端甚至还没有向服务器发送请求。 第一个OnCalculate()是在本地读取可用的报价后调用的。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当寻址到Time[0]时,指标会从数组中出来。因此,最好使用iTime功能或类似功能。 第二个和下一个OnCalculate()发生在历史记录加载时或真正的ticks到达时。你有什么建议来解决这个问题(在你看来是有的)?等到OnCalculate()被调用 1-2次? Igor Makanu 2018.09.21 18:41 #47 Alexey Kozitsyn:你有什么建议来解决这个问题(在你看来是有的)?等到OnCalculate()被调用 1-2次?你可以尝试将prev_calculated==0 的值复制到全局范围的一个变量中,然后在OnTimer()中查看指标是否已经被计算。OnCalculate() - 在任何情况下都会被计算出来,我怀疑如果TF数据没有准备好,那么return(rate_total)将返回0,这将在下一次调用OnCalculate()时表明prev_calculated==0,大约如此。 void OnTimer(){ if(Global_prev_calculated==0)return; } [删除] 2018.09.21 18:56 #48 Igor Makanu:你可以尝试将prev_calculated==0 的值复制到全局范围的一个变量中,然后在OnTimer()中查看指标是否被计算出来;我在上面写道,我从未在MT4中看到过任何计算错误 的错误。OnCalculate() - 在任何情况下都会被计算,我怀疑如果TF数据没有准备好,那么return(rate_total)将返回0,这将是在下一次调用OnCalculate()时的一个标志prev_calculated==0看来,最可靠的解决方案是等待OnCalculate()的调用,并强制检查与交易服务器的连接。如果我们不检查连接(IsConnected()),那么即使在终端加载的OnCalculate()中,我们也会得到它。 2018.09.21 23:45:27.128 test_isNewDayInOnCalculate_iBarShift() EURGBP.e,M1: test_isNewDayInOnCalculate_iBarShift().mq4: Актуальное время открытия бара М15 = 2018.09.21 21:30. Ошибка #0 2018.09.21 23:45:25.990 test_isNewDayInOnCalculate_iBarShift() EURGBP.e,M1: initialized 2018.09.21 23:45:25.975 Custom indicator test_isNewDayInOnCalculate_iBarShift() EURGBP.e,M1: loaded successfully 然而,它并没有消除所有问题。 1.为什么在IsConnected()的文档中没有说必须在OnCalculate()中从高级TF接收数据(至少是)之前调用它? 2.为什么OnTimer()中的IsConnected()实际上不起作用?与贸易服务器建立连接的事实不是应该告诉我们可以获得数据吗? 3.一旦我们与交易服务器建立了连接,并试图在OnTimer()中接收数据,如果函数iTime()、iBarShift()、SeriesInfoInteger()以及与之类似的函数从该特定交易服务器获取的数据尚未同步,难道不应该返回错误?否则,它看起来是无稽之谈,就像我们返回一次错误4066,然后以任何你想要的方式使用现在的数据。 Igor Makanu 2018.09.21 19:12 #49 Alexey Kozitsyn: 然而,这并不能消除所有问题。 1.为什么IsConnected()的文档没有说它必须在OnCalculate()中从高级TF接收数据(至少是)之前调用? 2.为什么OnTimer()中的IsConnected()实际上不起作用?与贸易服务器建立连接的事实不是应该告诉我们可以获得数据吗? 3.一旦我们与交易服务器建立了连接,并试图在OnTimer()中接收数据,如果函数iTime()、iBarShift()、SeriesInfoInteger()以及与之类似的函数从该特定交易服务器获取的数据尚未同步,难道不应该返回错误?否则就显得很无厘头,就像我们返回一次4066错误,然后按照你的方式使用现有的数据。1.好吧,没有人取消对历史数据的指标调用 的情况,如果你需要在线工作,那么检查连接,如果没有,或者说不重要,那么我的版本的模板就可以工作。 IsConnected()函数组实际上有点棘手,它们有时会跨越IsTradeContextBusy()和IsConnected()本身,以及IsTradeAllowed()...我认为他们在服务器端作弊,在新闻时间断开终端或其他一些操作。 2,3. 工作,但你忘了GetLastError()在调用后会重置其状态,也许更新GetLastError()的状态需要将控制权转移到终端,也许终端在你从定时器调用之前没有时间在GetLastError()中重新设置状态IsConnected()....我认为OnTimer()函数不是用来接收数据的。"MQL4参考/状态检查 - OnTimer()将被调用,但终端环境的变量不会被更新,而onCalculate()它保证在打勾时从终端准备所有数据 [删除] 2018.09.21 19:26 #50 Igor Makanu:1.嗯,没有人取消在历史数据上调用指标 的情况...... 2,3.它是有效的,但你忘了GetLastError()在调用后会重置其状态,也许为了更新GetLastError()的状态,需要将控制权传递给终端,也许终端没有时间在你从定时器....,在GetLastError()中重新设置状态IsConnected()我认为OnTimer()函数不是用来接收数据的。"MQL4参考/状态检查 - OnTimer()将被调用,但终端环境的变量不会被更新,保证终端在打勾时准备所有的数据-OnCalculate()。1.你认为如果第0条的时间不正确,其余的历史会有正确的时间吗?) 2,3.如果数据访问函数没有足够的时间来设置一些有意义的错误--让它以某种方式报告,但肯定不是通过返回错误代码=0(没有错误)。其余的 "也许 "只是猜测。而没有证据就没有什么可谈的。 OnTimer()函数的目的不是为了获取数据... 没有评论。 OnTimer()将被调用,但终端环境变量不一定被更新。 我们需要4066号错误的原因是什么? 123456789101112...16 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
iBarShift方法可以让你找到历史上的漏洞,但你必须每隔一段时间检查历史。我为自己写了一个程序来做这件事,之后我就忘记了MtF程序的差距。
数据加载时出现了4066的错误,然后就是methaquotovs的故障,很可能是收到的数据是针对这种情况处理的,错误没有被发明。而在这一点上,一切都有意义。
如果一个错误 "没有被发明",这并不意味着它不存在。
这不是一个检测 "漏洞 "的问题。 这个人想得到历史上的最后一个时间段。 而这不一定是当前的时间段。
这与iBarShift()无关。它发送的错误与iTime()和SeriesInfoInteger()相同。这里的拐杖是在比较初始化期间获得的时间,然后将其与计时器的时间进行比较。这就是允许在加载终端时获得正确的实际数据,而不是IBarShift()。
是的,如果时间是15:00:45(例如),而15:00的条形图上还没有刻度,如果最后一个小时的条形图开放时间是 14:00--我想一切都正确。而如果系统返回13:00--那就是一个问题。
1.伊戈尔,你看了代码了吗?在OnInit()中,我在哪里可以得到一些东西?
在你的案例中,一个或几个OnTimer调用在OnInit()之后被执行。目前还没有OnCalculate()事件。
2.什么检查?哪里写着指标必须至少使用 一次OnCalculate()才能正确工作?
这里我们需要了解终端的逻辑。在将指标连接到图表时,OnInit()被立即调用。当启动终端时,指标与图表的连接是在图表窗口创建后立即进行的。此刻,终端甚至还没有向服务器发送请求。
第一个OnCalculate()是在读取本地可用的报价后调用的。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当寻址到Time[0]时,指标会从数组中出来。因此,你最好使用iTime功能和其他类似功能。
第二个和下一个OnCalculate()发生在历史记录加载时或真正的ticks到达时。
第一个OnCalculate()在读取本地可用报价后被调用。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当引用Time[0]时,指标会从数组中出来。因此,你最好使用iTime功能或类似功能。
我想我们说的是MQL5,OHLC的准备与MT4不同。
长期以来,我一直在根据一个模板来写指标。
我从来没有在MT4的OHLC数组 上遇到过 "指标崩溃",我认为MT4在第一次准备好图表之前不会运行OnCalculate(),如果历史记录被加载,我没有检查过,但是prev_calculated==0,在MT5会像你写的那样 - 你需要额外检查OHLC数据是否已经被准备好了。
在你的例子中,OnTimer的一个或几个调用是在OnInit()之后执行的。目前还没有OnCalculate()事件。
在这里,你需要了解终端的逻辑。在将指标连接到图表时,OnInit()被立即调用。当启动终端时,指标与图表的连接是在图表窗口创建后立即进行的。此刻,终端甚至还没有向服务器发送请求。
第一个OnCalculate()是在本地读取可用的报价后调用的。在一些罕见的情况下,会发生当地没有任何东西的情况。在这种情况下,当寻址到Time[0]时,指标会从数组中出来。因此,最好使用iTime功能或类似功能。
第二个和下一个OnCalculate()发生在历史记录加载时或真正的ticks到达时。
你有什么建议来解决这个问题(在你看来是有的)?等到OnCalculate()被调用 1-2次?
你有什么建议来解决这个问题(在你看来是有的)?等到OnCalculate()被调用 1-2次?
你可以尝试将prev_calculated==0 的值复制到全局范围的一个变量中,然后在OnTimer()中查看指标是否已经被计算。OnCalculate() - 在任何情况下都会被计算出来,我怀疑如果TF数据没有准备好,那么return(rate_total)将返回0,这将在下一次调用OnCalculate()时表明prev_calculated==0,大约如此。
你可以尝试将prev_calculated==0 的值复制到全局范围的一个变量中,然后在OnTimer()中查看指标是否被计算出来;我在上面写道,我从未在MT4中看到过任何计算错误 的错误。OnCalculate() - 在任何情况下都会被计算,我怀疑如果TF数据没有准备好,那么return(rate_total)将返回0,这将是在下一次调用OnCalculate()时的一个标志prev_calculated==0
看来,最可靠的解决方案是等待OnCalculate()的调用,并强制检查与交易服务器的连接。如果我们不检查连接(IsConnected()),那么即使在终端加载的OnCalculate()中,我们也会得到它。
然而,它并没有消除所有问题。
1.为什么在IsConnected()的文档中没有说必须在OnCalculate()中从高级TF接收数据(至少是)之前调用它?
2.为什么OnTimer()中的IsConnected()实际上不起作用?与贸易服务器建立连接的事实不是应该告诉我们可以获得数据吗?
3.一旦我们与交易服务器建立了连接,并试图在OnTimer()中接收数据,如果函数iTime()、iBarShift()、SeriesInfoInteger()以及与之类似的函数从该特定交易服务器获取的数据尚未同步,难道不应该返回错误?否则,它看起来是无稽之谈,就像我们返回一次错误4066,然后以任何你想要的方式使用现在的数据。
然而,这并不能消除所有问题。
1.为什么IsConnected()的文档没有说它必须在OnCalculate()中从高级TF接收数据(至少是)之前调用?
2.为什么OnTimer()中的IsConnected()实际上不起作用?与贸易服务器建立连接的事实不是应该告诉我们可以获得数据吗?
3.一旦我们与交易服务器建立了连接,并试图在OnTimer()中接收数据,如果函数iTime()、iBarShift()、SeriesInfoInteger()以及与之类似的函数从该特定交易服务器获取的数据尚未同步,难道不应该返回错误?否则就显得很无厘头,就像我们返回一次4066错误,然后按照你的方式使用现有的数据。
1.好吧,没有人取消对历史数据的指标调用 的情况,如果你需要在线工作,那么检查连接,如果没有,或者说不重要,那么我的版本的模板就可以工作。 IsConnected()函数组实际上有点棘手,它们有时会跨越IsTradeContextBusy()和IsConnected()本身,以及IsTradeAllowed()...我认为他们在服务器端作弊,在新闻时间断开终端或其他一些操作。
2,3. 工作,但你忘了GetLastError()在调用后会重置其状态,也许更新GetLastError()的状态需要将控制权转移到终端,也许终端在你从定时器调用之前没有时间在GetLastError()中重新设置状态IsConnected()....我认为OnTimer()函数不是用来接收数据的。"MQL4参考/状态检查 - OnTimer()将被调用,但终端环境的变量不会被更新,而onCalculate()它保证在打勾时从终端准备所有数据
1.嗯,没有人取消在历史数据上调用指标 的情况......
2,3.它是有效的,但你忘了GetLastError()在调用后会重置其状态,也许为了更新GetLastError()的状态,需要将控制权传递给终端,也许终端没有时间在你从定时器....,在GetLastError()中重新设置状态IsConnected()我认为OnTimer()函数不是用来接收数据的。"MQL4参考/状态检查 - OnTimer()将被调用,但终端环境的变量不会被更新,保证终端在打勾时准备所有的数据-OnCalculate()。
1.你认为如果第0条的时间不正确,其余的历史会有正确的时间吗?)
2,3.如果数据访问函数没有足够的时间来设置一些有意义的错误--让它以某种方式报告,但肯定不是通过返回错误代码=0(没有错误)。其余的 "也许 "只是猜测。而没有证据就没有什么可谈的。
OnTimer()函数的目的不是为了获取数据...
没有评论。
OnTimer()将被调用,但终端环境变量不一定被更新。