Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   StopLoss auf 0 ziehen (http://www.expert-advisor.com/forum/showthread.php?t=6165)

Ceo 06.08.18 16:39

StopLoss auf 0 ziehen
 
Hey, ich bräuchte Hilfe. Mein EA kauft und verkauft gleichzeitig das klappt auch soweit. Nun möchte ich wenn z.b. Sell ausgestoppt wird das der SL vom Buy auf 0 nachgezogen wird, also auf denn Einkaufspreis.

Bis jetzt hab ich folgendes:

Code:

if(total==1)
      {
      if(Sell>0)
     
        {
          OrderSelect(Sell, SELECT_BY_TICKET); 
          bool retrn = OrderModify(Sell, OrderOpenPrice(),FEHLT,0, 0, Red);
          if (retrn == false)
                {
                Print("OrderModify() error  ", GetLastError());
                }
                else
                Print("Check--------Sell");
        }
        else
       
      if(Buy>0)
     
        {
          OrderSelect(Buy, SELECT_BY_TICKET); 
          bool retrn1 = OrderModify(Buy, OrderOpenPrice(),FEHLT,0, 0, Red);
          if (retrn1 == false)
                {
                Print("OrderModify() error  ", GetLastError());
                }
                else
                Print("Check--------Buy");
        }

        }


Leopold 06.08.18 16:51

Hallo,

bei "FEHLT" gehört ja der StopLoss eingetragen. Dort schreibst du einfach OrderOpenPrice() rein.

---Leopold---

Ceo 06.08.18 17:01

Ja das FEHLT war mit Absicht damit am sieht was fehlt ^^

Das Problem da bekomme ich ganze Zeit ERROR 130 also SL ist zu eng.

Ceo 06.08.18 18:22

Also ich hab es soweit jetzt hinbekommen nur das Problem ist das jetzt ERROR 1 kommt. Er versucht mehr mals den StopLoss an die selbe stelle zuziehen. Wie bekomme ich den Error weg?

Code:

for(int cnt = 0; cnt < total; cnt++)
      {
      if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      Print("Error-OrderSelect: ");
     
      if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())
        {
        //---Buy
        if(OrderType() == OP_BUY)
          {
          //---
          //if(OrderSelect(Sell,SELECT_BY_POS,MODE_HISTORY))
          if(total==1)
            {
            if(OrderOpenPrice()< Ask - 20*Point)
              {
              if(OrderStopLoss() != OrderOpenPrice())
              {
              if(!OrderModify(Buy,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green))
              Print("Error: ");
              else
              Print("Check---Buy");
              return;
              }
              }
            }
          }
        else //---
          {
          //---Sell
          //if(OrderSelect(Buy,SELECT_BY_POS,MODE_HISTORY))
          if(total==1)
            {
            if(OrderOpenPrice()< Bid + 20*Point)
              {
              if( OrderStopLoss() != OrderOpenPrice())
              {
              if(!OrderModify(Sell,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red))
              Print("Error: ");
              else
              Print("Check---Sell");
              return;
              }
              }
            }
          }
      }
        }

Prüft er damit nicht ob der StopLoss am selben Platz ist? Oder hab ich jetzt einen Denkfehler
Code:

if( OrderStopLoss() != OrderOpenPrice())

Leopold 06.08.18 19:28

Hallo,

da finde ich jetzt auch nicht wirklich was, aber versuch mal bei der Ticketnummer statt "buy" oder "sell" OrderTicket() zu verwenden, vielleicht hast du ja da einen Fehler bei der Ticketnummer variable.

---Leopold---

Ceo 06.08.18 20:13

Hab ich mal Probiert, selber Fehler. Komisch nach 14 Trades kommt: Error 1. Davor funktioniert es perfekt.

traderdoc 06.08.18 20:43

Das kommt daher, wenn ein OrderModify() z.B. den StopLoss auf denselben Wert ziehen soll, wo er bereits liegt.
D.h. OrderModify() sollte nur dann angesprungen werden, wenn auch der neue StopLoss einen anderen Wert besitzt als der zu ändernde StopLoss.

traderdoc

Leopold 06.08.18 21:00

Wurde OrderSelect() richtig ausgeführt? Ich würde das überhaupt so machen, dass alles was nach OrderSelect() kommt auch nur ausgeführt wird, wenn OrderSelect() True ist.

Wie bestimmst du die Variable "total"?

---Leopold---

Leopold 06.08.18 21:03

Zitat:

Zitat von traderdoc (Beitrag 41327)
Das kommt daher, wenn ein OrderModify() z.B. den StopLoss auf denselben Wert ziehen soll, wo er bereits liegt.
D.h. OrderModify() sollte nur dann angesprungen werden, wenn auch der neue StopLoss einen anderen Wert besitzt als der zu ändernde StopLoss.

traderdoc

das macht er ja mit

if( OrderStopLoss() != OrderOpenPrice())

meiner meinung sollte das so funktionieren.

---Leopold---

MA-EA 06.08.18 22:35

Schätze mal, der SL ist kleiner als MinStopLevel().

Was benutzt Du für SL und TP Werte? Teste gerade nen EA, der genauso funktioniert. Er öffnet ne Markt-Order in die eine Richtung und setzt in die Andere ne Stop-Order, deren OOP dem SL der Market-Order entspricht.

Am besten schreiben wir da weiter. Hab eben die neueste Version hoch geladen.

http://www.expert-advisor.com/forum/...html#post41331


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:53 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum