当地时间和新勾股时间相差一分半钟。该怎么做。 - 页 3

 
pivomoe:

TimeCurrent() - 字符的最后一次打勾的时间将小于延迟时间,所以可以使用它。在第一个版本中使用当地时间并不是一个好主意。

哇...嗯,目前的版本似乎也不成功。

让我们读一下TimeCurrent()的定义。

时代

返回最后已知的服务器时间,在 "市场观察 "中选择的一个 符号的最后报价到达时间。

其中一个是指显示最频繁(为简单起见,是最多液体)的时间。而这并不是你想要的。你需要的是SymbolInfoInteger( blah-blah, SYMBOL_TIME )。它看起来像这样。

 
Alexey Kozitsyn:

哇...dac,目前的版本似乎也失败了。

阅读TimeCurrent()的定义。

它的意思是,它显示最频繁变化的时间(为了简单起见,是最多的液体)。而这并不是你所需要的。你需要的是SymbolInfoInteger( blah-blah, SYMBOL_TIME )。我想是的。

这就是我试图为prostotrader携带我所看到的问题的方式。在最后一个版本中,我通过所有的符号,并采取最后收到的tick的最大时间。

   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;
阿列克谢-科齐岑

如果有人在17:59:01收到了关于蜱虫的信息,而我在18:00也没有收到--这就是一个大问题。

而问题就在这里。问题是什么(是否有问题)?在经纪人的服务器上,它在很长一段时间内不给滴答(给每个人),或者在MT5中,它在很长一段时间内不接收。

一方面,"TimeCurrent "和最后一个tick的到达时间之间的平均时间是5毫秒,另一方面,有的tick是以几十秒的速度下降的。例如,从18岁到25岁。我已经抓到了一个延迟45秒的虱子。而这是在几十种非流动性符号上。


+到这一点,通过使用CopyTicks来获得最后一个tick,这个术语的问题就会变得更加严重。
if(CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,0,1)==1) 

不仅按次数来说比较慢,而且可能会平淡地执行一秒半。

我知道OnBookEvent只适用于一个符号的交易。

 
pivomoe:

这就是我试图为prostotrader携带我所看到的问题的方式。在最后一个版本中,我通过所有的符号,并采取最后收到的tick的最大时间。

一方面,"TimeCurrent "和最后一个tick的到达时间之间的平均时间是5毫秒,另一方面,有的tick是以几十秒的速度下降的。例如,从18岁到25岁。我已经抓到了一个延迟45秒的虱子。而这是在几十种非流动性符号上。


+到这一点,通过使用CopyTicks来获得最后一个tick,这个术语的问题就会变得更加严重。

不仅按次数来说比较慢,而且可能会平淡地执行一秒半。

我还了解到,OnBookEvent只适用于一个符号的交易。

我们到了。事实证明,你刚才已经明白,市场玻璃是为每个货币对单独形成的,所以在它的数据上进行不同货币对的交易是不可能的。

我希望你很快就会意识到,从各种图表中按一定的顺序追逐数据,由你给出,并不符合不同货币对图表中关于新点位的传入数据顺序。

因此,如果先检查欧元兑美元,最后检查BTC兑美元,而且它们之间有几十个符号,那么收到ticks的时间可能看起来像这样

18:50:00.000;18:48:59.018;18:51:00.001;18:47:59.000好等等。没有任何阴谋论,MT的或经纪人的过错。他们编程的东西就是他们得到的东西。

 
Алексей Тарабанов:

我们到了。事实证明,你刚刚意识到,玻璃是为每个货币对单独形成的,所以要在它的数据上进行交易是不可能的,不同的货币对。

我希望你很快就会意识到,从各种图表中按一定的顺序追逐数据,由你给出,并不符合不同货币对图表中关于新点位的传入数据顺序。

因此,如果先检查欧元兑美元,最后检查BTC兑美元,并且它们之间有几十个符号,那么收到ticks的时间可能看起来像这样

18:50:00.000;18:48:59.018;18:51:00.001;18:47:59.000好等等。没有任何阴谋论,MT的或经纪人的过错。我们编程的东西就是我们得到的东西。

为了通过OnBookEvent捕捉新的蜱虫,我受到了prostotrade 的启发,他写道:"这更正确"。我不使用tick本身,我只是为市场报告中的所有符号订阅它的更新。OnBookEven是用来检测只有用于更新tick的符号然后检查是否有新的刻度线,然后我看EA是否设置了新的反记录。 这实际上整个功能

void OnBookEvent(const string &symbol)
  {   
   if( MestoPoluchenieTikov == ON_TIMER ) return;
//--- Ищем индекс символа для которого полученно событие OnBookEvent
   int IndeksSimvola= -1;
   for(  int i=0;  i < KolichestvoSimvolov; i++ )
   if(  symbol == GCInformaziaOPoslednemTike[i].Simvol  ) { IndeksSimvola= i; break; }
   
   if( IndeksSimvola== -1 ){Print(__FUNCTION__,"Не удалось найти символ по которому полученно событие OnBookEvent ");ExpertRemove();return;}
   
   bool PoluchiliNoviiTick= false;
          
    //--- Получаем тик заданным в настройках способом.
   if( SposobPoluchenieTikov == SYMBOL_INFO_TICK  ) PoluchiliNoviiTick= PolychaemNoviiTickSymbolInfoTick(GCInformaziaOPoslednemTike[IndeksSimvola]);
   if( SposobPoluchenieTikov == COPY_TICKS       )  PoluchiliNoviiTick= PolychaemNoviiTickCopyTicks(GCInformaziaOPoslednemTike[IndeksSimvola]);    
       
     //--- Смотрим не установлены ли новые рекорды.  
   if(  PoluchiliNoviiTick ) PitaemsayObnovitRekordi( GCInformaziaOPoslednemTike, IndeksSimvola );                 
   
   ObnovlaemInformacyyNaGrafikeEslePora();
 
  }   
阿列克谢-塔拉巴诺夫

我希望你明白,从不同的眼镜中按一定的顺序追逐数据,由你给出,并不对应于不同货币对的眼镜中的新点位的传入数据的顺序。

据我所知,如果我没有收到使用MarketBookGet的杯子,那么我就不会搜索任何东西。也许,你只是没有看我在第二页的代码。

 
pivomoe:

我从prostotrade 那里得到了通过OnBookEvent捕捉新蜱虫的想法,他写道,这 "更正确"。我不使用tick本身,我只是在市场报告中订阅它对所有符号的更新。OnBookEven我基本上只用它来识别符号,对它的tick已经更新然后检查是否有新的刻度线,然后我看EA是否设置了新的反记录。 这实际上整个功能

据我所知,如果我使用MarketBookGet没有得到杯子,那么我就不检查任何东西。你可能只是没有看我在第二页的代码。

在处理完前一个信号之前,MT信号不会被处理。

 
pivomoe:

我从prostotrade 那里得到了通过OnBookEvent捕捉新蜱虫的想法,他写道,这 "更正确"。我不使用tick本身,我只是在市场报告中订阅它对所有符号的更新。OnBookEven我基本上只用它来识别符号,对它的tick已经更新然后检查是否有新的刻度线,然后我看EA是否设置了新的反记录。 这实际上整个功能

据我所知,如果我使用MarketBookGet没有得到杯子,那么我就不检查任何东西。你可能只是没有看我在第二页的代码。

我没有。

 
pivomoe:

你的逻辑很好,不要听信那些路人。

1.试着留下3-5个工具(其中一个是不流动的)。它能播放吗?

2.在没有其他软件的干净机器上运行它,并使用互联网。它是否会重复?

3.试着把捕捉延迟分离到不同的EA中(每个工具1个)。

如果问题不在资源方面(对分配给一个终端的线程数量有一些限制),那么这个错误应该被修复。

 
Andrey Khatimlianskii:

你的逻辑很好,不要听信那些路人。

1.尽量保留3-5个工具(其中一个是非流动性的)。它能播放吗?

2.在没有其他软件的干净机器上运行它,并使用互联网。它是否会重复?

3.试着把捕捉延迟分离到不同的EA中(每个工具1个)。

如果问题不在资源上(对分配给一个终端的线程数量有一些限制),那么这个错误应该被修复。

谢谢你的答复。今天,我在解决这个问题上取得了一点进展。在SymbolInfo()调用 之间用Sleep()命令处理。以前,我只是循环浏览整个市场概况,没有停顿。我在晚上用40个符号测试了它。如果Sleep(5),那么我就会捕捉到 "新的刻度",这应该是两秒钟前。但Sleep(10)显示了400毫秒的延迟(由于Sleep(10)( 40个符号*10)。 我试着在Vespers的4个最流动的符号上测试。使用Sleep(1)时,完全没有延迟....一切都很完美。在这里,我不明白怎么可能,如果审查中的符号很小,SymbolInfo可以在没有任何停顿的情况下使用。而如果符号很多需要使用停顿。

现在,答案出来了。

1)晚上的液体没有播放。

2)在40个字符时,即使禁用软件,也会重复。

3)我不明白你的建议。在一个终端中同时从两个EA中捕捉新的点位?

ZZZ 现在我正在挖掘调用SymbolInfo 的可行性。例如,我设法发现,即使是市场概览中的一个符号,也无法发送间隔超过3.5毫秒的新刻度线(虽然是在晚上)。

 
pivomoe:

1)在液体上,晚祷时不回放。

2) 在40个字符时,即使禁用软件,也会重复出现。

3)我不明白你在建议什么。在一个终端中同时从两个EA中捕捉新的点位?

ZZZ 现在我正在挖掘调用SymbolInfo 的可行性。例如,我设法发现,即使是市场概览中的一个符号,也不能提供超过3.5毫秒的新刻度(虽然是在晚上)。

1.尝试增加一个非流动性的

3.从一个EA中抓取一个乐器的失误。并运行40个EA。

 
pivomoe:

谢谢你的答复。今天在解决这个问题上有了一点进展。它在SymbolInfo()调用 之间用Sleep()命令处理。以前我只是在整个市场概览中循环播放,没有暂停。我在晚上用40个符号测试了它。如果Sleep(5),那么我就会捕捉到 "新的刻度",这应该是两秒钟前。但Sleep(10)显示了400毫秒的延迟(由于Sleep(10)( 40个符号*10)。 我试着在Vespers的4个最具流动性的符号上测试。使用Sleep(1)时,完全没有延迟....一切都很完美。在这里,我不明白怎么可能,如果审查中的符号很小,SymbolInfo可以在没有任何停顿的情况下使用。而如果你有大量的字符,你必须使用停顿。

请给我提供一段能捕捉到延迟的代码。就在这里,通过代码插入按钮。