Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4080
Beiträge: 38592
Benutzer: 6.373
Aktive Benutzer: 230
Links: 80
Wir begrüßen unseren neuesten Benutzer: Slumtrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor 3 Stunden
- Slumtrader
vor einem Tag
- Dario
vor 4 Tagen
- Redline
vor einer Woche
- kfiedler58
vor einer Woche
- Datoddy

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 63
Gesamt: 63
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 15.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 6
FORWARD befindet sich auf einem aufstrebenden Ast
Standard Pendingorder löschen bei Trendwechsel

mein EA löscht die offenen PendingOrder nicht, wenn der Trend wechselt.
Programmiert ist, dass offene aktive Orders bei Trendwechsel geschlossen werden... funktioniert super, nur leider bleiben alle Pendingorder drin.
Irgendwas ist falsch beim Orderdelete, ich finde den Fehler nicht

// Short Signale umsetzen
if(ShortSignal == true)
{
// eventuelle Long Order schließen
if(LongOrder>0)
{
if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
bool LongOrderGeclosed = OrderClose(LongOrder,OrderLots(),Bid,10,Blue);
if(LongOrderGeclosed==true)LongOrder=0;
}

}

{
if(OrderType()==OP_SELL)
{
// lösche Pendingorder
if (BuyStopOrder>0) OrderDelete(BuyStopOrder);
BuyStopOrder = 0;
}
}



// Short Order eröffnen
while(ShortOrder<1)
{
ShortOrder=OrderSend(Symbol(),OP_SELL,HandelsLots, Bid,10,(Bid+0.01000),(Bid-0.01000),"FORWARD",MagicNumber,0,Red);
}

{
SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,Hande lsLots,Bid-0.00100,10,(Bid+0.01000),(Bid-0.00900),"FORWARD",MagicNumber,0,Red);
  #2 (permalink)  
Alt 16.01.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 128
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
der folgende Code schliesst bzw. löscht alle Orders, den kannst Du Dir nach Deinen Wünschen anpassen und einbauen:

PHP-Code:
 for (int i OrdersTotal() -1>= 0i--) 
   { if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
      { switch (
OrderType())
         { case 
0: if (OrderClose(OrderTicket(), OrderLots(), Bid1000000)) {}; break;
           case 
1: if (OrderClose(OrderTicket(), OrderLots(), Ask1000000)) {}; break;
           case 
2: if (OrderDelete(OrderTicket())) {}; break;
           case 
3: if (OrderDelete(OrderTicket())) {}; break;
           case 
4: if (OrderDelete(OrderTicket())) {}; break;
           case 
5: if (OrderDelete(OrderTicket())) {}; break;
         } 
      }
   } 
  #3 (permalink)  
Alt 16.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 6
FORWARD befindet sich auf einem aufstrebenden Ast
Standard

Danke, die Deletefunktion arbeitet sobald eine neue Order plaziert wird.
Wie definiere ich, das er im Buysignal die StopSell löscht und
im Sellsignal die StopBuy?
Momentan löscht er immer in Trendrichtung und nicht entgegen.
Leider habe ich keine Erfahrung mit der Programmierung und lerne Stück für Stück aus dem Netz. Sicherlich kann ich case 1-5 definieren, oder?

So schaut der Abschnitt aktuell aus

PHP-Code:
// Long Signale umsetzen
              
if(LongSignal == true )
              {    
                 
// eventuelle Short Order schließen
                       
if(ShortOrder>0)
                           {
                              if(
OrderSelect(ShortOrder,SELECT_BY_TICKET))
                                      {
                                          
bool ShortOrderGeclosed OrderClose(ShortOrder,OrderLots(),Ask,10,Blue);
                                          if(
ShortOrderGeclosed == trueShortOrder=0;
                                          
                                      }
                           }   
                           
                                      
     for (
int i OrdersTotal() -1>= 0i--) 
   { if (
OrderSelect(iSELECT_BY_POSSellStopOrder))
         { switch (
OrderType())
         { case 
1: if (OrderDelete(OrderTicket())) {}; break;
           case 
2: if (OrderDelete(OrderTicket())) {}; break;
           case 
3: if (OrderDelete(OrderTicket())) {}; break;
           case 
4: if (OrderDelete(OrderTicket())) {}; break;
           case 
5: if (OrderDelete(OrderTicket())) {}; break;
         } 
      }
   } 
  #4 (permalink)  
Alt 17.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 6
FORWARD befindet sich auf einem aufstrebenden Ast
Standard

Danke, jetzt löscht er die Pendingorders.
Leider in Trendrichtung...und nicht bei Trendwechsel.
Wie formuliert man, dass wenn BuySignal wahr ist die SellStopp Positionen gelöscht werden?
  #5 (permalink)  
Alt 17.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 6
FORWARD befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
// Long Signale umsetzen
              
if(LongSignal == true)
              {    
                 
// eventuelle Short Order schließen
                       
if(ShortOrder>0)
                           {
                              if(
OrderSelect(ShortOrder,SELECT_BY_TICKET))
                                      {
                                          
bool ShortOrderGeclosed OrderClose(ShortOrder,OrderLots(),Ask,10,Blue);
                                          if(
ShortOrderGeclosed == trueShortOrder=0;
                                          
                                      }
                           }   
                           
                                      
     for (
int i OrdersTotal() -1>= 0i--) 
   { if (
OrderSelect(iSELECT_BY_POSMODE_TRADES))
      { switch (
OrderType())
         { case 
2: if (OrderDelete(OrderTicket())) {}; break;
           case 
3: if (OrderDelete(OrderTicket())) {}; break;
           case 
4: if (OrderDelete(OrderTicket())) {}; break;
           case 
5: if (OrderDelete(OrderTicket())) {}; break;
         } 
      }
   } 
  #6 (permalink)  
Alt 17.01.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 128
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

...viele Antworten bekommt man, indem man die F1-Taste benutzt, wenn sich der Cursor auf der jeweiligen MQL4-Funktion befindet, in diesem Fall:

OrderType
Returns order operation type of the currently selected order.
int OrderType();
Returned value
Order operation type of the currently selected order. It can be any of the following values:
0 - OP_BUY - buy order,
1 - OP_SELL - sell order,
2 - OP_BUYLIMIT - buy limit pending order,
3 - OP_BUYSTOP - buy stop pending order,
4 - OP_SELLLIMIT - sell limit pending order,
5 - OP_SELLSTOP - sell stop pending order.
  #7 (permalink)  
Alt 18.01.18
Neues Mitglied
 
Registriert seit: Jan 2018
Beiträge: 6
FORWARD befindet sich auf einem aufstrebenden Ast
Standard

da bin ich trotzdem nicht weiter gekommen.
Ich komme nicht aus der "Programmierer Lounge"
Trotzdem versuche ich das ganze auf die Reihe zu bekommen.

Ich habe jetzt doch weiterhin an meiner Variante festgehalten.
Der EA löscht jetzt in Trendrichtung die Limitorders, aber leider nicht die Stoporders, obwohl es gleich geschrieben ist, woran könnte das liegen?

PHP-Code:
// Short Signale umsetzen
               
if(ShortSignal == true)
               {
               
// eventuelle Long Order schließen
                     
if(LongOrder>0
                        {
                           if(
OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
                              {
                                 
bool LongOrderGeclosed OrderClose(LongOrder,OrderLots(),Bid,10,Blue);
                                 if(
LongOrderGeclosed==true)LongOrder=0;
                              }
                        }
              
        if(
BuyLimitOrder>0)
                           {
                              if(
OrderSelect(BuyLimitOrder,SELECT_BY_TICKET))
                              
                                      {
                                          
bool BuyLimitOrderDelete OrderDelete(OrderTicket());
                                          if(
BuyLimitOrderDelete == trueBuyLimitOrder=0;
                                      }
                                     
                           }              
    
                           if(
BuyStopOrder>0)
                           {
                              if(
OrderSelect(BuyStopOrder,SELECT_BY_TICKET))
                              
                                      {
                                          
bool BuyStopOrderDelete OrderDelete(OrderTicket());
                                          if(
BuyStopOrderDelete == trueBuyStopOrder=0;
                                      }
                           }     
                           

      
// Short Order eröffnen
      
while(ShortOrder<1)
        {
         
ShortOrder=OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,10,(Bid+0.01000),(Bid-0.00300),"FORWARD",MagicNumber,0,Red);
        }
        {
         
SellLimitOrder=OrderSend(Symbol(),OP_SELLLIMIT,HandelsLots,Bid+0.00050,10,(Bid+0.01050),(Bid-0.00350),"FORWARD",MagicNumber,0,Red);
        } 
        {
         
SellLimitOrder=OrderSend(Symbol(),OP_SELLLIMIT,HandelsLots,Bid+0.00100,10,(Bid+0.01100),(Bid-0.00400),"FORWARD",MagicNumber,0,Red);
        }  
        {
         
SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,HandelsLots,Bid-0.00050,10,(Bid+0.00950),(Bid-0.00250),"FORWARD",MagicNumber,0,Red);
        }
        {        {
         
SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,HandelsLots,Bid-0.00100,10,(Bid+0.00900),(Bid-0.00200),"FORWARD",MagicNumber,0,Red);
        } 
  #8 (permalink)  
Alt 18.01.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.119
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das Erste, was man für sich und andere, die einem helfen sollen, tun sollte, ist den Code ordentlich und übersichtlich schreiben. Das kann doch keiner lesen!

Also so oder so ähnlich sollte das aussehen.

Code:
//Short Signale umsetzen
if (ShortSignal == true) {     // eventuelle Long Order schließen
   if (LongOrder > 0) {
      if (OrderSelect(LongOrder, SELECT_BY_TICKET) == true) {
         bool LongOrderGeclosed = OrderClose(LongOrder, OrderLots(), Bid, 10, Blue);
         if (LongOrderGeclosed == true) LongOrder = 0;
      }
   }
              
   if (BuyLimitOrder > 0) {
      if (OrderSelect(BuyLimitOrder, SELECT_BY_TICKET)) {
         bool BuyLimitOrderDelete = OrderDelete(OrderTicket());
         if (BuyLimitOrderDelete == true) BuyLimitOrder = 0;
      }
   }              
    
   if (BuyStopOrder > 0) {
      if (OrderSelect(BuyStopOrder, SELECT_BY_TICKET)) {
         bool BuyStopOrderDelete = OrderDelete(OrderTicket());
         if (BuyStopOrderDelete == true) BuyStopOrder = 0; 
      }
   }     
                           
   // Short Order eröffnen
   while (ShortOrder < 1) {
      ShortOrder = OrderSend(Symbol(), OP_SELL, HandelsLots, Bid, 10, (Bid+0.01000), (Bid-0.00300), "FORWARD", MagicNumber, 0, Red);

      SellLimitOrder = OrderSend(Symbol(), OP_SELLLIMIT, HandelsLots, Bid+0.00050, 10, (Bid+0.01050), (Bid-0.00350), "FORWARD", MagicNumber, 0, Red);
 
      SellLimitOrder = OrderSend(Symbol(), OP_SELLLIMIT, HandelsLots, Bid+0.00100, 10, (Bid+0.01100), (Bid-0.00400), "FORWARD", MagicNumber, 0, Red);

      SellStopOrder = OrderSend(Symbol(), OP_SELLSTOP, HandelsLots, Bid-0.00050, 10, (Bid+0.00950), (Bid-0.00250), "FORWARD", MagicNumber, 0, Red);

      SellStopOrder = OrderSend(Symbol(), OP_SELLSTOP, HandelsLots, Bid-0.00100, 10, (Bid+0.00900), (Bid-0.00200), "FORWARD", MagicNumber, 0, Red);
   }
}
Der Code wurde jetzt nur ordentlich strukturiert und nicht auf Sinnhaftigkeit und Fehlern kontrolliert.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 18.01.18
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 40
Lampe befindet sich auf einem aufstrebenden Ast
Standard

Du machst dir die Arbeit den Code zu strukturieren, und lässt dann trotzdem, nicht mal den kleinsten Hinweis für den Hilfesuchenden da?

Ich werde mal versuchen dir zu helfen Forward, möchte aber darauf Hinweisen das ich selber Anfänger bin und daher nicht versprechen kann, das meine Aussagen auch richtig sind.

Wenn ich mir deinen Code anschaue würde ich sagen der Fehler liegt darin, das du keine for Schleife benutzt um die Orders durchzuzählen. Ich glaube das dies aber nötig ist, weil das Programm dann jede Order nacheinander durchgeht und abgleicht ob deine Orderbedingungen stimmen.

Ich lasse dir nun ein BeispielsCode da den du, wenn du ihn verstanden hast, auf deinen eigenen Code anpassen kannst:

Code:
//Short Signale umsetzen
if (ShortSignal == true)  // eventuelle Long Order schließen
   {
    for(int i=OrdersTotal()-1; i>=0; i--)  //1.
        {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))  //2.
          {
           if(OrderComment()==Orderkommentar) //3.
             {
              if(OrderType()==BUY_LIMIT) //4.
                {
                 bool LongOrderGeclosed=OrderDelete(OrderTicket(),clrNONE) //5.
                }
             }
          }
        }
   }
zu 1.
das ist die for Schleife die jede einzelne Order, auf die danach von dir per if befehl definierten, Bedingungen prüft.

zu 2.
SELECT_BY_POS,MODE_TRADES
Das bedeutet du suchst mit der for Schleife alle Positionen durch die aktuell vorhanden sind.

zu 3.
jetzt musst du per if Befehl deine Orders Filtern. Ich habe in diesem Beispiel OrderComment genommen. Für mich ist das ein entspannter Weg. Du kannst aber auch die Orders über die vorher zugewiesene MagicNumber filtern.

zu 4.
hiermit prüfst du den Status der Order, also ist es eine Buy_Limit, eine Sell_Limit Order oder eine Buy Order und und und. Jenachdem was du suchst. Wenn du F1 drückst bei OrderType bekommst du eine Auflistung der Ordertypen.
Im obigen Beispiel suchen wir eine BUY_LIMIT Order.

zu 5.
wenn entsprechend die obigen Bedingungen stimmen, solltest du die von dir gesuchte Order gefunden haben, und kannst nun mit OrderDelete() die entsprechende Order löschen.

Du musst soweit ich weiß IMMER wenn du mit einer Order arbeiten willst, vorher die For Schleife verwenden. Auch wenn du Orders schließen, Modifizieren oder PendingOrders löschen möchtest.

Ich hoffe das meine Ausführungen stimmen und dir weiter helfen.

Sollte ich Fehler eingebaut haben dürfen sich gerne die erfahrenen Progger eingeladen fühlen mich zu berichtigen.

MfG
Lampe
  #10 (permalink)  
Alt 18.01.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.119
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Lampe Beitrag anzeigen
Du machst dir die Arbeit den Code zu strukturieren, und lässt dann trotzdem, nicht mal den kleinsten Hinweis für den Hilfesuchenden da?
Ja, weil es mir nur um die Vorarbeit ging, lesbaren Code zu posten.
Das Fehlersuchen würde ein Vielfaches der Zeit ausmachen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
delete, mql4, pending order löschen, pendingorder, pendingorder löschen, programmierung, programmierung metatrader, programmierung mql4


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 04:09 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------