MQL4-Echtzeituhr (Sekunde für Sekunde) - Seite 5

 
7bit:

Es sind nur eine Handvoll Zeilen in mql4 (natürlich brauchen Sie DLL-Aufrufe, um die Windows-API aufrufen zu können, aber Sie müssen nichts installieren):

Ich habe dieses Skript in meinen Favoriten und wenn ich Ticks brauche, ziehe ich es einfach auf den Chart.


Ich habe auch eine Variante davon ohne die Schleife, die nur einen Tick sendet und dann beendet wird, und habe diese (one_tick.mq4) an die Tastenkombination ALT+T gebunden, und jetzt kann ich einen Tick an das aktive Diagramm senden, indem ich einfach ALT-T drücke. Ich brauche dies für einige meiner stat-arb EAs beim Experimentieren während des Wochenendes, um start() zu erzwingen, um ihre Berechnungen und das Plotten ihrer Graphen auszulösen (ich kann Linien auf dem Chart verschieben, um das Intervall zu ändern und dann brauche ich einen neuen Tick, um ihre Berechnungen zu aktualisieren).


7 Ich habe noch nie dll-Importe verwenden, so können Sie bitte die folgenden erklären.

+ Müssen Sie die DLL-Dateien in den Ordner des Meta Trader Client aufnehmen?

+ Wie können wir diesen EA vom MT-Client aus aktivieren?

Bitte geben Sie uns einige Beispiele für DLL-Importe in Meta Trader

 
spidermagos:


7 Ich habe noch nie dll-Importe verwendet, können Sie mir also bitte das Folgende erklären.

+ Müssen Sie die DLL-Dateien in den Ordner des Meta Trader Client aufnehmen?

+ Wie können wir diesen EA vom MT-Client aus aktivieren?

Bitte geben Sie uns einige Beispiele für DLL-Importe in Meta Trader

Es tut mir leid, Ihnen mitteilen zu müssen, dass es für Sie völlig unmöglich sein wird, irgendeinen Nutzen daraus zu ziehen (oder auch nur zu verstehen, für welchen Zweck es verwendet werden könnte), wenn Sie nicht die Fähigkeit erlernen, einen Text zu lesen, der länger als 140 Zeichen ist.

Zunächst könnten Sie versuchen, die Bedeutung des Textes zu extrahieren, den Sie in Ihrem letzten Posting zitiert haben. Sie werden dann feststellen, dass ich es als Skript und nicht als EA beschrieben habe. Außerdem werden Sie zu Ihrer großen Überraschung feststellen, dass ich geschrieben habe, dass keine Dlls installiert werden müssen, und Sie können vielleicht sogar die Textstellen finden, in denen ich erklärt habe, wie es verwendet werden soll.

 
7bit:

Es tut mir leid, Ihnen mitteilen zu müssen, dass es für Sie völlig unmöglich sein wird, irgendeinen Nutzen daraus zu ziehen (oder auch nur zu verstehen, für welchen Zweck es verwendet werden könnte), solange Sie nicht die Fähigkeit erlernen, einen Text zu lesen, der länger als 140 Zeichen ist.

Als erstes könnten Sie versuchen, den Sinn aus dem Text zu extrahieren, den Sie gerade in Ihrem letzten Posting zitiert haben. Sie werden dann feststellen, dass ich es als Skript und nicht als EA beschrieben habe, außerdem werden Sie zu Ihrer großen Überraschung feststellen, dass ich geschrieben habe, dass keine Dlls installiert werden müssen, und Sie können vielleicht sogar die Textstellen finden, in denen ich erklärt habe, wie es verwendet werden soll.

Ich bewundere Ihre Arroganz und Ihre Englischkenntnisse und wahrscheinlich auch Ihr Beispiel für die Programmierung.

Aber ein Problem zu lösen, ohne eine Lösung zu bieten, ist nur ein Ausweichen vor der Frage.

7 bit anstatt meine Lesefähigkeiten und Techniken in Frage zu stellen, warum schreibst du nicht das ganze Programm und beweist dich selbst. anstatt zu philosophieren!

Weißt du, wie man eine Echtzeituhr sekundengenau stellt oder nicht? das ist die Frage ? diese Uhr sollte in der Tabelle sein?

 

können Sie einfach 2 und 2 addieren.

Verwenden Sie den Code von 7bit, um gefälschte Ticks zu erzeugen, in Kombination mit dem Code, den ich gepostet habe, und Sie haben alles, was Sie brauchen.

und btw, 7bit scheint einer der besten Programmierer zu sein, die in diesem Forum mitmachen...

//z

 

spidermagos:

Ich bewundere Ihre Arroganz

Ich danke Ihnen.


spidermagos:

Schreiben Sie doch einfach das ganze Programm und beweisen Sie sich selbst, anstatt zu philosophieren!

Das Skript ist vollständig und funktioniert eigenständig, genau innerhalb der Vorgaben, die ich gemacht habe.

Ich habe es als Vorschlag gepostet, um das Problem zu lösen, dass Indikatoren keine blockierenden Aufrufe wie sleep() verwenden dürfen und dass es auch keine andere Möglichkeit gibt, Timer-Ereignisse aus dem Indikator selbst zu erzeugen. Genau dieses Teilproblem des gesamten Uhrenproblems wurde unmittelbar zuvor in diesem Thread erwähnt und nur dieses und nichts anderes wurde von mir angesprochen. Es kann als völlig unabhängiges Problem behandelt werden und mein Skript ist eine generische (und völlig unabhängige) Lösung dafür und kann auch in vielen ähnlichen Szenarien angewendet werden, und ich habe sogar ein Beispiel für einen anderen Anwendungsfall gegeben.

Wenn du Code schreiben willst, dann musst du die Fähigkeit der Problemzerlegung erlernen und du musst auch in der Lage sein, eine Lösung und auch eine Teillösung sofort zu erkennen, wenn du über eine solche stolperst.

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

Führen Sie diese Programme in verschiedenen Diagrammen aus.

 
Ais:

Führen Sie diese Programme in verschiedenen Charts aus.


Ais ; 7bit hat recht, das wird nicht funktionieren! die Startfunktion ist tick by tick

dll-Importe werden benötigt, um dieses Problem zu lösen. ...

d.h. Aufruf von Skripten aus Indikatoren

 
7bit:

Ich danke Ihnen.


Das Skript ist vollständig und funktioniert eigenständig, genau innerhalb der Vorgaben, die ich gemacht habe.

Ich habe es als Vorschlag gepostet, um das Problem zu lösen, dass Indikatoren keine blockierenden Aufrufe wie sleep() verwenden dürfen und dass es auch keine andere Möglichkeit gibt, Timer-Ereignisse aus dem Indikator selbst zu erzeugen. Genau dieses Teilproblem des gesamten Uhrenproblems wurde unmittelbar zuvor in diesem Thread erwähnt und nur dieses und nichts anderes wurde von mir angesprochen. Es kann als völlig unabhängiges Problem behandelt werden und mein Skript ist eine generische (und völlig unabhängige) Lösung dafür und kann auch in vielen ähnlichen Szenarien angewendet werden, und ich habe sogar ein Beispiel für einen anderen Anwendungsfall gegeben.

Wenn Sie Code schreiben wollen, müssen Sie die Fähigkeit der Problemzerlegung erlernen und auch in der Lage sein, eine Lösung und auch eine Teillösung sofort zu erkennen, wenn Sie über eine solche stolpern.



7bit - wie kann man ein Skript von einem Indikator aus aufrufen?

Können Sie ein Beispiel nennen?

 
spidermagos:

Meines Erachtens arbeitet die Funktion Start() tick by tick.

Gibt es eine Möglichkeit, Echtzeitdaten von der Computeruhr zu verwenden und jede Sekunde zu aktualisieren? Nicht Tick für Tick, sondern jede Sekunde?

Wenn ja, helfen Sie mir bitte weiter.

Danke

Hallo, Sie können eine separate Tick-Sender-Anwendung anstelle eines Skripts verwenden (es gibt mehrere Freeware; googeln Sie "mt4 tick sender") und lassen Sie es Ticks alle 200ms oder so erzeugen.dann stellen Sie sicher, dass Ihre PC-Uhr häufig synchronisiert wird und verwenden Sie TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 anstelle von TimeCurrent(), weil Sie mit generierten Ticks "nur" die Ausführung von Start() erzwingen, TimeCurrent() wird sich NICHT selbst aktualisieren, es sei denn, der Tick kommt von Ihrem Broker.. auf diese Weise erhalten Sie Ihren Broker Zeit Sekunde für Sekunde.. dies funktioniert sowohl für Indikatoren und EAs. lustige Tatsache ist, es gibt ein paar Broker mit ihren Servern aus der Zeit synchronisieren, sie lag mehrere Sekunden, aber der Zeitstempel nur, leider nicht der Preis, verschiedene Kerzen, M1 völlig anders manchmal, wenn es Momentum, lol
 

Legen Sie zunächst die Logik, die Sie in start haben, in eine Funktion.

Als nächstes machen Sie eine while-Schleife in init() mit einem sleep und rufen die Funktion von dort aus auf. Denken Sie daran, dass sleep in Millisekunden angegeben wird.

So können Sie das Timing steuern, anstatt auf eine Kursänderung zu warten.

Es funktioniert perfekt, sofern Ihre Programmlogik in Ordnung ist. Das einzige Problem ist, dass Sie es nicht im Backtester ausführen können. Führen Sie Ihre Tests zuerst mit Start() durch und wechseln Sie dann zu init().