|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ü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 |
|
|||
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 |
|
|||
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 ); "In Echtzeitmodus werden Timer-Ereignisse nicht mehr als 1 Mal in 10-16 Millisekunden aufgrund von Hardware-Einschränkungen generiert." traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 |
|
|||
Sorry, verstehe nicht, was du da schreibst.
Die Timer-Funktion gibt im Rhythmus der Variableneinstellung einen simulierten Tick -fertig. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
"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 Geändert von TraderMike (25.06.22 um 02:06 Uhr) |
|
|||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 Geändert von TraderMike (27.06.22 um 19:38 Uhr) |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|