Zeitschaltuhr

 

Die Frage ist eigentlich, warum der Timer in Sekunden gemessen wird.

Ehrlich gesagt, als ich hörte, dass es einen nativen Timer geben würde, hatte ich keine Ahnung, dass die atomare Zeiteinheit eine Sekunde statt einer Millisekunde sein würde...

Eine (für mich) nicht sehr angenehme Entdeckung, die ich vor kurzem gemacht habe, als ich sie benutzen wollte.


Die Prämisse ist sehr einfach: Der Timer wird in der Regel zur Synchronisierung (Warten auf die Berechnung der Daten) oder zur Beobachtung verwendet (ein zeitgesteuerter EA ist imho viel besser geeignet). In beiden Fällen ist eine Sekunde ein bisschen viel, aber wir würden wirklich gerne Millisekunden im Timer sehen.

Auch hier ist es ein guter Ersatz für die Sleep-Funktion in den Indizes und eine Sekunde ist zu viel.

Ich hoffe, die Entwickler werden diesen Antrag berücksichtigen. Falls erforderlich, werde ich eine Anfrage beim Service Desk stellen.

Ich habe dieses Thema zur Diskussion gestellt. Was meinen Sie dazu?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
TheXpert:

Die Frage ist eigentlich, warum der Timer in Sekunden gemessen wird.

Ehrlich gesagt, als ich hörte, dass es einen nativen Timer geben würde, hatte ich keine Ahnung, dass die atomare Zeiteinheit eine Sekunde statt einer Millisekunde sein würde...

Eine (für mich) nicht sehr angenehme Entdeckung, die ich vor kurzem gemacht habe, als ich sie benutzen wollte.


Die Prämisse ist sehr einfach: Der Timer wird in der Regel zur Synchronisierung (Warten auf die Berechnung der Daten) oder zur Beobachtung verwendet (ein zeitgesteuerter EA ist imho viel besser geeignet). In beiden Fällen ist eine Sekunde ein bisschen viel, aber wir würden wirklich gerne Millisekunden im Timer sehen.

Auch hier ist es ein hervorragender Ersatz für die Sleep-Funktion in den Indizes, und wieder ist die zweite zu viel.

Ich hoffe, die Entwickler werden diesen Antrag nicht ignorieren. Falls erforderlich, werde ich eine Anfrage beim Service Desk stellen.

Das Thema ist offen für Diskussionen. Was meinen Sie dazu?

Sie können mir glauben, dass die aktuelle Realisierung des Handelsterminals und der Algorithmus der Arbeit mit Threads in MQ Sekunden eine gute Lösung ist.

Zumal die Zeit im Tester auf Basis des Minutencharts generiert wird (soweit ich das verstanden habe) und daher eine kleinere Zeitskala nicht funktionieren wird.

PS

Natürlich könnten die Entwickler eine detailliertere Antwort geben, aber es ist genug, um zu verstehen, dass der aktuelle Algorithmus der Arbeit mit Threads in Expert Advisor und im Terminal, das Zeitintervall kürzer als eine Sekunde ist entweder überhaupt nicht möglich oder wird einfach Inkonsistenz in der EA-Betrieb verursachen.

Um sich die Folgen einer solchen Lösung vorzustellen, müssen Sie verstehen, was mit dem Expert Advisor passiert, wenn sein Timer alle 500 Millisekunden aufgerufen wird, während die Verarbeitung des Timers beispielsweise eine Minute dauert....

 

Interesting:

Zumal die Zeit im Tester auf der Grundlage des Minutencharts generiert wird (so wie ich es verstehe) und daher eine kleinere Zeitskala einfach nicht ausreicht.

Was hat der Prüfer damit zu tun?

... Ein Zeitintervall, das kürzer als eine Sekunde ist, ist entweder gar nicht möglich oder führt einfach zu Inkonsistenzen in der Arbeit des Expert Advisors.

Inwiefern? Warum ist das nicht möglich?

Um sich die Folgen einer solchen Lösung vorzustellen, müssen Sie verstehen, was mit dem Expert Advisor passieren würde, wenn sein Timer alle 500 Millisekunden aufgerufen wird, während der Verarbeitungs-Timer zum Beispiel eine Minute dauert....

Und was wird geschehen? Und wie viel erschreckender ist es, wenn der Timer 1 Sekunde beträgt?

Haben Sie überhaupt einen klaren Kopf, wenn Sie Kommentare schreiben?
 
TheXpert:

Die Frage ist eigentlich, warum der Timer in Sekunden gemessen wird.

Ehrlich gesagt, als ich hörte, dass es einen nativen Timer geben würde, hatte ich keine Ahnung, dass die atomare Zeiteinheit eine Sekunde statt einer Millisekunde sein würde...

Eine (für mich) nicht sehr angenehme Entdeckung, die ich vor kurzem gemacht habe, als ich sie benutzen wollte.


Die Prämisse ist sehr einfach: Der Timer wird in der Regel zur Synchronisierung (Warten auf die Berechnung der Daten) oder zur Beobachtung verwendet (ein zeitgesteuerter EA ist imho viel besser geeignet). In beiden Fällen ist eine Sekunde ein bisschen viel, aber wir würden wirklich gerne Millisekunden im Timer sehen.

Und wieder ist es ein guter Ersatz für die Sleep-Funktion in den Indizes und eine Sekunde ist zu viel.

Ich hoffe, die Entwickler lassen die Anfrage nicht unbeachtet. Falls erforderlich, werde ich einen Antrag in Servicedesk stellen.

Dieses Thema ist offen für Diskussionen. Was meinen Sie dazu?

Der Timer in Sekunden ist unsere bewusste Entscheidung. Der Timer ist hauptsächlich für Expert Advisors gedacht, die ohne Ticks arbeiten.

Wenn Sie eine Synchronisierung wünschen, verwenden Sie mehrere Expert Advisors für verschiedene Instrumente, die sich gegenseitig benutzerdefinierte Nachrichten senden.

Oder schreiben Sie eine Art Wotchdog, der in einer Schleife, z. B. in einem 50-Millisekunden-Takt, Nachrichten an Ihren Hauptexpertenberater sendet, wenn erwartete Ereignisse eintreten. Die Nachrichten werden garantiert zugestellt (natürlich nur, wenn die Warteschlange nicht überläuft).

 
stringo:

Der Timer in Sekunden ist unsere bewusste Entscheidung. Die Zeitschaltuhr ist in erster Linie dazu gedacht, dass die Experten in Abwesenheit von Zecken arbeiten können.

Dies kann ohne Zeitschaltuhr geschehen und übrigens auch ohne die Mühe, ein Ereignis an sich selbst zu senden. Warum also nicht die Funktionalität erweitern?

Wenn Sie eine Synchronisierung wünschen, verwenden Sie mehrere EAs auf verschiedenen Tools, die sich gegenseitig benutzerdefinierte Nachrichten senden.

Die Synchronisierung kann mit Daten erfolgen. Zum Beispiel - ein eingebauter Indikator. Wie lässt sich diese Synchronisierung im Indikator lösen? Ich frage nicht nach den Expert Advisors, dort ist alles problemlos gelöst. Aber in einem Indikator ist Sleep ein Stillstand des gesamten Threads, und es bedeutet, den Rest der Indikatoren. Und das bedeutet, dass es eine Menge Probleme mit der Synchronisation gibt.

Sie können auch eine Art Watchdog-Schleife für 50 msec Slip schreiben, die Nachrichten an Ihren Haupt-Expert Advisor sendet, wenn erwartete Ereignisse eintreten. Die Nachrichten werden garantiert zugestellt (es sei denn, Sie lassen die Warteschlange überlaufen).

Das muss ich, wenn sich nichts ändert...
 
TheXpert:

Was hat das mit dem Prüfgerät zu tun?

Inwiefern? Warum ist das nicht möglich?

Und was würde passieren? Und wie viel gruseliger ist es, wenn der Timer 1 Sekunde beträgt?

Benutzen Sie Ihren Kopf, wenn Sie Kommentare schreiben?

Ich denke, wenn Sie sich mit atomaren Zeiteinheiten auskennen, wissen Sie wahrscheinlich auch, wie Prozesse und Threads im Betriebssystem und im Rest der Software organisiert sind.

Aber nur zur Erinnerung (nur für den Fall, dass es diejenigen gibt, die es nicht wissen) die Grundlagen - Alles, was im System passiert, ist in Prozesse und Threads unterteilt, jeder Prozess kann von einem Thread bis zu mehreren haben. Grob gesagt ist jede ausführbare Datei, die im System läuft, ein PROZESS. Jeder Prozess hat eine Priorität, und jeder Thread innerhalb eines Prozesses hat eine Priorität.

Auf der Grundlage dieser Prioritäten weist das System jedem Prozess (oder Thread eines bestimmten Prozesses) Prozessorzeit zu.

Die Architektur des Client-Terminals ist so ausgelegt, dass auf jedem Chart nur ein Expert Advisor und mehrere Indikatoren gestartet werden können (wie Sie wissen). Der Expert Advisor hat einen einzigen Thread, aber jeder Indikator erhält seinen eigenen Thread (völlig unabhängig) vom Expert Advisor.

Das ist in Ordnung, aber der Expert Advisor oder der Indikator selbst kann nur in seinem Thread laufen, d.h. jede Codezeile nimmt den gesamten Thread in Anspruch und keine anderen Aktionen sind in diesem Thread möglich (natürlich gibt es Zweifel bezüglich der Verarbeitung von Ticks, aber höchstwahrscheinlich passen sie in das allgemeine Muster).

In diesem Fall wird für jede Karte ein eigener Ereignisstrang gebildet, der vom System sequentiell abgearbeitet wird.

Daher kann die Timer-Verarbeitung erst aufgerufen werden, wenn die vorherige Timer-Verarbeitung abgeschlossen ist. Oder einfach ausgedrückt: OnTimer() darf erst dann ausgeführt werden, wenn der Thread, der den Timer verarbeiten sollte, beschäftigt ist.

Zur Veranschaulichung der Unmöglichkeit des Starts der Timer-Verarbeitung durch einen zweiten Thread können Sie dieses Beispiel verwenden (dumm, aber klar):

int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer(1);
//----------------------------------------------------------------------------//
return(0);
//----------------------------------------------------------------------------//
}

void OnTimer()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print(TimeLocal());
Sleep(2000);
//----------------------------------------------------------------------------//
}

PS

Was den Strategietester angeht - wie wollen Sie die Zeit dort gestalten?

 

Interesting:

Die Architektur des Client-Terminals ist so ausgelegt, dass auf jedem Chart nur ein Expert Advisor und mehrere Indikatoren gestartet werden können (wie Sie wissen). Der Expert Advisor hat einen einzigen Thread, aber jeder Indikator erhält seinen eigenen Thread (völlig unabhängig) vom Expert Advisor.

Seit wann? Ich sehe überhaupt keine Probleme mit Skripten und Expert Advisors, da sie in ihren eigenen Threads arbeiten.

Wie Sie wissen, arbeiten die Indikatoren ALLE in EINEM Thread, und das erschwert die Aufgabe, den Timer in jedem Indikator zu organisieren. Und manchmal würde es mir sehr gefallen.

Das folgende Beispiel zeigt, dass der Timer nicht durch einen zweiten Thread gestartet werden kann (stumpf, aber anschaulich):

Hier ein praktisches Beispiel. Das zeigt unverblümt und deutlich das Niveau Ihres Denkens, insbesondere auch im Zusammenhang mit dem vorherigen Beitrag.

Bitte antworten Sie nie wieder auf meine Beiträge, sonst kann ich mich nicht mehr zurückhalten und werde Sie beschimpfen und eine Sperre bekommen.

Aber wenn du willst, kannst du mir gerne schreiben, ich werde mich gerne über dich lustig machen, egal welches Thema mit Programmierung zu tun hat, zum Teufel mit dem Verbot.

Was den Strategietester anbelangt, wie sollte man die Zeit dort gestalten?
Das tue ich nicht, ich komme bisher gut damit zurecht.
 
TheXpert:

Seit wann? Ich sehe überhaupt kein Problem mit Skripten und EAs, da sie alle in ihren eigenen Threads funktionieren.

Und die Indikatoren arbeiten ALLE in EINEM Thread, sei es bekannt, und es erschwert die Aufgabe, den Timer in jedem Indikator zu organisieren. Und manchmal möchte man das wirklich.


Ich wollte nicht antworten, aber ich konnte mir nicht helfen.

Skripte interessieren mich nicht, und ich bin mir nicht sicher, wo ich gesagt habe, dass Expert Advisors nicht in separaten Threads laufen (jeder in seinem eigenen Thread). Zeigen Sie mir bitte die Stelle, an der ich das Gegenteil gesagt habe ....

Bei den Indikatoren bin ich mir nicht sicher, da ich nicht viel mit ihnen arbeite (diese Frage wurde sicherlich in Foren diskutiert, und wenn etwas passiert, werden die Entwickler es korrigieren). Ich weiß sicher, dass es für jeden Indikator möglich ist, seinen Timer vorzuschreiben (nicht abhängig vom Experten), ich habe diese Möglichkeit bereits genutzt.

Ich weiß genau, was ich zu den Indizes hätte sagen sollen.

TheXpert:

Das Beispiel funktioniert. Das zeigt unverblümt und deutlich das Niveau Ihres Denkens, insbesondere auch im Zusammenhang mit dem vorherigen Beitrag.

Und wer würde bezweifeln, dass es funktioniert, aber der Timer (was für ein Miststück) läuft alle 2 Sekunden statt der angegebenen 1, die ich im Initialisierungsblock angegeben habe.

Speziell für Sie habe ich es in einen Expert Advisor eingefügt, obwohl das Problem mit dem Timer-Aufruf ohnehin offensichtlich war (nehmen wir an, dass man der Klarheit halber sagt, dass in Bildern alles bequemer und leichter zu verstehen ist)...

Jetzt muss ich nur noch herausfinden, wie OnTimer alle 500 Millisekunden aufgerufen wird, wenn OnTime 1 Sekunde dauert (im Beispiel eine Sekunde bzw. zwei Sekunden)?

TheXpert:

Bitte antworten Sie nie wieder auf meine Beiträge, sonst kann ich mich nicht mehr zurückhalten und werde Sie beschimpfen und eine Sperre bekommen.

Aber wenn Sie möchten, können Sie mir gerne schreiben, ich bin gerne bereit, über jedes programmierbezogene Thema zu schreiben, zum Teufel mit dem Verbot.

Ja, bitte, ich muss nicht antworten...
 
Nur in einem Streitgespräch kann man die Wahrheit erfahren, und wenn beide Argumente zutreffen, wird der eine bei seiner Meinung bleiben (richtig) und der zweite wird seine Meinung (falsch) der des ersten anpassen.

Sagen Sie dem anderen also nicht, was er oder sie falsch macht, oder schreiben Sie einfach: "Du liegst falsch, sieh es bei Google nach".

Soweit ich das Forum verstehe - ein für beide Seiten vorteilhaftes Gespräch, wenn Sie Fragen haben nur an den Entwickler gehen zu servicedesk.

Interessant

Ich habe einige Experimente mit der Leistung von MQL5 durchgeführt und kann Ihnen sagen, dass die meisten Expert Advisors die OnTick-Funktion in weniger als 0,1 Sekunden ausführen.


An TheXpert

Warum sind Sie so in Eile?
Aber ich sehe keinen Sinn in einem Timer von weniger als einer Sekunde. Zählen wir mit, wenn zwei Elektronen zusammenstoßen?
Wenn ja, fahren Sie mit der Schleife und Sleep() fort.

 

mrProF:

Interessant

Ich habe einige Experimente mit der Leistung von MQL5 durchgeführt, und ich kann Ihnen sagen: Die meisten EAs führen die OnTick-Funktion in weniger als 0,1 Sekunden aus.

Es hängt davon ab, was man dort einfügt und wie viele Daten verarbeitet werden sollen, aber MQL5 ist ziemlich schnell, das bestreite ich nicht...
 

Noch einer... Seid ihr nicht zufällig Brüder?

mrProF:

Aber ich sehe keinen Sinn in einem Timer von weniger als einer Sekunde.

Das heißt aber nicht, dass es keine gibt. Die Aufgaben sind bei jedem anders.

Wenn ja, fahren Sie mit der Schleife und Sleep() fort.

Jetzt geht's los... Können wir lesen? Zeigen Sie mir, wie man es für die Truthähne macht.
Grund der Beschwerde: