Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1531

 

Wie geht man mit einem terminalen Einfrieren um?

Der Code ist einfach, aber sehr langsam

   for(int i=limit;i>=0;i--)
     {
      RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i);
      RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,MA_Period,0,MODE_SMA,i);
     }
 
 
Alexey Viktorov:

Es ist einfacher und sicherer, das erste Startflag in OnTick() zu setzen

Es sollte Berechnungen und Rendering gleichzeitig durchführen, auch z. B. an einem Wochenende.

 
Igor Makanu:

Ich werde nicht erraten, was passieren wird, das erste, was ich sehe, ist, dass Sie pausiert haben, um die Indikatorwerte in OnInit() zu erhalten - was wird passieren, wenn der Benutzer die TF zu diesem Zeitpunkt wechselt?

SZY: Wie würde sich Ihr Code verhalten, wenn Sie einen EA ausführen, dann das Terminal schließen und es mit einem laufenden EA wieder öffnen?

diese Varianten werden berücksichtigt

 

Bitte erinnern Sie mich an eine triviale Sache. Mein EA öffnet und schließt Aufträge im Tester normal. Jetzt arbeite ich schon seit einer Woche mit der Demo und alles ist in Ordnung. Aber in zwei Fällen, bei der Eröffnung der zweiten Bestellung (Marting), meine EA hat nicht geschlossen, beide von ihnen, wenn der Saldo positiv ist, aber nur eine hat mit der zweiten gekämpft, bis ich die Take-Order geschlossen haben. Ich habe mir das Protokoll angesehen - der Preiswar "requoting". Das sollte eigentlich kein Problem sein und sollte sich sowieso schließen, aber das tat es nicht.

Ich habe also die Funktion SEND (REQUIRED) OF ORDER CLOSING im Falle einer Bedingung nicht geschrieben. Bitte sagen Sie mir, wie ich diese Trivialität schreiben soll. Ich danke Ihnen.

 
Порт-моне тв:

Bitte erinnern Sie mich an eine triviale Sache. Mein EA öffnet und schließt Aufträge im Tester normal. Jetzt arbeite ich schon seit einer Woche mit der Demo und alles ist in Ordnung. Aber in zwei Fällen, bei der Eröffnung der zweiten Bestellung (Marting), meine EA hat nicht geschlossen, beide von ihnen, wenn der Saldo positiv ist, aber nur eine hat mit der zweiten gekämpft, bis ich die Take-Order geschlossen haben. Ich habe mir das Protokoll angeschaut - der Preiswar "requoted". Das sollte eigentlich kein Problem sein und sollte sich sowieso schließen, aber das tat es nicht.

Ich habe also die Funktion SEND (REQUIRED) OF ORDER CLOSING im Falle einer Bedingung nicht geschrieben. Bitte sagen Sie mir, wie ich diese Trivialität schreiben soll. Ich danke Ihnen.

if(GetLastError()==138)OrderClose(...);
oder den Schlupf erhöhen
 
MakarFX:
Oder erhöhen Sie den Schlupf.

Ich danke Ihnen für Ihre Antwort. Warum 138???? Ist dies eine Fehlernummer? Und um wie viel soll der Schlupf erhöht werden (bitte erläutern Sie die Bedeutung der Erhöhung). Dankeschön

 
Порт-моне тв:

Warum 138???? Handelt es sich um eine Fehlernummer?

Ja

Port mone tv:

Und um wie viel soll der Schlupf erhöht werden (bitte erläutern Sie die Bedeutung der Erhöhung).

Es liegt an Ihnen, je mehr Schlupf, desto weniger Requotes.

 
MakarFX:

Wie geht man mit einem terminalen Einfrieren um?

Der Code ist einfach, aber er ist sehr arbeitsintensiv.

Seltsam...

Ich habe es mit int start() anstelle von OnCalculate gemacht und es hängt überhaupt nicht

Und warum?

 
Andrey Sokolov:

Es ist notwendig, Berechnungen und Rendering sofort durchzuführen, auch z.B. an Wochenenden.

Die Indikatoren arbeiten in einem Thread, wenn einer wartet, warten alle anderen, bis sich das Terminal aufhängt.
Beim Start von MT kann die Initialisierung des Indikators (-s) vor der Initialisierung der Terminalvariablen erfolgen, d.h. es ist ein Kinderspiel, einen Hänger abzufangen.

Grund der Beschwerde: