ZS Es wäre gut, die seit Monaten andauernden Hängepartien loszuwerden. Führen Sie dieses Skript auf einem Rechner mit unendlich viel RAM aus. Ich kann zum Beispiel keine Zecken vom 1. Juni hochladen, sondern nur ein Zeichen nach dem anderen. Es hängt einfach CopyTicks mit null Ressourcenverbrauch.
// Измеряет размер лага между приходом тика на MT5-сервер и MT5-Терминал.// Запускать на той же машине, на которой установлен MT5-сервер.
Es wurden 100 Zecken verarbeitet. Die Ankunftszeit zwischen dem Server und dem Terminal variiert zwischen einer und acht Millisekunden. Der Durchschnitt liegt bei etwas mehr als vier Millisekunden. Dies entspricht gerade der Verzögerung bei der Auslösung der TP-Bestellung, mit der dieser Zweig begann.
Der Lag selbst befindet sich innerhalb des MT5-Servers. Der Kanal Server->Terminal hat damit nichts zu tun.
Große Bitte an die Entwickler, diese Verzögerung zu beseitigen. Mit Null Pings haben wir nun eine konstante Verzögerung von Ticks, die nicht nur am Terminal, sondern auch am Server ankommen. Insbesondere die Annahme von Aufträgen.
Diese Flagge wurde an dem Tick in der Historie gebildet, der unmittelbar vor dem fehlenden Market Watch-Tick lag. Vielleicht erfahren wir dadurch, wo das Problem liegt.
ZS Leider geschieht dies systematisch. Der Zeckenverlauf enthält nicht alle Zecken, die zum Terminal kommen.
Unerwartet stieß ich auf einen Tick, der in der Historie fehlte, obwohl er in Market Watch auftauchte: SymbolInfoTick.
Der Ausdruck desselben Ticks durch MQL zeigt eine interessante Flagge.
Diese Flagge wurde an dem Tick in der Historie gebildet, der unmittelbar vor dem fehlenden Market Watch-Tick lag. Vielleicht erfahren wir dadurch, wo das Problem liegt.
ZS Leider geschieht dies systematisch. Der Zeckenverlauf enthält nicht alle Zecken, die zum Terminal kommen.
Sagen wir, der EA handelt einen ganzen Tag auf einem echten Konto und erzielt einen Gewinn.
Am nächsten Tag lasse ich den Tester am Vortag laufen und erhalte einen Verlust.
Ich verstehe den Grund nicht, entweder gibt der Broker die falschen Ticks oder etwas anderes...
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Unerwartet stieß ich auf ein fehlendes Tick in der Geschichte, trotz der Tatsache, dass es auf den Market Watch kam: SymbolInfoTick.
Ich habe ein paralleles Terminal gestartet, wobei tkc nicht vom Terminal erzeugt, sondern vom Server hochgeladen wurde.
Auf dem Screenshot ist dieses Terminal auf der linken Seite zu sehen - das Häkchen ist vorhanden. Aber auf dem anderen Terminal (rechts) - ist es nicht!
Es hat sich herausgestellt, dass das Terminal selbst nicht alle eingehenden Ticks in den Tickverlauf aufnimmt. Wenn Sie den Verlauf ohne Auslassungen haben möchten, sollten Sie die tkc-Datei hinzufügen und vom Server abrufen.
// Попытка поймать тик, который не попал в историю тиков.// Сравнение двух тиков.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); // Удалили тики, что проверили.
}
}
}
Ein solcher EA könnte keine in der Vergangenheit verpassten Ticks auffangen. Das war der Kampf. Offensichtlich lösen diese Ticks den OnTick nicht aus.
Die verpassten Ticks selbst können einige zehn Millisekunden lang aktuell sein.
Je nachdem, welches Intervall Sie anfordern, kann sich tkc ändern (Synchronisierung mit dem Server). Daher kann es sein, dass einige Häkchen, die vor der Anfrage fehlten, jetzt wieder vorhanden sind.
Trotzdem war es möglich, einige von ihnen an verschiedenen Zeichen zu erkennen. Ich musste einen Flaggenfilter anwenden, da sie für Zecken auf verschiedenen Terminals sehr unterschiedlich sind.
So sehen die Unterschiede aus.
EURJPY.
USDCHF .
Beim Handel in Echtzeit kann es vorkommen, dass einige Ticks nicht in der Tick-Historie erscheinen, da sie sich im Terminal befinden und auf dem Server sein können.
ZS Es wäre gut, die seit Monaten andauernden Hängepartien loszuwerden. Führen Sie dieses Skript auf einem Rechner mit unendlich viel RAM aus. Ich kann zum Beispiel keine Zecken vom 1. Juni hochladen, sondern nur ein Zeichen nach dem anderen. Es hängt einfach CopyTicks mit null Ressourcenverbrauch.
b2699 - behoben, danke.
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
Annahme von SL/TP-Aufträgen
fxsaber, 2020.12.11 09:17
// Измеряет размер лага между приходом тика на MT5-сервер и MT5-Терминал. // Запускать на той же машине, на которой установлен MT5-сервер.Es wurden 100 Zecken verarbeitet. Die Ankunftszeit zwischen dem Server und dem Terminal variiert zwischen einer und acht Millisekunden. Der Durchschnitt liegt bei etwas mehr als vier Millisekunden. Dies entspricht gerade der Verzögerung bei der Auslösung der TP-Bestellung, mit der dieser Zweig begann.
Der Lag selbst befindet sich innerhalb des MT5-Servers. Der Kanal Server->Terminal hat damit nichts zu tun.
Große Bitte an die Entwickler, diese Verzögerung zu beseitigen. Mit Null Pings haben wir nun eine konstante Verzögerung von Ticks, die nicht nur am Terminal, sondern auch am Server ankommen. Insbesondere die Annahme von Aufträgen.
Unerwartet stieß ich auf einen Tick, der in der Historie fehlte, obwohl er in Market Watch auftauchte: SymbolInfoTick.
Der Ausdruck desselben Ticks durch MQL zeigt eine interessante Flagge.
Diese Flagge wurde an dem Tick in der Historie gebildet, der unmittelbar vor dem fehlenden Market Watch-Tick lag. Vielleicht erfahren wir dadurch, wo das Problem liegt.
ZS Leider geschieht dies systematisch. Der Zeckenverlauf enthält nicht alle Zecken, die zum Terminal kommen.
Unerwartet stieß ich auf einen Tick, der in der Historie fehlte, obwohl er in Market Watch auftauchte: SymbolInfoTick.
Der Ausdruck desselben Ticks durch MQL zeigt eine interessante Flagge.
Diese Flagge wurde an dem Tick in der Historie gebildet, der unmittelbar vor dem fehlenden Market Watch-Tick lag. Vielleicht erfahren wir dadurch, wo das Problem liegt.
ZS Leider geschieht dies systematisch. Der Zeckenverlauf enthält nicht alle Zecken, die zum Terminal kommen.
Sagen wir, der EA handelt einen ganzen Tag auf einem echten Konto und erzielt einen Gewinn.
Am nächsten Tag lasse ich den Tester am Vortag laufen und erhalte einen Verlust.
Ich verstehe den Grund nicht, entweder gibt der Broker die falschen Ticks oder etwas anderes...
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
MT5 und Geschwindigkeit in Aktion
fxsaber, 2021.01.04 20:51
Unerwartet stieß ich auf ein fehlendes Tick in der Geschichte, trotz der Tatsache, dass es auf den Market Watch kam: SymbolInfoTick.
Ich habe ein paralleles Terminal gestartet, wobei tkc nicht vom Terminal erzeugt, sondern vom Server hochgeladen wurde.
Auf dem Screenshot ist dieses Terminal auf der linken Seite zu sehen - das Häkchen ist vorhanden. Aber auf dem anderen Terminal (rechts) - ist es nicht!
Es hat sich herausgestellt, dass das Terminal selbst nicht alle eingehenden Ticks in den Tickverlauf aufnimmt. Wenn Sie den Verlauf ohne Auslassungen haben möchten, sollten Sie die tkc-Datei hinzufügen und vom Server abrufen.
Unangenehmer Fehler.
Ein solcher EA könnte keine in der Vergangenheit verpassten Ticks auffangen. Das war der Kampf. Offensichtlich lösen diese Ticks den OnTick nicht aus.
Die verpassten Ticks selbst können einige zehn Millisekunden lang aktuell sein.
Oben war ein Beitrag mit dem Quellcode. Sie ist jetzt leer. Der Grund?
Ich habe ein paralleles Terminal laufen lassen, in dem die tkc nicht vom Terminal erzeugt, sondern vom Server hochgeladen wurde.
Auf dem Screenshot dieses Terminals auf der linken Seite ist das Häkchen vorhanden. Aber auf dem anderen Terminal (rechts) ist das nicht der Fall!
Ich habe dieses Skript auf beiden Terminals ausgeführt.
Je nachdem, welches Intervall Sie anfordern, kann sich tkc ändern (Synchronisierung mit dem Server). Daher kann es sein, dass einige Häkchen, die vor der Anfrage fehlten, jetzt wieder vorhanden sind.
Trotzdem war es möglich, einige von ihnen an verschiedenen Zeichen zu erkennen. Ich musste einen Flaggenfilter anwenden, da sie für Zecken auf verschiedenen Terminals sehr unterschiedlich sind.
So sehen die Unterschiede aus.
EURJPY.
USDCHF .
Beim Handel in Echtzeit kann es vorkommen, dass einige Ticks nicht in der Tick-Historie erscheinen, da sie sich im Terminal befinden und auf dem Server sein können.
Dieser Fehler muss behoben werden.