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)
-   -   Order selektieren und modifizieren (http://www.expert-advisor.com/forum/showthread.php?t=6058)

toltek 24.03.18 06:33

Order selektieren und modifizieren
 
Halle an alle,
ich versuche gerade meine erste EA zu schreiben und würde mich vorab freuen für die Unterstützung. Ich poste hier die Code. Die EA soll in einem Bullenmarkt die offene Shortorder modifizieren (Stoploss und Takeprofit neu setzen) und umgekehrt. Bei selektieren und modifizieren funktioniert aber nicht.
Kann mir jemand mitteilen, wo meine Fehler liegt?

PHP-Code:

    if(TotalOrder(OP_BUY)==0)
         {
            if(
Close[1]>Movingaverage)
               {
                  if(
StopLoss>0)
                  
SL Ask-StopLoss*_Point;
                  if(
TakeProfit>0)
                   
TP Ask+TakeProfit*_Point;
                  
//....
                  
Longorder1 OrderSend(Symbol(),OP_BUY,Handelsvolumen,Ask,0,SL,TP,"ersteEA",MagicNumber,0,clrBlue);
               } 
               
         }
//+------------------------------------------------------------------+
//|  Bärenmarkt Markt:                                            |
//+------------------------------------------------------------------+        
      
if(TotalOrder(OP_SELL)==0)
         {
            if(
Close[1]<Movingaverage)
               {
                  if(
StopLoss>0)
                  
SL Bid+StopLoss*_Point;
                  if(
TakeProfit>0)
                   
TP Bid-TakeProfit*_Point;
                  
//....
                  
Shortorder1 OrderSend(Symbol(),OP_SELL,Handelsvolumen,Bid,0,SL,TP,"ersteEA",MagicNumber,0,clrBlue);
               } 
         } 
//+------------------------------------------------------------------+
//| Bullenmarkt                                            |
//+------------------------------------------------------------------+ 
      
if(TotalOrder(OP_BUY)==0)
         {
            if(
Close[1]>Movingaverage && Close[1]>LowestClose)
               {
                  if(
StopLoss>0)
                  
SL Ask-StopLoss*_Point;
                  if(
TakeProfit>0)
                   
TP Ask+TakeProfit*_Point;
                  
//....
                  
Longorder1 OrderSend(Symbol(),OP_BUY,Handelsvolumen,Ask,0,SL,TP,"ersteEA",MagicNumber,0,clrBlue);
               } 
               
         }
 
//+------------------------------------------------------------------+
//| Wenn eine Longorder in Bärenmarkt geöffnet                                          |
//+------------------------------------------------------------------+ 
     
           
if(Close[1]<Movingaverage)
               { 
                  
bool  auswahl1 OrderSelect(Longorder1,SELECT_BY_TICKET);
                     
modifizieren OrderModify(Longorder1,0,100,100,0,clrYellow); 
              }           
                     
  
//+------------------------------------------------------------------+
//| Wenn eine Shortorder in Bullenmarkt geöffnet                                          |
//+------------------------------------------------------------------+ 
     
           
if(Close[1]>Movingaverage)
               { 
                 
bool auswahl2 OrderSelect(Shortorder1,SELECT_BY_TICKET);
                  
bool  modifizieren OrderModify(Shortorder1,0,100,100,0,clrYellow)==true
              } 


AVT 24.03.18 14:08

Zitat:

Zitat von toltek (Beitrag 40669)
Halle an alle,
Die EA soll in einem Bullenmarkt die offene Shortorder modifizieren (Stoploss und Takeprofit neu setzen) und umgekehrt. Bei selektieren und modifizieren funktioniert aber nicht. Kann mir jemand mitteilen, wo meine Fehler liegt?
PHP-Code:

//| Wenn eine Longorder in Bärenmarkt geöffnet                                                               
modifizieren OrderModify(Longorder1,0,100,100,0,clrYellow); 


Sehen wir uns an, was Du hier anordnest:
Code:

                        // ändere
OrderModify( Longorder1, // die laufende Position mit Ticketnr. Longorder1
            0,          // auf einen Eröffnungskurs bei 0
            100,        // auf einen SL bei 100
            100,        // auf einen TP bei 100
            0,          // ohne Zeitbegrenzung
            clrYellow); // mit gelber Chartmarkierung

Ich denke, Du siehst schon selbst wo die Haken sind.
Frage Dich bei jeder Zeile: 1. ist das möglich und wenn ja 2. ist das auch richtig formuliert.
Wenn Du im Editor den Cursor ins Wort OrderModify setzt und dann F1 drückst, kommt automatisch die genaue Anleitung für diesen Befehl, meistens mit Beispiel.
Kommst Du damit schon weiter? AVT

toltek 24.03.18 15:17

Erstmal danke für die schnelle Antwort und übersichtliche Kommentierung für OrderModify.
Mit der F1 Geschichte bin ich vertraut und so habe ich auch versucht mir die mql4 Sprache beizubringen. Nun weiß ich immer noch nicht wo die Haken sind.
Bitte erleuchte mich. :):)
Meinst du, dass an zweiter Stelle wo 0 steht, sollte was anderes gesetzt werden? Diese 0 steht anscheinend für Pendingorder. Oder soll ich an dieser Stelle die Funktion OrderOpenPrice() benutzen?

traderdoc 24.03.18 17:12

Zitat:

Zitat von toltek (Beitrag 40679)
Erstmal danke für die schnelle Antwort und übersichtliche Kommentierung für OrderModify.
Mit der F1 Geschichte bin ich vertraut und so habe ich auch versucht mir die mql4 Sprache beizubringen. Nun weiß ich immer noch nicht wo die Haken sind.
Bitte erleuchte mich. :):)
Meinst du, dass an zweiter Stelle wo 0 steht, sollte was anderes gesetzt werden? Diese 0 steht anscheinend für Pendingorder. Oder soll ich an dieser Stelle die Funktion OrderOpenPrice() benutzen?

Nicht nur das, sondern auch die Werte für StopLoss und TakeProfit sind falsch. Da müssen konkrete Kurswerte eingesetzt werden.

Genug Erleuchtung fürs Erste?

traderdoc

AVT 24.03.18 18:17

Zitat:

Zitat von toltek (Beitrag 40679)
Meinst du, dass an zweiter Stelle wo 0 steht, sollte was anderes gesetzt werden? Diese 0 steht anscheinend für Pendingorder. Oder soll ich an dieser Stelle die Funktion OrderOpenPrice() benutzen?

Wie traderdoc auch schon sagte, da muß OrderOpenPrice() rein - und zwar nicht nur deshalb, weil 0 für pending order ist, sondern schlicht und ergreifend, weil das eine schon laufende Order ist, die hat bereits einen Eröffnungpreis (gehabt) und den kannst Du nicht ändern!

Kleines Streichholz für mehr Licht:
Bei der Änderung (genauso wie bei der Eröffnung) will der EA ganz genau wissen wohin mit SL und TP und zwar auf Punkt und Komma genau; TP 100 und SL 100 sind also absolute Wertangaben! Nun stell Dir vor, Du bist im DAX bei derzeitigem Kurs 11.800 Long gegangen und sagst nun "setz den SL genau auf 100", dann setzt der ihn genau da hin: auf einen Kursstand von 100. Risiko 11.700 Punkte max Verlust :eek:
Noch ein Streichholz:
Du hast bei der Eröffnung schon genau ausgerechnet wohin mit den Eröffnungs-SL und -TP. Das machst Du jetzt genauso für die Änderung.

Kerze <- anzünden und los ;) AVT

toltek 17.04.18 09:34

Es hat geklappt und die EA funktioniert. Allerdings wie eine Atomuhr ohne Zeiteinstellung.
Ich meine es ist kein Gral wie ich mir vorgestellt habe.
Deshalb versuche ich bisschen Änderungen hervorzurufen.
Es geht nochmal um selektieren und modifizieren.
Ich versuche seit zwei Tagen das Problem zu lösen und gerade klopfe mit dem Kopf an die Wand.
Meine Schildkröte macht sich lustig über mich und hat die ganze Nacht um mich herum getanzt.:D

Und das Problem:
Shortorder in Bullenmarkt und Longorder in Bärenmarkt
sollten nun anhand von letzten geschlossenen Positionen modifiziert werden.
etwa so:
PHP-Code:

if(longorder in Bärenmarkt immer noch Offen ist || Longorder im minus ist)
    {
        
//Stoploss modifizieren
        
neue Stoploss 0;
        
        
// Takeprofit modifizieren
        
selektiere die letzte geschlossene Position;
    
            if( 
letzte geschlossene Position gewinnbringend war)
                {
                    
berechne den gewinn in punkten;
                                 
neue TakeprofitTakeprofit berechnette gewinn in Punkten
                
}
   } 

Der Block soll jedes mal ausgeführt werden wenn eine Order gewinnbringend schließt und zugleich eine offene longorder im Minus steht.
:confused::confused:


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:15 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