Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SL von man. Order automatisch nachziehen

Geschrieben

Hallo,

für einen Freund bastelte ich diesen kl. expert, der bei einer manuell eingeg. Order den Stopp-Loss automatisch auf entry nachziehen soll. Ist für die 5 meistgehandelten Währungspaare geschrieben. Im input kann für jedes Paar ein T2 als Schwelle eingegeben werden, wann SL auf entry modifiziert werden soll. Hatte noch keine rechte Gelegenheit zu einem Test, aber da beim Kompilieren kein Fehler festgestellt wurde, hab ich das Ding verschickt. Als Antwort kam, der expert würde den metatrader zum Absturz bringen - was bei mir nicht der Fall ist.

Wenn einer der Experten das Teil mal checken würde ...

Wenns problemlos funzt, gebe ich den EA gerne zum allg. Gebrauch frei.

Daher auch kein 'hide' tag.

Saludos

Heiko

StopLoss_2.mq4

Featured Replies

Geschrieben
Hallo,

für einen Freund bastelte ich diesen kl. expert, der bei einer manuell eingeg. Order den Stopp-Loss automatisch auf entry nachziehen soll. Ist für die 5 meistgehandelten Währungspaare geschrieben. Im input kann für jedes Paar ein T2 als Schwelle eingegeben werden, wann SL auf entry modifiziert werden soll. Hatte noch keine rechte Gelegenheit zu einem Test, aber da beim Kompilieren kein Fehler festgestellt wurde, hab ich das Ding verschickt. Als Antwort kam, der expert würde den metatrader zum Absturz bringen - was bei mir nicht der Fall ist.

Wenn einer der Experten das Teil mal checken würde ...

Wenns problemlos funzt, gebe ich den EA gerne zum allg. Gebrauch frei.

Daher auch kein 'hide' tag.

Saludos

Heiko

 

Das ist interessant, dass du für deinen Freund "gebastelt" hast und selbst nicht getestet :cold:

Der EA wird nämlich tatsächlich den Rechner überlasten und wenn du auf die Idee kommst es auf einem

Live Account auszuprobieren, könnte der "freundliche" Broker EA und Scripts ganz verbieten !

 

Kleiner Tipp: die endlose Änderung des Stopllosses und unenterbrochene Anfragen an den Server

müssen auf jedem Fall beseitigt werden

Geschrieben
  • Autor
Das ist interessant, dass du für deinen Freund "gebastelt" hast und selbst nicht getestet :nictation:

Naja, selber testen heisst stundenlang online zu sein. Da mein UMTS Inetzugang aber über

100 MB/Tg. teuer wird, schränke ich mich da ein

(Die span. Telefonica legt mir hier keine Leitung hin. (Mein expert läuft nicht bei mir))

Soll er mal selber testen, dachte ich.

 

endlose Änderung des Stopllosses

Ja, stimmt. Ich dachte der SL wird nur einmal bei erreichen der Schwelle nachgezogen.

Aber danach ja immer wieder auf den gleichen Wert, solange der Kurs über der Schwelle

bleibt. Ich denke, mit einer weiteren Bedingung ist das gestoppt. So z. B. bei Sell EURUSD:

 

if((Ask<=EURUSDsellT2) && (OrderStopLoss() > OrderOpenPrice())

{

OrderModify ...

 

 

ununterbrochene Anfragen an den Server

 

 

Da ist mein Verständnis überfragt. Ich dachte Kurse wie Bid & Ask & Infos über

laufende Pos., werden sowieso vom Server geliefert.

Wo wird da ununterbrochen der Server angefragt?

 

Wenn ich weiss wo, kann ich da ja z. B. die Bedingung aus dem Alarm einbauen:

 

... && (Seconds()==00)

 

Dann wird nur jeweils zur vollen Minute eine Anfrage gesendet.

Geschrieben

Ununterbrochene Anfragen an den Server meine ich die OrderModify Funktion().

Bei jeder Preisänderung wird eine Anfrage an den Server geschickt.

 

Ausserdem wirst du ständig die Fehlermeldung ERR_NO_RESULT bekommen,

da du immer die gleichen Parameter für SL übergibst

Bearbeitet von titanfx

Geschrieben
  • Autor
Ununterbrochene Anfragen an den Server meine ich die OrderModify Funktion().

Bei jeder Preisänderung wird eine Anfrage an den Server geschickt.

Das doch nur wenn z.B.

 

if(Ask<=EURUSDsellT2)

 

erfüllt ist. Solange die Pos. noch nicht weit genug gelaufen ist doch nicht.

Oder sonst auch?

 

Ausserdem wirst du ständig die Fehlermeldung ERR_NO_RESULT bekommen,

da du immer die gleichen Parameter für SL übergibst

Aber das & auch das weiter oben sollte doch wie zuvor beschrieben durch

 

... && (OrderStopLoss() > OrderOpenPrice()

 

nach dem 1. Modify erledigt sein, denn dann ist

 

OrderStopLoss() == OrderOpenPrice()

 

Oder bin ich auf dem Holzweg?

Geschrieben

Wo wir schon beim Thema sind. Der Metatrader bietet mir ja zum einen den statischen Stop Loss als auch den Trailing Stop an. Das "Problem" beim vorhandenen Trailing Stop ist jedoch, dass dieser erst einsetzt, wenn er den Stop auf Einstand ziehen kann. Wenn er also auf 80 Punkte eingestellt und man erst 50 Punkte im Gewinn ist, setzt er nicht ein.

 

Gibt es da auch ein Skript für einen Stop, der bereits im kleinsten Gewinn automatisch nachgezogen wird (im vorliegenden Beispiel dann auf nur noch 30 Punkte Verlust)?

Geschrieben
Das doch nur wenn z.B.

 

if(Ask

 

erfüllt ist. Solange die Pos. noch nicht weit genug gelaufen ist doch nicht.

Oder sonst auch?

 

Kontrolliere doch deinen EA im Tester, das ist doch die beste Möglichkeit

überhaupt, wenn du die Arbeit deinen EA selbst beurteilst und versthst.

Zum besseren "Debuggen" gibt es auch dir Print() - Funktion

Geschrieben
  • Autor
Wo wir schon beim Thema sind. Der Metatrader bietet mir ja zum einen den statischen Stop Loss als auch den Trailing Stop an. Das "Problem" beim vorhandenen Trailing Stop ist jedoch, dass dieser erst einsetzt, wenn er den Stop auf Einstand ziehen kann. Wenn er also auf 80 Punkte eingestellt und man erst 50 Punkte im Gewinn ist, setzt er nicht ein.

 

Gibt es da auch ein Skript für einen Stop, der bereits im kleinsten Gewinn automatisch nachgezogen wird (im vorliegenden Beispiel dann auf nur noch 30 Punkte Verlust)?

Je nach Broker hat der metatrader einen vorhandenen Trailing Stop, oder auch nicht.

 

In meinem expert Mom2 (hier im Forum) ist eine Lösung des o.g. Problems verwirklicht.

Wenn die Grenze 'Save' erreicht wird, wird der SL nachgezogen, auf einen Wert SLSave.

So wird der SL schon vor erreichen des TrailingStop nachgezogen.

Voreingestellt ist in Mom2 eine Schwelle von 55 pips Gewinn, bei der SL auf -30 pips nachgezogen wird.

Zusammengestrichen könnte man Mom2 als reines tool zum SL nachziehen umstricken.

Geschrieben
  • Autor
Kontrolliere doch deinen EA im Tester, das ist doch die beste Möglichkeit

überhaupt, wenn du die Arbeit deinen EA selbst beurteilst und versthst.

Zum besseren "Debuggen" gibt es auch dir Print() - Funktion

Sorry, da brauche ich 'nen kl. Tip: Wie kann ich im Tester eine manuelle Order eingeben?

Geschrieben
Sorry, da brauche ich 'nen kl. Tip: Wie kann ich im Tester eine manuelle Order eingeben?

 

Du kannst auch in deinem EA als erstes Order platzieren und dann alle anderen Funktionen ausführen

Geschrieben

Es sind ja schon ein paar Dinge angesprochen worden.

Eine Frage: Welchen Zweck hat "Seconds()==01" bei dir? Wenn eine Order manuell ohne Stoploss gesetzt wird, wird der SL nicht nachgezogen ok, aber warum das "Seconds() == 01" ? Willst du nur jede Minute einen Alert rausschicken? Wenn der Anwender jetzt im Livetrading sitzt, und sich entschließt keinen StopLoss zu setzen und es kommt jede Minute ein Alert, schaltet er den EA nach 2 Minuten ab ;)

 

Und:

if(Bars>1) CheckForT2EURUSD(); CheckForT2GBPUSD();
  CheckForT2USDJPY(); CheckForT2EURJPY(); CheckForT2USDCHF();

@jörg und die anderen MT4-Rookies: Welcher klassische Programmierfehler dürfte hier passiert sein? ;)

 

Weils nicht im Übungsthread ist, gleich die Auflösung:

Das if bezieht sich nur auf CheckForT2EURUSD(); , die anderen werden auch bei Bars

Wobei ich zugegebenermaßen die Abfrage hier für sinnlos halte, Bars

Geschrieben

Mensch jetzt hast Du die Lösung schon wieder verraten. Ich wäre bestimmt sehr schnell draufgekommen. :nictation:

 

Gruss Jörg

Geschrieben
  • Autor
Eine Frage: Welchen Zweck hat "Seconds()==01" bei dir? Wenn eine Order manuell ohne Stoploss gesetzt wird, wird der SL nicht nachgezogen ok, aber warum das "Seconds() == 01" ? Willst du nur jede Minute einen Alert rausschicken? Wenn der Anwender jetzt im Livetrading sitzt, und sich entschließt keinen StopLoss zu setzen und es kommt jede Minute ein Alert, schaltet er den EA nach 2 Minuten ab ;)

 

Naja, es wird nicht nur der SL nicht nachgezogen, sondern der Kollege ruiniert sich im

Extremfall sogar. Da der gute Mann etwas düddelig ist, bringt er es glatt den SL zu

vergessen. Dagegen sollten nervige alerts helfen ;-)

Klar, im Livetrading kann man den expert ja mit einem Mausklick deaktivieren.

 

klassischer Programmierfehler?

Naja, wenn nicht nur ich solche Fehler mache ...

 

Übungsthread?

Wo? Bin dabei!

 

Naja, das hier ist doch ein Übungsthread, für mich auf jd. Fall.

& ich denke da bin ich nicht allein.

 

Wobei ich zugegebenermaßen die Abfrage hier für sinnlos halte

Stimmt, die Abfrage ist hier sinnlos. Ist alles zieml. schnell zusammengeschustert -

copy & paste. Sah so einfach aus ...

 

Danke erstmal, werde die Änderungen einbauen und testen.

Geschrieben
  • Autor
Du kannst auch in deinem EA als erstes Order platzieren und dann alle anderen Funktionen ausführen

Versteh' ich nicht. Im EA Order platzieren? Im Quelltext, oder wie?

In der Plattform direkt geht ja nicht.

Geschrieben

Ja im Quelltext

In der start() - Funktion Order platzieren

 

void start()
 {
 int ticket;
 static bool placed_trade = false; // Es wird damit nur ein Trade ausgefuehrt
 
 if(!placed_trade)
  {
    ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"My order #",16384,0,Green);
    if(ticket>0) placed_trade = true;
    else 
     {       
      Print("OrderSend failed with error #",GetLastError());
      return(0);
     }
  }

  CheckForT2EURUSD(); 
  CheckForT2GBPUSD();
  CheckForT2USDJPY(); 
  CheckForT2EURJPY(); 
  CheckForT2USDCHF(); 
  
  return;
 }

 

Zusätzliches debuggen, damit du siehst was dein EA macht - ist immer sinnvoll

Du muss also die OrderModify etwas modifizieren

 

        
      if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),0,0,Red))
       {
  Print("trade sl was modified");
 } 
else 
 {
  int err= GetLastError(); 
  Print("modify sl err: ", err);
 }

 

Erst jetzt wirst du nämlich bemerken, wo dein EA immer den gleichen Fehler macht,

nach der ersten Orderänderung, versucht er bei jedem weiteren Tick die Order wiederholt

zu ändern. Ergebniss - ERROR 1 bei jedem neuen Tick, was du ohne Debugmodus gar nicht

feststellen kannst.

Und jetzt stell mal vor, du wärst der Broker und du bekommst von einem Kunden("Trader", "Programmierer") bei jedem Tick (je nach Volatlität - mehrmals pro Sekunde)

ein Serveranfrage um die SL zu ändern.

Da wird der Broker nicht lange überlegen.

 

Das ist immer empfehlenswert oder sogar zwingend erforderlich vor der jeden Serveranfrage

die Rictigkeit den zu versendenden Daten zu überprüfen und auf jede Antwort vom Server

zu warten, bevor man den Server mit weiteren Anfragen bombardiert

Es ist auch sehr sinnvoll jeder Antwort vom Server zu bewerten, schliesslich ist es auch wichtig ob Order geöffnet, geschlossen oder modifiziert wurde

Bearbeitet von titanfx

Geschrieben
  • Autor
... nach der ersten Orderänderung, versucht er bei jedem weiteren Tick die Order wiederholt

zu ändern.

Besten Dank erstmal!

Du hast das Problem könnerhaft gelöst, so weit gehen meine Programmierkenntnisse bisher nicht.

(Habe aber gerade den 'Mql - Metatrader Development Course' runtergeladen, kann nur besser werden :nictation: )

Trotzdem nochmal meine Frage, um was zu lernen:

Wird der Server auch mit Anfragen belastet, wenn ich z. B. wie zuvor beschrieben

 

if((Ask<=EURUSDsellT2)&& (OrderStopLoss() > OrderOpenPrice()))

 

setze? Ich dachte bisher, OrderStopLoss & OrderOpenPrice würden nicht extra angefragt,

sondern sowieso ausgegeben.

Oder hat dieser Weg einen anderen Fehler, den ich nicht erkenne?

Geschrieben

Die Anfrage an den Server findet nur mit der Funktion OrderModify statt

OrderStoploss und OrderOpenprice werden nicht vom Server abgefragt

Zu deiner korrigerter Variante - ja es würde funktionieren und nur eine Anfrage an den Server schicken :benedict:

 

noch besser ist:

if(OrderStopLoss()!=OrderOpenPrice())      
if(Ask<=GBPUSDsellT2)                                                                                                                
if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),0,0,Red))
 Print("Sell Order erfolgreich auf BreakEven gesetzt");
else 
{
  int err= GetLastError(); 
  Print("Modifizieren von Sell auf BreakEven fehlgeschlagen; err: ", err);
}

Bearbeitet von titanfx

  • 11 Monate später...
Geschrieben
Je nach Broker hat der metatrader einen vorhandenen Trailing Stop, oder auch nicht.

 

In meinem expert Mom2 (hier im Forum) ist eine Lösung des o.g. Problems verwirklicht.

Wenn die Grenze 'Save' erreicht wird, wird der SL nachgezogen, auf einen Wert SLSave.

So wird der SL schon vor erreichen des TrailingStop nachgezogen.

Voreingestellt ist in Mom2 eine Schwelle von 55 pips Gewinn, bei der SL auf -30 pips nachgezogen wird.

Zusammengestrichen könnte man Mom2 als reines tool zum SL nachziehen umstricken.

Hallo forextrading24

kannst du mir sagen wo ich den expert Mom2 hier im Forum finde.?

nicht mit der Suchfunktion.

Danke

Gruß Karlos

Geschrieben

Hallo ist es richtig drei Funktionen mit den drei Eckigenklammern so zu schließen.???(mom2)Ich meine die drei in einer Zeile.?

{                 
              if(Bid-OrderOpenPrice()>Point*TrailingStop)
                {
                 if(OrderStopLoss()<Bid-Point*TrailingStop)
                   {
                    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderOpenPrice()+Point*TakeProfit,0,Green);
                    return(0);
                   }}}

Gruß karlos

  • 1 Monat später...
Geschrieben

hallo liebe leute,und Forextrader.

 

Ich trade ein breakout system,und suche dafür auch ein ea,der mir den sl nachziehemn kann.

Wo ich den pip Abstand selber einstellen kann.

Gibt es sowas?

 

Gerne würde ich auch lernen,wie ich mql4 programmiere,die Anleitung sollte allerdings in deutsch sein.

gruss steve

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.