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

 

我发现了以下情况:有时OnTick事件会以错误的时间顺序处理ticks(很罕见,但并不罕见)。首先有一个较晚的蜱,然后有一个较早的。因此,我在我的专家顾问系统中规定,由我自己来计算刻度线和计算指标(我需要)。而我只是简单地丢弃了 "坏虱子"。

PS:我注意到这是由于我的机器人的 "奇怪 "行为(有时会发生这种情况)。你看一下图表,"在你的逻辑上"--没有开仓规则,但EA已经开仓。你开始四处打探,寻找它。我发现 "这种奇怪的虱子"。如果你删除它们,专家顾问开始 "正确 "工作,即按照我的逻辑。

 
Alexey Kozitsyn:

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

//+----------------------------------------------------------------------------+
//|  Проверяем не установлили ли новые рекорды.                                |
//+----------------------------------------------------------------------------+
void PitaemsayObnovitRekordi(CInformaziaOPoslednemTike &InformaziaOPoslednemTike[], int NomerSimolaS_NovimTikom )
  {   
//---  1. Определяем время и символ(ипользуется только для вывода информации)  самого свещего тика по всем символам.
//---  2. Вычисляем разность. Время самого свежего тика по всем символам МИНУС время последнего тика по проверяемому символу.
//---  3. Обновляем глобальные строки для функции Comment.
//---  4. Обновляем глобальные строки для функции Comment если установлен рекорд.
   static long RekordRaznosti=        -1;
  
   static long SymmaRaznostei=       0;
   static long KolichestvoPolychenixNovixTikov= 0;
     
//---  1. Определяем время и символ(ипользуется только для вывода информации)  самого свещего тика по всем символам.
   long VremaySamogoSvegegoTikaPoVsemSimvolam= 0; 
   int IndeksSimvolaS_SamimSvegimTikom= 0;   
   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) {VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;IndeksSimvolaS_SamimSvegimTikom=i;}
   
//---  2. Вычисляем разность. Время самого свежего тика по всем символам МИНУС время последнего тика по проверяемому символу.
   long Rasnost= VremaySamogoSvegegoTikaPoVsemSimvolam - InformaziaOPoslednemTike[NomerSimolaS_NovimTikom].LastTick.time_msc;
//---    
   SymmaRaznostei+= Rasnost;
   KolichestvoPolychenixNovixTikov++;
   
//---  3. Обновляем глобальные строки для функции Comment. 
   StringConcatenate(GStrokaDlayComment[2]," Самый свежий тик ",InformaziaOPoslednemTike[IndeksSimvolaS_SamimSvegimTikom].Simvol," time_msc ",PrintMilesekond(InformaziaOPoslednemTike[IndeksSimvolaS_SamimSvegimTikom].LastTick.time_msc));
   if( ((VremaySamogoSvegegoTikaPoVsemSimvolam-StartTimeMsc)/1000) != 0 )
     {StringConcatenate(GStrokaDlayComment[3]," Средняя разность ",SymmaRaznostei/KolichestvoPolychenixNovixTikov," милесекунд. Количество полученных новых тиков ",KolichestvoPolychenixNovixTikov," Количество новых тиков в секунду ",KolichestvoPolychenixNovixTikov/((VremaySamogoSvegegoTikaPoVsemSimvolam-StartTimeMsc)/1000) );}
     
//---  4. Обновляем глобальные строки для функции Comment если установлен рекорд.    
   if( RekordRaznosti < Rasnost ) 
     {
      RekordRaznosti= Rasnost;
      GStrokaDlayComment[4]="--------------------------------------------------------------------------------";      
      StringConcatenate(GStrokaDlayComment[5],"РЕКОРДная  Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу ",RekordRaznosti," милесекундa.");
      StringConcatenate(GStrokaDlayComment[6]," Получен НОВЫЙ тик по символу                     ",InformaziaOPoslednemTike[NomerSimolaS_NovimTikom].Simvol," time_msc= ",PrintMilesekond(InformaziaOPoslednemTike[NomerSimolaS_NovimTikom].LastTick.time_msc));      
      StringConcatenate(GStrokaDlayComment[7]," ХОТЯ до этого был получeн тик                        ",InformaziaOPoslednemTike[IndeksSimvolaS_SamimSvegimTikom].Simvol," time_msc ",PrintMilesekond(InformaziaOPoslednemTike[IndeksSimvolaS_SamimSvegimTikom].LastTick.time_msc));
      StringConcatenate(GStrokaDlayComment[8]," Локальное время получения нового тика по символу.                                   ",PrintMilesekond(InformaziaOPoslednemTike[NomerSimolaS_NovimTikom].PoslednieVremayRaboti));
      StringConcatenate(GStrokaDlayComment[9]," Предпоследние Локальное время попытки получить новый тик по символу    ",PrintMilesekond(InformaziaOPoslednemTike[NomerSimolaS_NovimTikom].PredPoslednieVremayRaboti));
      
      GStrokaDlayComment[10]="--------------------------------------------------------------------------------";
      
      for( int i=2; i<12; i++ )
      Print(GStrokaDlayComment[i]);      
     }
  }  

EA本身就抓住了延误的机会。

附加的文件:
[删除]  
pivomoe:

EA本身也在抓紧时间拖延。

立即上口:你想了解终端是否滞后于发出的ticks,对吗?那么,为什么你要为所有的符号花时间,而不是为某个特定的符号花时间?你为什么不能用更简单的方式来写呢。

#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- Получаем время последней котировки по символу
   const datetime lastTime=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_TIME);
//--- Приемник данных о последнем тике
   MqlTick tick;
//--- Получение последнего тика
   if(SymbolInfoTick(_Symbol,tick))
     {
      //--- Проводим ГРУБОЕ сравнение времени последней котировки и последнего тика
      int lag=int(lastTime-tick.time);
      //---
      Print(__FILE__,": Время прихода: последней котировки = "+TimeToString(lastTime,TIME_SECONDS)+", последнего тика = "+TimeToString(tick.time,TIME_SECONDS)+". Задержка = ",lag," сек.");
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
老实说,我不明白SymbolInfoInteger(_Symbol,SYMBOL_TIME) 返回什么时间最后一次报价的时间 是什么?
Alexey Kozitsyn:

你想了解终端是否与刻度线滞后,对吗

?延迟1分半钟接收蜱虫是不可接受的。

[删除]  
pivomoe:
说实话,我不明白SymbolInfoInteger(_Symbol,SYMBOL_TIME) 返回什么时间最后一次报价的时间 是什么?

是的,它是。延迟1分半钟接收蜱虫的情况是不可接受的。

这是当前(在我的例子中)符号的最后一次报价的到达时间。你可以在这里看到同样的时间。

SymbolInfoInteger() 返回指定符号的属性。

 
什么是报价?我昨天在文档和论坛上都看了这个功能。它的回报是什么,一点也不清楚。
[删除]  
pivomoe:
什么是报价?我昨天在文档和论坛上都看了这个功能。它的回报是什么,一点也不清楚。

一个新的报价就是一个新的价格变化。即买入和/或卖出的变化。

 
Alexey Kozitsyn:

一个新的报价就是一个新的价格变化。即出价和/或要价的变化。

在市场概览中,也有 "成交量""最后交易 "等栏目,有人怀疑这个函数只是简单地返回了最后一次交易的.时间。

[删除]  
pivomoe:

在市场概览中也有 "成交量""最后交易 "等栏目,我怀疑这个函数只是简单地返回最后一次交易的.时间。

你知道有不同的蜱虫吗?虱子被分为交易/信息虱子?

 
Alexey Kozitsyn:

你知道有不同类型的蜱虫吗?虱子被分为交易/信息虱子?

我知道,你想说什么?