Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43254
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 253
Gesamt: 253
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.06.22
Neues Mitglied
 
Registriert seit: Jun 2022
Beiträge: 10
Tagtranpler befindet sich auf einem aufstrebenden Ast
Standard Ü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
  #2 (permalink)  
Alt 24.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

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
  #3 (permalink)  
Alt 24.06.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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 likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 24.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

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
  #5 (permalink)  
Alt 24.06.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #6 (permalink)  
Alt 25.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

"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)
  #7 (permalink)  
Alt 27.06.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #8 (permalink)  
Alt 27.06.22
Mitglied
 
Registriert seit: Jun 2022
Beiträge: 42
TraderMike befindet sich auf einem aufstrebenden Ast
Standard

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)
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------