//+----------------------------------------------------------------------------+//| Проверяем не установлили ли новые рекорды. |//+----------------------------------------------------------------------------+void PitaemsayObnovitRekordi(CInformaziaOPoslednemTike &InformaziaOPoslednemTike[], int NomerSimolaS_NovimTikom )
{
//--- 1. Определяем время и символ(ипользуется только для вывода информации) самого свещего тика по всем символам.//--- 2. Вычисляем разность. Время самого свежего тика по всем символам МИНУС время последнего тика по проверяемому символу.//--- 3. Обновляем глобальные строки для функции Comment.//--- 4. Обновляем глобальные строки для функции Comment если установлен рекорд.staticlong RekordRaznosti= -1;
staticlong SymmaRaznostei= 0;
staticlong 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]);
}
}
#property indicator_plots0//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mapping//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Получаем время последней котировки по символуconstdatetime 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 callreturn(rates_total);
}
//+------------------------------------------------------------------+
我发现了以下情况:有时OnTick事件会以错误的时间顺序处理ticks(很罕见,但并不罕见)。首先有一个较晚的蜱,然后有一个较早的。因此,我在我的专家顾问系统中规定,由我自己来计算刻度线和计算指标(我需要)。而我只是简单地丢弃了 "坏虱子"。
PS:我注意到这是由于我的机器人的 "奇怪 "行为(有时会发生这种情况)。你看一下图表,"在你的逻辑上"--没有开仓规则,但EA已经开仓。你开始四处打探,寻找它。我发现 "这种奇怪的虱子"。如果你删除它们,专家顾问开始 "正确 "工作,即按照我的逻辑。
请提供一段能捕捉到延迟的代码。就在这里,通过代码插入按钮。
EA本身就抓住了延误的机会。
EA本身也在抓紧时间拖延。
立即上口:你想了解终端是否滞后于发出的ticks,对吗?那么,为什么你要为所有的符号花时间,而不是为某个特定的符号花时间?你为什么不能用更简单的方式来写呢。
你想了解终端是否与刻度线滞后,对吗
?延迟1分半钟接收蜱虫是不可接受的。
说实话,我不明白SymbolInfoInteger(_Symbol,SYMBOL_TIME) 返回什么时间?最后一次报价的时间 是什么?
是的,它是。延迟1分半钟接收蜱虫的情况是不可接受的。
这是当前(在我的例子中)符号的最后一次报价的到达时间。你可以在这里看到同样的时间。
而SymbolInfoInteger() 返回指定符号的属性。
什么是报价?我昨天在文档和论坛上都看了这个功能。它的回报是什么,一点也不清楚。
一个新的报价就是一个新的价格变化。即买入和/或卖出的变化。
一个新的报价就是一个新的价格变化。即出价和/或要价的变化。
在市场概览中,也有 "成交量""最后交易 "等栏目,有人怀疑这个函数只是简单地返回了最后一次交易的.时间。
在市场概览中也有 "成交量""最后交易 "等栏目,我怀疑这个函数只是简单地返回最后一次交易的.时间。
你知道有不同的蜱虫吗?虱子被分为交易/信息虱子?
你知道有不同类型的蜱虫吗?虱子被分为交易/信息虱子?