Funktion Schlaf Alternative - Seite 2

 
paulepanke:

Seien Sie vorsichtig mit einer solchen Aussage. Es gibt immer einen logischen Grund, sleep() auszuführen. in Tester und sogar in Indikatoren.

Ich habe nicht gesagt, dass es keinen logischen Grund gibt, sleep() zu verwenden, es gibt viele, ich habe gesagt, dass es keinen Grund gibt, zu erwarten, dass sleep() im Strategy Tester funktioniert. Funktioniert es in einem Indikator, der auf einem Strategy Tester Chart läuft, ich weiß es nicht, vielleicht tut es das. Funktioniert es in einem EA, der im Strategy Tester läuft? Soweit ich weiß, nein. Kann ein EA, der im Strategy Tester läuft, in den Pausenzustand versetzt werden? ja, das kann er.
 
RaptorUK:
Schauen Sie sich an, was TimeSeconds() Ihnen liefert, dann überlegen Sie, was TimeCurrent() Ihnen liefert. . welche brauchen Sie und warum?


Simon,

int ZeitSekunden( datetime time)

Gibt die Anzahl der Sekunden zurück, die seit dem Beginn der Minute für die angegebene Zeit verstrichen sind.

datetime TimeCurrent( )
Gibt die letzte bekannte Serverzeit (Zeitpunkt des Eingangs des letzten Angebots) als Anzahl der seit 00:00 Uhr am 1. Januar 1970 verstrichenen Sekunden zurück.


"Welche brauchen Sie und warum?" - Simon

Ich würde beide zusammen verwenden, da sie Hand in Hand gehen. - Nathan

TimeSeconds(datetime time) erfordert eine Variable, die innerhalb der geschweiften Klammern steht. TimeCurrent() wird dann innerhalb dieser geschweiften Klammern platziert, was für mich eine praktikable Lösung darstellt. Ich habe dies bereits getan, aber nicht verstanden, warum die zurückgegebenen Zeitwerte zu überspringen und zu pausieren schienen (aufgrund des Fehlens eines aktiven Ticks/Ticks).

Was sagen Sie zu diesem Problem?


Vielen Dank.

 
WHRoeder:

  1. Es werden keine Ticks erzeugt, bis Sie zurückkehren und der nächste Tick erzeugt und Ihr start() aufgerufen wird. Wenn Sie die Berechnung für 5 Minuten durchführen und zurückkehren, beträgt das Volumen (Tickanzahl) beim nächsten Aufruf +1. In einem Live-Chart, wenn Sie für 5 Minuten berechnen, dann werden Sie 5 Minuten Ticks verpassen und auf dem M1 werden mehrere neue Bars gebildet haben.

William,

Vielen Dank für die Erläuterung dieses Themas.

Meine Interpretation von "2." ist, dass wenn ein Tick erzeugt wird, die Return-Funktion aufgerufen wird. Danach wird direkt nach dem Aufruf der Return(0)-Funktion die Start()-Funktion aufgerufen, die die Ausführung des Programms erneut auslöst. Ist diese Interpretation dieses Teils von 2. richtig?


"Wenn Sie für 5 Minuten berechnen", wie kann ich sicher sein, dass der EA für fünf Minuten berechnen wird (auch wenn der EA für fünf Minuten berechnet, glaube ich nicht, dass dies garantiert ein Tick erstellt werden wird. Die Wahrscheinlichkeit, dass ein Tick erzeugt wird, ist erhöht)?


Entschuldigung, ich habe Schwierigkeiten, das zu lesen:

"Wenn Sie 5 Minuten lang rechnen und zurückkehren, wird das Volumen (Tickanzahl) beim nächsten Aufruf +1 sein. In einem Live-Chart, wenn Sie für 5 Minuten berechnen, dann werden Sie 5 Minuten Ticks verpassen und auf dem M1 werden sich mehrere neue Balken gebildet haben."


Vielen Dank für Ihre Antwort.

 
RaptorUK:
Ich habe nicht gesagt, dass es keinen logischen Grund gibt, sleep() zu verwenden, es gibt viele, ich habe gesagt, dass es keinen Grund gibt zu erwarten, dass sleep() im Strategy Tester funktioniert. Funktioniert es in einem Indikator, der auf einem Strategy Tester Chart läuft, ich weiß es nicht, vielleicht tut es das . Funktioniert es in einem EA, der im Strategy Tester läuft? Soweit ich weiß, nein. Kann ein EA, der im Strategy Tester läuft, in den Pausenzustand versetzt werden? ja, das kann er.

Simon,

"Kann man einen EA, der im Strategietester läuft, zum Anhalten bringen? ja, das kann man."

Könnten Sie bitte Ihre Gedanken zu dieser Methode äußern, die Sie verwenden würden, um einen EA im Tester "anzuhalten"?


Vielen Dank!

 
  1. Der EA kehrt von start() an den Tester zurück. Der Tester erstellt den nächsten Tick und ruft start() auf. Wenn der EA nicht zurückkehrt, gibt es keinen nächsten Tick. Es spielt keine Rolle, wie lange start() braucht, um zurückzukehren. Der nächste Tick wird erzeugt, wenn er zurückkommt.
  2. Sie können den EA im Tester nicht pausieren oder schlafen legen. Sie können programmatisch die Pause-Taste drücken, um den Tester anzuhalten, nachdem der EA vom Start zurückkehrt.
 

William,

Also, ein neuer Tick ruft die start() -Funktion in einem EA auf, ja?

Meine Frage an Sie lautet: "Kennen Sie eine andere Möglichkeit, die start()-Funktion aufzurufen als die eines neuen Ticks? Möglicherweise eine konsistente, sich wiederholende Aktion, die einen Aufruf von Start() ersetzt?"

(Ich überlege, ob es einen Weg gibt, Sekunden konsistent zu verfolgen, der nicht von Ticks abhängt)


"...Der nächste Tick wird erzeugt, wenn er das tut."

Ich glaube, was Sie schreiben wollten, war: "Bei der Erzeugung eines neuen Ticks wird dann Start() ausgeführt" ;)


Sie sagen also, dass ein EA im Tester nicht pausiert oder schlafen gelegt werden kann, ja?


Ich werde mir den Link ansehen, den Sie angegeben haben, aber können Sie in der Zwischenzeit bitte diese Methode des "Drückens einer Pausentaste, um den Tester anzuhalten" erläutern, nachdem ein getesteter EA vom Start zurückkehrt?

Würde diese Methode, wenn sie im Tester ausgeführt wird, die Leistung des EA simulieren, der für ein bestimmtes Zeitsegment in "Echtzeit" auf einem Live-Konto pausiert wird?


Mir ist klar, dass der Tester Einschränkungen hat und "Workarounds" für die Simulation der "Echtzeit"-Performance verwendet werden müssen.


Vielen Dank, William.


Darf ich Sie auch einfach Will nennen? Das würde mir bei jeder Nachricht eine Sekunde Zeit ersparen. Deine Entscheidung.

Mir gefällt eine Funktion, die Ihr EA besitzt, und zwar: "Ich wollte alle Aufträge vor dem Ende der Woche (Marktschluss am Freitag) schließen , um Verluste zu vermeiden, falls der Markt am Ende der Woche eine Lücke aufweist, indem ich den SL überschreite."

(Klatschen in die Hände vor Freude.) Hahaha! ;) Wenn Sie diese Funktion zu Ihrem EA hinzufügen, vermeiden Sie unnötige Verluste, aber das ist etwas anderes als das, was ich derzeit zu tun versuche. Derzeit versuche ich, die Sekunden der Zeit konsistent zu verfolgen, ohne die Notwendigkeit von Ticks zur Aktualisierung der Sekunden. Ich wünsche mir eine andere Möglichkeit, die Start()-Funktion zu aktualisieren, verstanden?


Ich danke Ihnen

 
WhooDoo22:

Zurzeit versuche ich, die Sekunden der Zeit konsistent zu verfolgen, ohne die Notwendigkeit von Ticks, um die Sekunden zu aktualisieren. Ich wünsche mir eine andere Methode zur Aktualisierung der Funktion Start(), verstanden?

Ich vermute, dass das, was Sie zu tun versuchen, eine fehlerhafte Lösung für Ihr Problem ist, weil Sie es nicht verstehen. Warum müssen Sie die Sekunde von einer Sekunde zur nächsten wissen, wenn sich der Preis 30 Sekunden lang nicht geändert hat?

Zur Klarstellung dessen, wasWHRoeder sagte: Alle Ticks werden erstellt, bevor der Strategy Tester sie aufruft/ausführt, sie werden in einer .fxt-Datei in tester/history gespeichert, der ST ruft einen ersten Tick auf, der wiederum die Ausführung von start() veranlasst, der nächste Tick wird erst dann aufgerufen/verwendet, wenn start() die Ausführung beendet hat, das ist sehr wichtig zu verstehen. Erst wenn start() beendet ist, wird der nächste Tick verwendet, so dass der EA erneut start() aufrufen kann. Wenn der ST mit voller Geschwindigkeit läuft, bestimmt die Geschwindigkeit, mit der start() ausgeführt wird, die Geschwindigkeit des ST, so dass eine sehr einfache start()-Funktion den ST sehr schnell laufen lässt, eine komplexe start()-Funktion bewirkt, dass der ST langsamer läuft.

In einer Live-/Demo-Situation, in der die start()-Funktion sehr komplex ist und lange für die Ausführung braucht, vielleicht ein paar Zehntelsekunden, ist es möglich, dass der nächste Tick eintrifft, bevor start() abgeschlossen ist; in dieser Situation wird der Tick verpasst und führt nicht zum Aufruf von start() ... Das kann beim ST NICHT passieren.

 
WhooDoo22:

Simon,

"Kann man einen EA, der im Strategietester läuft, zum Anhalten bringen? ja, das kann man."

Könnten Sie bitte Ihre Gedanken zu dieser Methode äußern, die Sie verwenden würden, um einen EA im Tester "anzuhalten"?

Ich habe eine GlobalVariable verwendet, die von einem Skript gesetzt und wieder aufgehoben wurde. Wenn der EA im ST sah, dass die GlobalVariable gesetzt war, saß er in einer Schleife, die ständig überprüfte, ob die GlobalVariable wieder aufgehoben wurde, und wenn das Skript die GlobalVariable aufgehoben hatte, verließ der EA die Schleife und seine start() -Funktion konnte beendet werden.
 
WhooDoo22:

"Welche brauchen Sie und warum?" - Simon

Ich würde beide e'm zusammen verwenden, denn sie gehen Hand in Hand. - Nathan

TimeSeconds(datetime time) erfordert eine Variable, die innerhalb der geschweiften Klammern steht. TimeCurrent() wird dann innerhalb dieser geschweiften Klammern platziert, was mir eine praktikable Lösung bietet. Ich habe dies b4 getan, aber nicht verstehen, warum zurückgegebenen Zeitwerte schien zu überspringen und Pause (aufgrund des Fehlens einer aktiven Tick / Ticks).

Nehmen wir an, Sie haben 2 Ereignisse, die 10 Sekunden auseinander liegen. Wie groß ist dann der Unterschied zwischen den Werten, die vonTimeSeconds(datetime time) für diese beiden Ereignisse zurückgegeben werden?
 
RaptorUK:

Ich vermute, dass das, was Sie versuchen, eine fehlerhafte Lösung für Ihr Problem ist, weil Sie es nicht verstehen. Warum müssen Sie die Sekunde von einer Sekunde zur nächsten wissen, wenn sich der Preis 30 Sekunden lang nicht geändert hat? Wenn sich der Preis ändert, erhalten Sie einen Tick.

Zur Klarstellung dessen, wasWHRoeder sagte: Alle Ticks werden erstellt, bevor der Strategy Tester sie aufruft/ausführt, sie werden in einer .fxt-Datei in tester/history gespeichert, der ST ruft einen ersten Tick auf, der wiederum die Ausführung von start() veranlasst, der nächste Tick wird erst dann aufgerufen/verwendet, wenn start() die Ausführung beendet hat, das ist sehr wichtig zu verstehen. Erst wenn start() beendet ist, wird der nächste Tick verwendet, so dass der EA erneut start() aufrufen kann. Wenn der ST mit voller Geschwindigkeit läuft, bestimmt die Geschwindigkeit, mit der start() ausgeführt wird, die Geschwindigkeit des ST, so dass eine sehr einfache start()-Funktion den ST sehr schnell laufen lässt, eine komplexe start()-Funktion bewirkt, dass der ST langsamer läuft.

In einer Live-/Demo-Situation, in der die start()-Funktion sehr komplex ist und lange für die Ausführung braucht, vielleicht ein paar Zehntelsekunden, ist es möglich, dass der nächste Tick eintrifft, bevor start() abgeschlossen ist; in dieser Situation wird der Tick verpasst und führt nicht zum Aufruf von start() ... Das kann beim ST NICHT passieren.

Simon,

Ich vermute, dass das, was Sie versuchen, eine fehlerhafte Lösung für Ihr Problem ist, weil Sie es nicht verstanden haben. Warum müssen Sie die Sekunde von einer Sekunde zur nächsten wissen, wenn sich der Preis 30 Sekunden lang nicht geändert hat? wenn sich der Preis ändert, erhalten Sie einen Tick.

Ich gebe zu, dass es mir an Verständnis mangelt, deshalb diskutiere ich das Thema im MQL4-Forum. Ich möchte den Preis speichern, wenn er sich ändert (ich verstehe, wie man das macht). Ich weiß auch, wie man die Preise in einem LIVE/DEMO-Chart mit Sleep() konsequent jede Sekunde speichern kann. Zielsetzung: Ich möchte die Sekunden konsequent verfolgen (ohne Verfolgung der Sekunden auf der Grundlage der Erstellung von Ticks) bis zu einem Maximum von einer Minute oder weniger, und dann die verfolgten Sekunden auf Null zurücksetzen. Ich verstehe, warum ich dieses Ziel erreichen möchte. Der Grund dafür ist, dass ich einen EA im Tester testen muss und Sleep() beim Testen nicht verwenden kann. Was ist richtig zu tun? Ich sammle Optionen.

Also Details? ;)

Programmieren Sie einen Timer (im Tester verwendbar) in einen EA. Dieser Timer zählt aufwärts von 0-30 oder abwärts von oder 30-0. Während diese Zeit aufwärts/abwärts zählt, habe ich einen separaten Vektor, der die Preisaktion verfolgt (ein sehr großer Vektor).

Meine Bedingungen sind solche,

Wenn der Preis um x Punkte steigt (innerhalb von 0-30 oder 30-0 Sekunden), wird eine Entscheidung getroffen.

Wenn der Preis nicht x Punkte bewegt (innerhalb von 0-30 oder 30-0 Sekunden), ArrayInitialize().


Was sagen Sie zu diesem Simon?


Vielen Dank!