[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 369

 

Ich teste einen EA und meine Sleep()-Funktion funktioniert nicht

Ich möchte, dass mein Expert Advisor für eine lange Zeit einfriert, nachdem der Auftrag geschlossen wurde, aber er macht stattdessen immer wieder falsche Eröffnungen.


bool cl() {if (OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
if (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
Sleep(300000000);
}

 

Auf dem Testgerät funktioniert derSchlafmodus nicht.

 

Ich würde gerne wissen, ob es möglich ist, dass mein Expert Advisor auf einen Farbwechsel des Indikators reagiert, z.B. grün-kaufen-rot-verkaufen

und auf das Aussehen der verschiedenen Symbole auf dem Bildschirm ... vielleicht gibt es eine Funktion in MT4 ?

 
unumi >> :

Ich würde gerne wissen, ob es möglich ist, dass der Expert Advisor auf eine Änderung der Indikatorfarbe reagiert, z.B. grün-kaufen rot-verkaufen

Und für das Erscheinen verschiedener Icons auf dem Bildschirm...gibt es vielleicht eine Funktion in MT4 ?

Wenn der Indikator die Farbe wechselt, dann wird entweder a) seine Linie auf verschiedenen Puffern geplottet, so dass es ausreicht, diese abzufragen, um den Zustand zu verstehen (in MT4 kann die Farbe der dynamischen Puffer nicht geändert werden, im Gegensatz zu MT5), oder b) die Indikatorlinie wird von Grid-Objekten geplottet - dann müssen Sie nur die ObjectGet(....) lesen.

Dasselbe gilt für Icons - sie können als Code über einen Puffer oder als Objekte ausgegeben werden.

 
Svinozavr >> :

Wenn der Indikator seine Farbe ändert, dann wird entweder a) seine Linie von verschiedenen Puffern angezeigt und es genügt, diese abzufragen, um den Zustand zu verstehen (in MT4 kann die Pufferfarbe nicht dynamisch geändert werden, im Gegensatz zu MT5), oder b) die Indikatorlinie wird von gr.objects angezeigt - dann müssen Sie nur die ObjectGet(....) Eigenschaften lesen.

Das Gleiche gilt für Icons - sie können als Code mit Hilfe des Puffers oder als Objekte gezeichnet werden.

>> Danke, ich habe es verstanden.

 

Gute Nacht.

Können Sie mich beraten, ich habe zwei damit zusammenhängende Fragen.

1. Wie werden die Array-Elemente bei jedem Tick auf Null gesetzt (falls dies gemäß dem Beispiel erforderlich ist).

2. Wie man die Werte der Array-Elemente korrekt addiert.

Zum Beispiel:

Bei jedem Tick werden die Elemente des Arrays gefüllt, kann 1 oder 2 oder 3 oder 4 füllen.... oder 15 Elemente,

aber ich brauche jedes Mal die arithmetische Summe der Werte der Array-Elemente.

 
gvi2504 писал(а) >>

Gute Nacht.

Können Sie mich beraten, ich habe zwei damit zusammenhängende Fragen.

1. Wie werden die Array-Elemente bei jedem Tick auf Null gesetzt (falls dies gemäß dem Beispiel erforderlich ist).

2. Wie man die Werte der Array-Elemente korrekt addiert.

Zum Beispiel:

Bei jedem Tick werden die Elemente des Arrays gefüllt, kann 1 oder 2 oder 3 oder 4 füllen.... oder 15 Elemente,

aber ich brauche jedes Mal die arithmetische Summe der Werte der Array-Elemente.

1. ArrayInitialize(ArrayName,0) Funktion.

2. Deklarieren Sie eine Variable, z. B. sum, weisen Sie ihr den Wert 0 zu, und fügen Sie dann beim Füllen des Arrays einen Wert zu dieser Variablen hinzu.

 
Integer >> :

1. ArrayInitialize(ArrayName,0) Funktion.

2. Deklarieren Sie eine Variable, z. B. sum, weisen Sie ihr den Wert 0 zu und fügen Sie dieser Variable einen Wert hinzu, während das Array gefüllt wird.

Großartig.

Genau das, was Sie brauchen. >>Vielen Dank.

 
Bion писал(а) >>

Schlaf(300000000);

Ein so langer Ruhezustand ist keine Option, selbst wenn Sleep() im Testprogramm funktionieren würde. Nach dem Öffnen des Geräts kann die Uhrzeit gespeichert werden:

LastTime=TimeCurrent();

Am Anfang der Funktion start() prüfen:

if(TimeCurrent()<LastTime+Pause)return(0);

Pause - Zeit des "Schlafens" nach dem Öffnen (in Sekunden).

 
Integer писал(а) >>

Eine so lange Schlafzeit ist keine Option, selbst wenn Sleep() im Testprogramm funktionieren würde. Nach dem Öffnen können Sie sich den Zeitpunkt des Öffnens merken:

LastTime=TimeCurrent();

Am Anfang der Funktion start() prüfen:

if(TimeCurrent()<LastTime+Pause)return(0);

Pause - Zeit des "Schlafens" nach dem Öffnen (in Sekunden).

Ich habe Ihren Rat befolgt.

datetime LastTime;
datetime Pause=3600;

int start()
{
if(TimeCurrent()<LastTime+Pause)return(0);

...

bool cl() {if(OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
if (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
LastTime=TimeCurrent();
}

Im Testgerät öffnet sich der Auftrag jedoch entsprechend der Bedingung, reagiert aber nicht auf die Zeit.

Außerdem zeigt der Tester keine Reaktion auf den Parameter "Zeit des Bestehens des schwebenden Auftrags", d.h. der Auftrag wird nicht gelöscht, wenn es Zeit ist, ihn zu löschen.

Ist das so gewollt?

Wie können wir erreichen, dass der Prüfer die Zeit berücksichtigt, die seit dem Abschluss des Auftrags vergangen ist?

Grund der Beschwerde: