Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Überwachung unabhängig von OnTick-Funktion (http://www.expert-advisor.com/forum/showthread.php?t=7206)

Tagtranpler 23.06.22 17:31

Überwachung unabhängig von OnTick-Funktion
 
Hallo zusammen,

ich möchte eröffnete Positionen von einem EA überwachen lassen. Diese Überwachung soll jedoch schneller erfolgen, als es mit der OnTick-Funktion möglich ist.

Weiß jemand, wie sowas programmiert werden kann?

Vielen Dank im Voraus.


Viele Grüße

TraderMike 24.06.22 10:19

Nicht in MQl4

in MQl5 gibt es PositionGetInteger(POSITION_TIME_MSC) + date + time damit kann man weiterarbeiten.

Aber ohne viel Aufwand geht das nicht! Da sogar in der faulen Asia Session locker 2-6 Ticks pro Sekunde im Terminal aufschlagen.

Da ein Tick auch als Auslöser dient (sonst Terminal timeout!), muss mit einer EA Pause zwischen den Ticks gearbeitet werden - aber eigentlich stellt das den Sinn der Überwachung in Frage, nur Überwachung ohne nachfolgende Aktivität macht sowieso keinen Sinn, da man nicht weiß wie der nächste Tick (OHLC) ist/wird somit eine nachfolgende Aktivität nur mehr rein fiktiv ist und damit für reales Trading wertlos....

Fazit: Es gibt keine sinnvolle Lösung, damit ist die Strategie/Überwachung zu überdenken! Im HFT Trading gibt es Lösungen, aber nicht in einem Retail Programm

Mike

traderdoc 24.06.22 13:44

Ja, es gibt die Möglichkeit Ticks zu simulieren bis in den Millisekundenbereich mit der Timerfunktiion:

Code:

bool  EventSetMillisecondTimer(
  int  milliseconds      // Die Anzahl der Millisekunden
  );

d.h. die theoretisch kleinste Zeitperiode wäre dann 1 ms. Aber lt. Hilfetext:
"In Echtzeitmodus werden Timer-Ereignisse nicht mehr als 1 Mal in 10-16 Millisekunden aufgrund von Hardware-Einschränkungen generiert."

traderdoc

TraderMike 24.06.22 16:50

Interessant, da habe ich wohl was vergessen. :)
Wenn es das/ähnliches für MT5 gibt, gibt das natürlich auch für MT4.
Eine reale Anwendung ist da nicht wirklich gegeben, da es einen Sync mit einer Atomzeituhr benötigt, Windows (TimeLocal()) hat eine "Genauigkeit" von ~30 Sekunden.

Theoretisch würde es auch mit GetMicrosecondCount() gehen
https://docs.mql4.com/common/getmicrosecondcount

Aber auch hier das Sync Problem, mit timesyntool.com könnte man ein regelmäßiges Sync der lokalen Zeit anstossen.

Nach Durchsicht im Internet habe ich keine praktische Anwendung (EA, Indikator Beispiel) gefunden (nur schnell drübergeschaut), einige theoretische Ideen, bzw. Verbindungskontrolle zum Broker Server.

Die Chance das der MQL4/5 Timer (EventSetMillisecondTimer, GetMicrosecondCount, usw.) wegen der localtime aus dem Takt kommt oder sogar "crashed" ist wohl sehr hoch...man kann aus einem Holzblock (MT4) halt kein Rennpferd machen. :)

Mike

traderdoc 24.06.22 20:52

Sorry, verstehe nicht, was du da schreibst.
Die Timer-Funktion gibt im Rhythmus der Variableneinstellung einen simulierten Tick -fertig.

traderdoc

TraderMike 25.06.22 01:53

"Counter is limited by the restrictions of the system timer. Time is stored as an unsigned integer, so it's overfilled every 49.7 days if a computer works uninterruptedly."

"The OnTimer() function is called when the Timer event (EventSetMillisecondTimer) occurs, which is generated by the system timer only for Expert Advisors and indicators - it can't be used in scripts. The frequency of the event occurrence is set when subscribing to notifications about this event to be received by the EventSetTimer() function."

Der System Timer ist die lokale Windows PC Zeit, welche eine Genauigkeit ~30Sek hat, d.h. alle Funktionen wie (EventSetMillisecondTimer, GetMicrosecondCount, GetTickCount) sind abhängig von der lokalen Windows System Zeit und haben damit ein Sync Problem. z.B. springt die interne Windows Zeit um 40ms, springt auch die MQL Funktion bei der Verarbeitung (z.B. Abfrage wieviele ms/µs vergangen sind) mit.

Das würde sich nur umgehen lassen indem man die interne Windows Zeit mit einer externen Quelle, z.B. Atomzeituhr synchron hält, dann haben auch die MQL Funktionen immer die richtige Zeit. Das gilt für alle Programme die Zeit Funktionen im ms/µs Bereich verarbeiten.

Läuft das ganze in einem VPS, oder der Computer läuft durch, muss innerhalb des Zeitfensters 49,7 der PC oder VPS neugestartet werden, um das unint überladen zu verhindern, mal davon abgesehen das kein VPS Anbieter eine Atomzeituhr Anbindung für seine VPS im Angebot hat.

Fazit: Interessantes Feature im Sek Bereich, wo es egal ist wenn die interne Windows PC Zeit um z.B. 40ms springt, für ms/µs nicht umsetzbar.

Mike

traderdoc 27.06.22 17:59

Wo ist denn diese Aussage her?

""Counter is limited by the restrictions of the system timer. Time is stored as an unsigned integer, so it's overfilled every 49.7 days if a computer works uninterruptedly."

traderdoc

TraderMike 27.06.22 19:28

https://docs.mql4.com/common/gettickcount

https://docs.microsoft.com/de-de/win...ectedfrom=MSDN

"GetTickCount() is accurate to +-16ms only"

In Echtzeitmodus werden Timer-Ereignisse nicht mehr als 1 Mal in 10-16 "Millisekunden aufgrund von Hardware-Einschränkungen generiert."
https://www.mql5.com/de/docs/eventfu...llisecondtimer
(Wenn er das überhaupt schafft...ist die CPU/System unter Last, wird sich das "hoffnungsvolle 1x in 16ms nicht ausgehen...)

Fazit: EventSetMillisecondTimer, GetMicrosecondCount, GetTickCount haben alle mit den gleichen Limits zu kämpfen.

Bedeutet das MQ4/5 sich ordentlich bei den Windows Libraries bedient, da waren die Russen wohl zu faul selbst was ordentliches zu programmieren. Das gesamte Date+Time ist ein Desaster. Umso tiefer wir in der Diskussion in den MQL4/5 Eingeweiden herumstöbern, umso mehr offenbaren sich die Unmöglichkeiten.

Deine Annahme, das es einen "virtuellen" Tick auslößt (einstellbar, zumindest im Tester), wäre eigentlich die bessere Lösung/Implementierung gewesen, da man unabhängig von der Hardware ist, letztendlich sollte "immer" die einzige Abhängigkeit der Quote Server des Brokers sein...und nicht die Limits der verwendeten Hardware...

Mike

PS: Würden mehr Broker API's/Bridges anbieten, würde ich mir sofort einen eigenen schlanken Klient in OCaml oder C# schreiben, die gesamten Optionen wie Markets, Indikatoren etc. brauche ich persönlich nicht
PPS: Mit dem Zeitstempel der letzten OHLC könnten man besser arbeiten, als mit den Windows Hardware Zeit Limitationen


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum