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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3822
Beiträge: 36902
Benutzer: 6.071
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Roerich
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einer Stunde
- Roerich
vor einer Stunde
- John_Liver...
vor einer Stunde
- harry1001
vor 17 Stunden
- supadog
vor einem Tag
- POCJonah7

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 63
Gesamt: 66
Team: 0
Team:  
Benutzer:  EVPVertrieb, Harryy
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 17.06.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 96
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard Brauche Hilfe zur Order Selektierung

Hallo,

ich möchte gerne eine Strategie auf mehrere Werte laufen lassen.
Da die Position auch vom EA verwaltet werden soll , bekomme ich probleme weil wenn ich ne for schleife laufen lasse um mir die offenen order anzeigen zu lassen, ignoriert er die Magicnumber , OrderComment und wtf ever ich Ihm auch sage, ich checks einfach ned warum!?!?

als Beispiel:

if(OrdersTotal() != 0 )
{


int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
Print(" Position: ",pos,"\n Order Comment : " , OrderComment(),
"\n Order Symbol: ", OrderSymbol(),"\nMagic Number: " ,OrderMagicNumber());

if( OrderMagicNumber() == MagicNumber )
{
Print ("EA: " + IntegerToString(MagicNumber) + " ist bereits mit einer Posi im Markt, Order verweigert");
// Order liegt bereits im Markt
Order_EA =1 ;
}
else
{
Order_EA=2;
}

}
}


wenn ich ne Position offen habe, zeigt er mir mit Print auch die nachricht an, aber dennoch hinterlegt er bei der nächsten Kerze Order_EA mit der 2 .... was überseh ich hier?!? hab alles mögliche ausprobiert und verzweifle so langsam

hoffe jem kann helfen


LG

Geändert von Trader6666 (17.06.16 um 16:02 Uhr)
  #2 (permalink)  
Alt 17.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Es ist immer sinnvoll den Aufruf der Orders mit der Letzten zu beginnen, d.h. die Variable pos zu decrementieren und nicht zu incrementieren. Desweiteren schrieb ich immer wieder: Schreibt den Code mittels des vorgesehenen Buttons # , dann kann man den Code viel besser lesen!

So, ich ordne, sortiere und fasse mal zusammen:

Code:
for(int pos = OrdersTotal()-1; pos >= 0; pos--) {
   if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) {
      Print(" Position: ", pos, "\n Order Comment : " , OrderComment(), "\n Order Symbol: ", OrderSymbol(), "\nMagic Number: " , OrderMagicNumber());

      if(OrderMagicNumber() == MagicNumber) {
         Print ("EA: " + IntegerToString(MagicNumber) + " ist bereits mit einer Posi im Markt, Order verweigert");
         //Order liegt bereits im Markt
         Order_EA =1 ;
         break;
      } else {
         Order_EA=2;
      }
   }
}
traderdoc
asfranz likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 18.06.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 96
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

vielen Dank Doc, so hats geklappt


danke für den Hinweis mit dem code, werd ich das nächste mal tun


Ich versuche auch Teilverkäufe mit einzubauen, nach dem Teilverkauf,
wird die offene Position aber nicht mehr als die gleiche erkannt und auch nicht mehr vom EA verwaltet, so das der EA bei erneutem Signal eine neue Order öffnet, obwohl die Teilposition, vom gleichen EA ja auch die gleiche MagicNumber hat, wenn man mit der Maus über die Positionsanzeige geht, wird einem die ID auch angezeigt. Woran liegt das, bzw wie kann man hier vorgehen,den wert ermitteln, damit der EA weiß, dass das noch die gleiche Posi ist???

LG
  #4 (permalink)  
Alt 18.06.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 565
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ich glaub da hilft "OrderModify" oder so.
  #5 (permalink)  
Alt 18.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich kenne den Rest Deines Programms nicht. Aber ich kann Dir sagen wie der u.g. Code funktioniert.

Es wird mit der zuletzt ins Orderbuch aufgenommenen Order begonnen. Entspricht die OrderMagicNumber der vergebenen MagicNumber, dann wird neben der Printmeldung die Variable Order_EA auf 1 gesetzt und die Selektion abgebrochen, denn der EA erkennt damit, dass eine Orde existiert. Wird eine Order selektiert, die nicht der MagicNumber entspricht, dann wird solange Order_EA auf 2 gesetzt, bis evtl. eine Order auftaucht, die der MagicNumber entspricht.

D.h., wenn am Ende der Selektion die Variable Order_EA = 2 steht, dann gab es keine Market- oder PendingOrder, die der MagicNumber entsprach. Und wenn Du für jedes Chart eine andere MN vergibst, bedeutet das, dass in diesem Cahrt mit der MN keine Market- bzw. PendingOrder existiert.

D.h. wiederum, unter Beibehält der MN, sollte auch nach einem Teilverkauf die Variable Order_EA = 1 stehen und damit signalisieren, dass noch eine Order existiert.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 18.06.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 96
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

@ MA-EA glaub du hast mich falsch verstanden aber danke dennoch für den versuch.


@Doc
ja genau das dachte ich ja auch, dass es auch bei Teilverkäufen sich ja immer noch um die gleiche MagicNumber handelt, die mir ja per MouseOver auch angezeigt wird wenn ich auf die offenen Positionen gehe. Im Bild sieht man , das der EA das ignoriert und ne neue Order aufmacht.

Freitag Abend konnte ich auch keine weiteren Tests mehr machen, war nicht mehr viel los. hier mal mein Code, vllt entdeckst du ja nen Fehler den ich übersehe.

Code:
int start()
{                                                                                             
          double BB_U   = iBands(Symbol(), 0,BB_Period,BB_Deviation,0, PRICE_CLOSE,1,1);
          double BB_L   = iBands(Symbol(), 0,BB_Period,BB_Deviation,0, PRICE_CLOSE,2,1);
          double C      = Close[1];
          double C2     = Close[2];                           
                                     
// Begin der Setup Sektion, Abfrage erfolgt bei jeder neuen Kerze ---------------------------------------------------                                                                                                             
          if(  BarCount != Bars  )
          {                                             
               Trend_();             //Trend bestimmen 
               Target();             //Maximal-Ziel...drüber/drunter wird nicht mehr gehandelt
               TradeperBar   =    0; //Max. 1 Trade pro Kerze erlaubt
               BarCount      = Bars;                                            
               //Long Setup               
               if( C2 < BB_U   && C > BB_U )
               {
                L_SET = 1;
               }
               else
               {
                L_SET = 0;
               }  
               // Short Setup                  
               if(C2 > BB_L   && C < BB_L)
               {
                S_SET=2;
               }      
               else
               {
                S_SET=0;
               }              
// Keine offenen Order im Markt ------------------------------------------------------------------------               
        
         if(OrdersTotal() == 0)
         {
          //Long Trade , falls alle Parameter übereinstimmen                                                
          if( L_SET == 1 && TimeTrade() == true &&  Trend == 1 && Long_Richtung == true && TG_LONG == 0 )
          {
           double Long = OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,Ask - (SL*pips),Bid + (TP*pips),NULL ,MagicNumber,0,clrLime);
           TradeperBar = 1;
           BE          = 0;
           TVK1_Done   = 0;
           TVK2_Done   = 0;
           Order_EA    = 1;
          }                                 
                                 
          if(  S_SET == 2 && TimeTrade() == true && Trend == 2  && Short_Richtung == true && TG_SHORT == 0 )                                  
          {
           double Short = OrderSend(Symbol(),OP_SELL,LotSize,Bid,0,Bid + SL*pips,Ask - TP*pips,NULL,MagicNumber,0,clrRed);
           TradeperBar = 1;  
           BE          = 0;
           TVK1_Done   = 0;
           TVK2_Done   = 0;
           Order_EA    = 1;  
          }
          
         }
// Ende der Sektion--------------------------------------------------------------------------------------------------------       
       
                            
//offene Posi´s schauen ob eine Order vom EA schon läuft--------------------------------------------------------------------          
                         
         if(OrdersTotal() != 0  )
         {                                  
          for(int pos = OrdersTotal()-1; pos >= 0; pos--) 
          {
           if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) 
           {
            Print(" Position: ", pos, "\n Order Comment : " , OrderComment(), "\n Order Symbol: ", OrderSymbol(), "\nMagic Number: " , OrderMagicNumber());
            //offene Position vom EA gefunden, Order verweigern                  
            if(OrderMagicNumber() == MagicNumber) 
            {  
               Print ("EA: " + IntegerToString(MagicNumber) + " ist bereits mit einer Posi im Markt, Order verweigert");
               Order_EA =1 ;
               
//Trade verwalten ---------------------------------------------------------------------------------------------------------               
               if(BE == 0)                                                                                                                         
               {
                MoveToBE();
               }
               if(BE == 1)
               {
                SL_Move();
               }
               if(TVK1_Done == 0 || (TVK1_Done == 1 && TVK2_Done == 0) )
               {
                CheckForTVK(); 
               } 
                break;
            }
// Keine Order vom EA bei den offenen Posi´s dabei              
            else 
            {
             Order_EA=2;
            }
           }
          }//Schleifenende
         }
//Ende der Sektion-----------------------------------------------------------------------------------------------------------------
         
                                
// Tradeausführung wenn EA noch nicht im Markt ist                                
         if(Order_EA == 2)
         {                                                
          if( L_SET == 1 && TimeTrade() == true &&  Trend == 1 && Long_Richtung == true &&  TG_LONG == 0 )   
          {                                
           double Long = OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,Ask - (SL*pips),Bid + (TP*pips),NULL,MagicNumber,0,clrLime);
           TradeperBar = 1;
           BE          = 0;
           TVK1_Done   = 0;
           TVK2_Done   = 0;
          }  
          
          if(  S_SET == 2 && TimeTrade() == true && Trend == 2  && Short_Richtung == true && TG_SHORT == 0 )
          {                                 
           double Short = OrderSend(Symbol(),OP_SELL,LotSize,Bid,0,Bid + SL*pips,Ask - TP*pips, NULL,MagicNumber,0,clrRed);
           TradeperBar = 1;  
           BE          = 0;
           TVK1_Done   = 0;
           TVK2_Done   = 0;                                 
          }           
                                                                           
         }
//Ende der Sektion--------------------------------------------------------------------------------------------------------------                                  
         }// Ende der ganzen Setup Sektion                  
         
       Comment("Kontostand: " , AccountBalance(),"\nTG_Long: " ,TG_LONG, "\nTG_Long: " , TG_SHORT, "\nMagic: " ,OrderMagicNumber(), "\nOffene Orders: " ,OrdersTotal(),
               "\nTrend: " ,Trend, "\nTradingZeit: ", TimeTrade(), "\nUP_Kreuzung: " , L_SET,"\nDOWN_Kreuzung: ",S_SET , 
               "\nTVK 1 Status: " , TVK1_Done, "\nBE_Status: " ,BE );
                 
return(0);
}
Angehängte Grafiken
Dateityp: png DD.png (39,1 KB, 7x aufgerufen)
  #7 (permalink)  
Alt 18.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Mal abgesehen von der unterschiedlichen Basis bei der SL- und TP-Berechnung, denn auch bei der TP-Berechnung ist bei einer BuyOrder vom Ask auszugehen, denn dort liegt im Endeffekt der OpenPrice, sollte der Rückgabewert der Funktion OrderSend() mit int deklariert werden, denn hinter diesem Rückgabewert verbirgt sich die TicketNumber.
Die Slippage ist gleich 0!!. Das wird im Demo gut gehen, aber nicht auf inem Realkonto.
Definitiv besitzt auch die Order nach der Teilschließung noch dieselbe MagicNumber.
Arbeitest Du mit ein und demselben Währungspaar gleichzeitig auf verschiedenen Timeframes?

Ansonsten kann ich nichts weiter feststellen. Eine Unbekannte bleiben die anderen Funktionen, deren Code nicht einsehbar ist.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 18.06.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 96
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

hey doc,

ja das mit der Slippage und dem Bid/Ask is mir bewusst, EA läuft noch ned rund, deswegen hab ich das noch so stehen lassen, auf demo geht ja alles

Der EA soll auf mehrere Werte laufen, nie auf einen wert mit verschiedenen TimeFrames. MagicNumber hab ich mit extern double angelegt, damit ich nicht für jeden wert einen eigen EA schreiben brauch.

Danke für den Tipp mit mit der intialisierung der OrderSend Funktion,
OrderModify müsste demnach auch mit Bool initialisiert werden oder?!
Habs so aus den Docs entnommen
  #9 (permalink)  
Alt 18.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

" MagicNumber hab ich mit extern double angelegt, damit ich nicht für jeden wert einen eigen EA schreiben brauch."

Das verstehe ich nicht. Die MagicNumber sollte unbedingt mit int deklariert werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 19.06.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 96
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

moin , sorry für die Verwirrung, klar mit extern int, war wohl der Uhrzeit geschuldet
Thema geschlossen

Lesezeichen

Stichworte
mql4, order, order selektierung, programmierung, programmierung metatrader, selektierung


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 +1. Es ist jetzt 16:53 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 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.
-----------------------------------------------------------------------------------------------------------------------------