RefreshRates()的更新内容 - 页 7

 
Mikhail Nazarenko:

谢谢,这很有道理。在通过iTime访问未更新的时间序列后,终端是否真的会出现4066错误?我遇到过iClose给出未更新的信息而不是零。

这就是问题所在,这就是导致你搭车的关键点。

Error 4066 - 当这个TF没有历史记录时,它还没有准备好,你需要联系服务器。

而当你已经有了它,但它只有在你访问它时才被更新,即不给出错误,只是给你现在是什么,并与请求同时开始更新时间序列。

如果你不经常和不定期地 访问它,有时你会得到旧的东西。如果你定期要求每个必要的TF,直到每个勾--那么一切都没问题。

如果该TF的图表是开放的,它将定期在图表上更新。顺便说一下,如果不是定期访问,可能有可能从EA中打开所有必要的TF的图表,但这是不可靠的,因为他们可以手动关闭/改变TFs。

 
Evgeniy Chumakov:


为什么要在[i + 0]上加0?

我用1和2,1或2代替了零。我留下了0,也就是1巴。我没有清理代码,这对逻辑并不重要。

 
Aleksey Mavrin:

这就是重点,这就是导致你被卡住的关键点。

错误4066是当这个TF没有历史记录时,它还没有准备好,你需要联系服务器。

而当你已经有了它,但它只在你访问它时才被更新,即不给出错误,只给你现在是什么,并与请求同时开始更新时间序列。

如果你不经常和不定期地 访问它,有时你会得到垃圾。如果你定期要求每个必要的TF,直到每个勾--那么一切都没问题。

如果该TF的图表是开放的,它将定期在图表上更新。顺便说一下,如果不是定期访问,可能有可能从EA中打开所有必要的TFs图表,但这并不可靠,因为他们可以手动关闭/更改TFs。

当应该出现错误时,它又给出了旧的数据,太好了。这也是经纪人喜欢MT4而不转到MT5的原因之一))。

即在每一次打勾或睡眠时要求正确的时间框架,直到出现错误4066。我说对了吗?

 
Mikhail Nazarenko:

当它应该得到一个错误时,它又给出了旧的数据,太好了。这也是经纪人喜欢MT4而不转到MT5的原因之一))。

即在每一次打勾或睡眠时要求正确的时间框架,直到出现错误4066。我说对了吗?

几乎。这里有一个现成的功能。

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
在OnTick()中插入它,如果它返回真,则可以访问eTF时间框架,数据有效。
 
Mikhail Nazarenko:

当它应该得到一个错误时,它又给出了旧的数据,太好了。这也是经纪人喜欢MT4而不转到MT5的原因之一))。

即在每一次打勾或睡眠时 要求正确的时间框架,直到出现错误4066。我说对了吗?

当然,最好只在OnInit中使用sleep,而且只有在指标中才有必要。在其他情况下,正如Igor上面提到的,OnTick已经足够了。

根据不同的任务,你可以操纵你的方式来选择最佳方案。通常情况下,当检查是否有一个新的条形图时,iTime已经在所有使用的时间段的每一个刻度 上被访问,这足以使它们保持最新。

如果你不是在每次打勾时都使用伊戈尔的函数,而是在某些罕见的情况下使用,也会有滞后现象。
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.
 
Aleksey Mavrin:

当然,sleep最好只在OnInit中使用,而且只在指标中需要它。在 其他情况下,使用OnTick就可以了,正如Igor上面提到的。

根据不同的任务,你可以操纵你的方式来选择最佳方案。通常情况下,当检查是否有新的条形图时,iTime在所有使用的时间段的每一个点 都被调用,这足以使它们保持最新。

s.e.而如果伊戈尔的函数不是在每个tick上使用,而是在一些罕见的情况下使用,也会出现不同步的情况。

睡眠在指标中不起作用

 
Ihor Herasko:

几乎。这里有一个现成的函数。

在OnTick()中插入它,如果它返回真,你就可以访问eTF时间框架,数据是有效的。

这是非常简单的。谢谢你。为什么开发人员不在iClose功能 等的手册中描述这一点?或者纠正MT4报价更新的逻辑, 以免产生阴谋论。

 
Mikhail Nazarenko:

当应该出现错误时,它又给出了旧的数据,太好了。这也是经纪人喜欢MT4而不转到MT5的原因之一))。

即在每一次打勾或睡眠时要求正确的时间框架,直到出现错误4066。我说对了吗?

在MT5中,这要困难得多。

在F4中,只需每2分钟向所有使用的TF请求iTime,所有的数据都将是实际的。

 
Mikhail Nazarenko:

一切都简单得令人惊叹。谢谢你。为什么开发人员不在iClose功能 等手册中描述一下?或者纠正MT4报价更新的逻辑, 以免造成阴谋论。

因为实际上所有的EA都会在每一个tick上对正确的条件进行检查,并且一切都会自行更新。

 
Vitaly Muzichenko:

睡眠在指标中不起作用

如果你真的需要它,它是有效的:)

void SleepA(int msec)
 {
   uint now=GetTickCount();
   while (GetTickCount()<(now+msec))
      {
      for(int i=0;i<10000;i++)
         {
          double f=1;
          f*=f;
          f+=f;
         }
       }
   return;
 }  
Andrey Khatimlianskii:

在MT5中,情况要复杂得多。

在4中,每2分钟向所有使用的TF请求iTime 就足够了,所有的数据将是实际的。

正是如此