Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
// Попытка поймать тик, который не попал в историю тиков.// Сравнение двух тиков.bool IsEqual( constMqlTick &Tick1, constMqlTick &Tick2 )
{
return((Tick1.time_msc == Tick2.time_msc) &&
!NormalizeDouble(Tick1.bid - Tick2.bid, _Digits) &&
!NormalizeDouble(Tick1.ask - Tick2.ask, _Digits));
}
// Проверяет наличие тика в истории.bool IsHistory( constMqlTick &Tick )
{
bool Res = false;
MqlTick Ticks[];
constint Size = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, Tick.time_msc, Tick.time_msc + 1);
for (int i = 0; !Res && (i < Size); i++)
Res = IsEqual(Tick, Ticks[i]);
return(Res);
}
voidOnTick()
{
staticMqlTick Ticks[];
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick)) // Взяли текущий тик.
{
constint Size = ArrayResize(Ticks, ArraySize(Ticks) + 1);
Ticks[Size - 1] = Tick; // Дописали его в массивMqlTick HistoryTick[1];
if (CopyTicks(_Symbol, HistoryTick, COPY_TICKS_ALL, 0, 1) > 0) // Взяли последний исторический тик
{
int i = 0;
while ((i < Size) && (Ticks[i].time_msc < HistoryTick[0].time_msc)) // Если исторический тик пришел позже проверяемого
{
if (!IsHistory(Ticks[i])) // Если в истории тиков нет проверяемого тика,
{
Alert("!IsHistory(Ticks[i]) == true");
ArrayPrint(Ticks, _Digits, NULL, i, 1, ARRAYPRINT_HEADER); // выводим его.
}
i++;
}
ArrayRemove(Ticks, 0, i); // Удалили тики, что проверили.
}
}
}
ZS 摆脱几个月来的挂念会很好。在一台有无限内存的机器上运行这个脚本。例如,我不能从6月1日开始上传蜱虫,只是一次一个字符。它只是挂起了CopyTicks,资源消耗为零。
b2699 - 已修复,谢谢。
关于交易、自动交易系统和测试交易策略的论坛
接受SL/TP订单
fxsaber, 2020.12.11 09:17
// Измеряет размер лага между приходом тика на MT5-сервер и MT5-Терминал. // Запускать на той же машине, на которой установлен MT5-сервер.
处理了100只蜱虫。服务器和终端之间的到达滞后从1到8毫秒不等。平均为4毫秒多一点。这正好等于TP订单触发的滞后,这也是这个分支的起点。
滞后本身是在MT5服务器内部。服务器->终端通道与此无关。
恳请开发商消除这种滞后。现在,在零ping的情况下,我们有一个持续的延迟ticks,不仅传入终端,而且传入服务器。特别是,订单的接受。
意外的是,我遇到了历史上缺少的一个刻度,尽管它出现在市场观察中:SymbolInfoTick。
通过MQL打印出相同的刻度,显示出一个有趣的标志。
这个旗帜是在历史上失踪的 "市场观察 "刻度线之前形成的。也许这将告诉我们问题出在哪里。
遗憾的是,这种情况有系统地发生。蜱虫历史并不包含来到终端的所有蜱虫。
意外的是,我遇到了历史上缺少的一个刻度,尽管它出现在市场观察中:SymbolInfoTick。
通过MQL打印出相同的刻度,显示出一个有趣的标志。
这个旗帜是在历史上失踪的 "市场观察 "刻度线之前形成的。也许这将告诉我们问题出在哪里。
遗憾的是,这种情况有系统地发生。蜱虫历史并不包含进入终端的所有蜱虫。
假设EA在真实账户上 做了一整天的交易,赚了钱。
第二天,我运行前一天的测试器,得到一个损失。
我不明白其中的原因,要么是经纪人给出了错误的点数,要么是其他原因......。
关于交易、自动交易系统和交易策略测试的论坛
MT5和速度在行动
fxsaber, 2021.01.04 20:51
意外的是,我遇到了历史上缺乏刻度线的问题,尽管它来到了市场观察:SymbolInfoTick。
我已经启动了一个并行的终端,其中的kc不是由终端生成的,而是由服务器上传的。
在截图中,左边的这个终端--打勾是存在的。但在另一个终端(在右边)--它不是!它是。
事实证明,终端本身并没有将所有传入的ticks放入tick历史中。如果你想拥有没有遗漏的历史,你应该添加 tkc-文件并从服务器中提取。
令人不快的错误。
这样的EA不可能抓住历史上遗漏的ticks。战斗的那个人做到了。显而易见,这些蜱虫并没有启动OnTick。
漏掉的虱子本身可能是几十毫秒的实际情况。
上面有一个带有源代码的帖子。它现在是空的。原因是什么?
我运行了一个并行的终端,其中的kc不是由终端生成的,而是由服务器上传的。
在左边这个终端的截图上--打勾是存在的。但在另一个终端(右边),它不是这样的
我在两个终端机上都运行了这个脚本。
根据你要求的时间间隔,kc可能会改变(与服务器同步)。因此,一些在请求前缺失的标记可能开始出现了。
尽管如此,仍有可能在不同的人物身上发现一些。我不得不应用一个标志过滤器,因为在不同的终端机上,它们的刻度非常不同。
以下是差异的样子。
欧元兑日元。
USDCHF .
一般来说,在实时交易时,有些点位可能不会出现在历史点位中,因为它们是在终端中,可以在服务器上。
这个错误必须得到修复。