Antwort

EA soll den Handel für diesen Tag beenden, wenn ein Gewinn oder Verlust in Pips erreicht wird?

13 Antworten

birdy70

Abonnent, bbp_participant, Gemeinschaft, 25 Antworten.

Profil besuchen

vor 9 Jahren #112314

Hallo Mark,

 

In welchen Strategieblock könnte ich die Regel eingeben, wenn ich den Handel für diesen Tag beenden möchte, wenn der Tagesgewinn oder -verlust z.B. +/- 100 Pips erreicht ist?

 

Vielen Dank für Ihr Feedback,

Birdy70

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #125178

Hallo,

 

EA Wizard verfügt nicht über eine Funktion, die PL für einen aktuellen Tag zurückgibt, aber Sie können sie hinzufügen.

 

1. Öffnen Sie {EA Wizard}/code/CustomFunctions.mq4 und fügen Sie dort den folgenden Code ein:

 
double sqGetPLInPipsToday() {
   string todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plToday = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // Ausstehende Aufträge überspringen
            weiter;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
 
   for (int cc = OrdersTotal() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // Ausstehende Aufträge überspringen
            weiter;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
   
   return(plToday*gPointPow);
}
 
 
2. dann können Sie in Ihrer Regel diese neue Funktion aufrufen, die Regel könnte lauten:
IF(Ihre anderen Regeln)
und (Custom Function: sqGetPLInPipsToday() < 100) <- das bedeutet, dass PL heute kleiner als 100 Pips ist
 
DANN

Mark
StrategyQuant Architekt

0

birdy70

Abonnent, bbp_participant, Gemeinschaft, 25 Antworten.

Profil besuchen

vor 9 Jahren #125205

Hallo Mark,

 

wo ich diesen Code eintippen muss? Wenn ich auf meinem PC den Ordner C:StrategyQuant/SQEAWizard/Code öffne, finde ich eine Datei namens CustomFunctions.mql4. Wenn ich diese Datei öffne, öffnet sich der Editor von MT4 mit dem Fenster CustomFunctions. Wenn ich Ihren Code in dieses Fenster kopiere, erhalte ich nach dem Kompilieren dieses Codes 6 Fehlermeldungen!

 

Bitte helfen Sie mir.

 

Birdy70

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #125244

Hallo,

 

müssen Sie diese Funktion in diese Datei kopieren, aber nicht kompilieren, da es sich nicht um einen vollständigen EA handelt.

Der Inhalt dieser Datei wird an jeden vom EA-Assistenten generierten EA angehängt, so dass wir hier benutzerdefinierte Funktionen ablegen können.

 

Öffnen Sie also einfach den EA-Assistenten, laden Sie Ihre Strategie, fügen Sie dort die benutzerdefinierte Funktion hinzu und exportieren Sie sie in den EA. Dann sollte sie ohne Probleme kompiliert werden.

Mark
StrategyQuant Architekt

0

birdy70

Abonnent, bbp_participant, Gemeinschaft, 25 Antworten.

Profil besuchen

vor 9 Jahren #126130

Hallo Marc,

 

Es tut mir leid, aber ich verstehe das nicht! In meinem EAW-Ordner finde ich die Datei CustomFunctions.mql4. Ich konnte diese Datei mit dem MT4-Editor (in MT4) öffnen und Ihre Handelsbedingungen einfügen, die Sie mir anfangs mitgeteilt haben. Wenn ich meine EAW-Strategiedetails öffne, kann ich in der Dialogbox unter "Funktionen" die Datei "Custom Function" sehen! Aber wie kann ich Ihre Handelsregel in dieses Fenster eingeben. 

 

Vielleicht können Sie mir Schritt für Schritt erklären, wie ich diese Regel in EAW verwenden kann, oder mir eine andere Handelsregel nennen, die dem EA sagt: "Stoppe den Handel für diesen Tag, nachdem ein Gewinn oder Verlust von 100 Pips oder 100 Euro erreicht wurde"!

 

Das wäre großartig.

 

Unter der Schaltfläche "Strategieoptionen" sehe ich einige Regeln wie:

Summe der abgeschlossenen P/L (Magische Zahl / Anzahl der Aufträge)

GesamtProfits 

Gesamtverluste

Geschlossener P/L in Pips (Magic Number und Trades vor)

Geschlossener P/L in Geld (Magic Number und Trades vor)

 

Ist es nicht möglich, mit diesen Optionen eine Regel zu erstellen wie:

 

IF

Die Summe der geschlossenen BUY/SELL Orders ist > 100 Pips oder 100 Euro (zum Beispiel)

 

Dann

Handel für diesen Tag einstellen

 

Vielen Dank für Ihre Hilfe! Ich hoffe, dass es möglich ist, eine Handelsregel wie diese zu erstellen.

 

Mit freundlichen Grüßen

Birdy70

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #126137

Hallo,

 

Wenn Sie diese Funktion in die Datei CustomFunctions.mq4 kopiert haben, wird sie an jeden neuen EA angehängt, so dass Sie sie in Ihren Bedingungen verwenden können.

 

So geht's: Öffnen Sie normalerweise Ihre Strategie im EA-Assistenten. Klicken Sie auf neue Handelsregel hinzufügen, dann gehen Sie zu Funktionen -> Benutzerdefinierte Funktion und schreiben Sie in das Feld Funktion: sqGetPLInPipsToday()

Fügen Sie < 100 Vergleiche hinzu und klicken Sie auf OK, um das Dialogfeld zu schließen.

 

Das ist alles, jetzt speichern Sie diese Strategie als EA und es sollte funktionieren.

Mark
StrategyQuant Architekt

0

jastejp

Abonnent, bbp_participant, Gemeinschaft, 8 Antworten.

Profil besuchen

vor 9 Jahren #129459

Hallo Marc,

 

Ich habe EA Wizard erst kürzlich gekauft, nachdem ich es mit anderen EA-Buildern verglichen hatte, und ich bin sehr zufrieden damit, da es so viele vorgefertigte Funktionen enthält, die ich nutzen kann - ich denke, das hebt es von Ihren Konkurrenten ab, also bitte machen Sie weiter so.

 

Leider kann ich die benutzerdefinierte Funktion sqGetPLInPipsToday() hier nicht zum Laufen bringen, nachdem ich den ganzen Tag damit verbracht habe. Das Problem ist, dass der Handel immer noch weitergeht, nachdem ich mein tägliches Gewinnziel erreicht habe, und ich weiß nicht, warum, obwohl ich Ihre Anweisungen sehr sorgfältig befolgt habe. Wenn Sie sich das beigefügte Diagramm ansehen, können Sie deutlich sehen, dass der erste Handel das Tagesziel von 20 Pips erreicht hat, aber der EA setzt den Handel für diesen Tag trotzdem fort. Könnten Sie bitte einen Blick auf die angehängten Dateien werfen, um das Problem zu bestimmen.

 

Herzlichen Dank.

Herzliche Grüße,

 

Jamie

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #129552

ok, ich habe das Problem gefunden, es gab einen Fehler in meiner Funktion, unten ist die richtige.

 

 

double sqGetPLInPipsToday() {
   string todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plToday = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // Ausstehende Aufträge überspringen
            weiter;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
         Log("Vergleiche ", TimeToStr( OrderOpenTime(), TIME_DATE), " = ", todayTime);
            if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - OrderOpenPrice();
            }
         }
      }
   }
 
   for (int cc = OrdersTotal() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // Ausstehende Aufträge überspringen
            weiter;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }
         }
      }
   }
 
   return(plToday*gPointPow);
}

Mark
StrategyQuant Architekt

0

jastejp

Abonnent, bbp_participant, Gemeinschaft, 8 Antworten.

Profil besuchen

vor 9 Jahren #129560

Hallo Mark,

 

Herzlichen Dank.

Ich werde den neuen Code ausprobieren und Sie über die Ergebnisse informieren. Ich hoffe, dass einige Backtests zeigen werden, dass das Problem im Over-Trading liegt und das Skript dies beheben wird.

 

Jamie

0

jastejp

Abonnent, bbp_participant, Gemeinschaft, 8 Antworten.

Profil besuchen

vor 9 Jahren #129888

Hallo Mark,

 

Entschuldigen Sie die Verspätung, mit der ich mich hier gemeldet habe. 

 

Es funktioniert und macht genau das, was ich will. Gute Arbeit!

 

Darf ich vorschlagen, dass Sie nützliche Codes wie diesen und andere in einen Sticky-Thread des Forums aufnehmen, damit sie leicht gefunden werden können.

 

Ich danke Ihnen,

Jamie

0

ryanbrignac9764

Abonnent, bbp_participant, Gemeinschaft, 89 Antworten.

Profil besuchen

vor 8 Jahren #130754

Ich habe versucht, Ihre Zeichenfolge oben und tat genau wie Sie erklärt, aber es hält den Handel nach Anzahl der Pips erreicht. Was mache ich falsch mit dieser einfachen ea Erstellung?

0

ryanbrignac9764

Abonnent, bbp_participant, Gemeinschaft, 89 Antworten.

Profil besuchen

vor 8 Jahren #130768

Leute,

  Ich habe buchstäblich die ganze Nacht durchgearbeitet, wie Sie an meinen wenigen Beiträgen sehen können, und bekomme das einfach nicht hin. Kann mir bitte jemand im Detail erklären, was ich falsch mache.

 

Alles, was ich suche, ist eine einfache Strategie, von der ich lernen kann. Sagen Sie gehen lange, wenn EMA 10> EMA 20 UND SHORT, wenn EMA10 < EMA 20. Alles, was ich tun möchte, ist Stop-Profit bei $10 und starten Sie den nächsten Handelstag... Ich bin erschöpft von der Arbeit durch die Nacht und würde es schätzen, wenn dies so schnell wie möglich getan werden kann.

0

boraucak

Abonnent, bbp_participant, Gemeinschaft, 14 Antworten.

Profil besuchen

vor 8 Jahren #135674

hallo, 

zunächst einmal vielen Dank für all die großartige Unterstützung bei EA Wizard,

 

diese Funktion ist großartig und ich habe sie dringend gebraucht. 

Für diesen Code ist jedoch eine kleine Korrektur erforderlich. 

 

        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - OrderOpenPrice();
 
muss dieser Code sein:
 
        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } sonst {
               plToday += OrderOpenPrice() - OrderClosePrice();
 
Bitte korrigieren Sie mich, wenn ich falsch liege, da ich kein Programmierer bin und ich es durch Ausprobieren (einige Stunden) gefunden habe :/
 
Ich danke Ihnen nochmals für Ihre Unterstützung. 
am besten 

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 8 Jahren #135684

Ja, das ist richtig. Das eine OrderOpenPrice() muss ersetzt werden durch OrderClosePrice()

0

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)