Wie programmiert man? - Seite 311

 

Hallo Mladen, wie immer, du rockst!

mladen:
Terrance Verwenden Sie in diesem Fall Close[0]. Fast jeder EA verwendet Close für diesen Zweck, also denke ich, dass es auch bei dir funktionieren wird
 

...

Wenn Ihr EA nur ausgeführt wird, wenn der Balken beginnt, kann das mehrere Gründe haben:

- es ist begrenzt auf die Arbeit nur auf einen neuen bar. Dieser Ansatz hat einige Probleme, wenn Trailing-Stops und einige ähnliche Dinge zu verwalten sind, aber wenn es mit festen Stop-Loss und Take-Profit als es ist alles das gleiche funktioniert

- oder er prüft Signale bei einem geschlossenen Balken (was die häufigste (und beste) Art der Signalprüfung ist). Das hat zur Folge, dass es so aussieht, als würde er es tun, wenn sich ein neuer Balken bildet, während er in Wirklichkeit Signale von einem geschlossenen Balken erhält, der sich gerade gebildet hat. Die Arbeit auf einem geschlossenen Bar-Signale ist die beste Praxis in EAs und wenn Ihr EA ist so arbeiten, besser nicht zu ändern etwas

Premeus:
Mir ist aufgefallen, dass mein EA nicht zwischen den Preisbewegungen im M1-Zeitrahmen läuft. Ich weiß, dass EA jeden Tick ausgeführt wird, der hereinkommt.

Aber ich habe gesehen, dass er bei jedem Start eines neuen Balkens ausgeführt wird.

Bin ich falsch verstanden?

Gibt es eine Möglichkeit, den EA zu zwingen, jeden Tick zu aktivieren, der hereinkommt?

Ich versuche, meinen Gewinn und Verlust zu kontrollieren, indem ich Gewinne und Verluste nicht in Pips. Wenn Spike passieren EA nicht schließen, um zu erreichen, um die Einstellung Gewinne oder Verluste, bis neue bar auftreten.

Kann mir jemand helfen, dieses Problem zu lösen.

Ich bin neu in der EA-Codierung.

Ich danke Ihnen im Voraus.
 

Vielen Dank, mladen.

Ich werde Ihren Vorschlag ausprobieren.

 

Grüße Coding-Götter,

Ich benötige Hilfe bei der Suche nach einer EA-Funktion, die die Ausführung von gesendeten Aufträgen so steuert, dass ein Auftrag nicht geöffnet werden kann, wenn bereits ein Auftrag zum selben Preis existiert.

Einfache Logik: wenn der offene Preis der Order und der Ordertyp = ein bestehender offener Preis der Order und der Ordertyp, dann Ausstieg und Suche nach dem nächsten Einstiegskriterium

Außerdem benötige ich eine Funktion, die verhindert, dass eine Order ausgeführt wird, wenn sie x Pips von einem bereits bestehenden Preis entfernt ist.

einfache Logik: wenn der Preis und der Typ der offenen Order < dem Preis und dem Typ der letzten offenen Order + x Pips ist, dann verlasse die Funktion und suche nach dem nächsten Einstiegskriterium

Danke!

Pip

 

...

Probieren Sie diese 2 Funktionen aus
: Erstens, um herauszufinden, ob es bereits einen Auftrag mit genau demselben offenen Preis gibt.

Zweitens, um zu prüfen, ob es einen Auftrag gibt, der weniger als nnn Punkte vom gewünschten Preis entfernt ist

.

Beide geben true zurück, wenn der Preis gleich ist oder wenn der Abstand zum Preis einiger aktuell geöffneter Orders innerhalb des angegebenen Abstands liegt

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
Grüße Coding-Götter,

Ich benötige Hilfe bei der Suche nach einer EA-Funktion, die die Ausführung von gesendeten Aufträgen dahingehend steuert, dass ein Auftrag nicht geöffnet werden kann, wenn bereits ein Auftrag zum selben Preis existiert.

einfache Logik: wenn der offene Preis der Order und der Ordertyp = ein bestehender offener Preis der Order und der Ordertyp, dann Ausstieg und Suche nach dem nächsten Einstiegskriterium

Außerdem brauche ich eine Funktion, die verhindert, dass eine Order ausgeführt wird, wenn sie x Pips von einem bereits existierenden Preis entfernt ist.

einfache Logik: wenn der Preis und der Typ der offenen Order < dem Preis und dem Typ der letzten offenen Order + x Pips ist, dann verlasse die Funktion und suche nach dem nächsten Einstiegskriterium

Danke!

Pip
 
mladen:
Es kann eine Reihe von Gründen, aber die häufigsten sind:
- Stop Loss und / oder Take Profit sind zu nah an den aktuellen Preis

- Ihr Broker ist ein ECN / STP-Typ-Broker, in diesem Fall müssen Sie zuerst eine Bestellung mit Stop Loss und Take Profit auf 0 gesetzt und nur, wenn eine Bestellung geöffnet wird, können Sie die Stop Loss und / oder Take Profit auf die gewünschten Werte (unter Beachtung der vorherigen Punkt natürlich) ändern

Hallo!

Danke für die Hilfe!

Also, wenn ich das richtig verstehe, wenn ich TakeProfit und StopLoss in OrderSend als Externe "Regeln" einfüge, funktioniert dieser EA nur bei Nicht-ECN-Brokern richtig?

Entschuldigung für mein Englisch

 

...

Ja

Bei ECN/STP-ähnlichen Brokern müssen Sie eine Order mit einem auf 0 gesetzten Stop-Loss und/oder Take-Profit eröffnen, und wenn die Order bereits eröffnet ist, können Sie den Stop-Loss und/oder den Take-Profit erst dann ändern.

pearl1:
Hallo!

Vielen Dank für Ihre Hilfe!

Also, wenn ich richtig verstehe, wenn ich TakeProfit und StopLoss in OrderSend als Externe "Regeln" einfüge, funktioniert dieser EA nur bei Nicht-ECN-Brokern richtig?

sorry für mein Englisch
 
mladen:
Ja Mit ECN/STP wie Makler müssen Sie eine Bestellung mit Stop-Loss und / oder Take-Profit auf 0 und wenn die Bestellung bereits geöffnet ist, nur dann können Sie ändern, Stop-Loss und / oder Take-Profit

Nochmals vielen Dank, so... wie kann ich das beheben? sorry

 

...

Wie ich schon sagte, müssen Sie es in 2 Schritten tun:

1. Schritt - Öffnen einer Order (mittels OrderSend()) mit Stop Loss und Take Profit auf 0 gesetzt

2. Schritt - diese Order modifizieren (mit OrderModify()) und den Stop Loss und Take Profit auf die gewünschten Werte setzen

Der Code muss also geändert werden, um die Aufgabe in 2 Schritten zu erledigen, anstatt in einem

pearl1:
Nochmals vielen Dank, also... wie kann ich das beheben? sorry
 

Neu im Programmieren

Hallo zusammen,

Ich bin neu in der Codierung und habe langsam die Sprache und Syntax zu lernen, aber haben mit einer Frage darüber, wie MT4 aktualisiert die Variablen kommen.

Ich habe versucht, Code und einfache EA, die den höchsten Gewinn zeigt eine derzeit offene Handel hatte und sollte nur aktualisieren, wenn ein neues Hoch erreicht wird, aber was geschieht, ist der Betrag bewegt sich nach unten und oben, wie der Gewinn tut, kann ich nicht scheinen, um meinen Fehler in der Code-Logik zu sehen.

Ich überprüfe, ob der ausgewählte Handel noch offen ist

t_CloseTime=OrderCloseTime(); //gibt 0 zurück, wenn die Order nicht geschlossen ist

if(t_CloseTime==0) //Order ist geschlossen, wenn nicht Null.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

Wenn die Logik korrekt ist, warum steigt und fällt die Variable "LastProfitHigh"? ....

Vielen Dank für Ihre Hilfe.

Grund der Beschwerde: