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: 4978
Beiträge: 43260
Benutzer: 7.223
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 20 Stunden
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 09.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard OrderModify Error

Ich brauch mal wieder Hilfe. So weit klappt alles bei meinem EA aber er will auf Teufel kommt raus nicht den SL nachziehen. Ich hab dazu nochmal einen eigenen kleinen EA Programmiert um es besser zu verstehen aber ich verstehe nicht warum es ein Error gibt.

Code:
int LongTicket;
double ZIGZAG[4];
int MagicNumber = 11222;
int start()
{
   
      int  i = 0;
   double value = 0;
   int count = 0;

      while (count < 4)
      {
         value = iCustom(Symbol(),0,"Swing_ZZ",2,0,i);
         if (value > 0) 
         {
            ZIGZAG[count] = value; 
            count++;
         }
         i++;
         
        
         
     } 
     
     		 int bs_array[4] = {1,2,3,4};
	     int Index = ArrayMinimum(bs_array,WHOLE_ARRAY,0);
	    double Tief = ZIGZAG[Index];
   

   double ord=OrderSelect(LongTicket,SELECT_BY_TICKET);
   
   if(OrderCloseTime() != 0 || LongTicket == 0)
   
   {
   if(Open[2] < Close[2] && Open[1] < Close[1])
      {
      LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,0.0,0.0,"Long",MagicNumber,0,clrRed);
      if(LongTicket<0)
         {
            Print("Error Long",GetLastError());
            
         }
         else
            Print("Long Open");
      }

   }
   
   
   
   if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)==true) 
      {  
       if(OrderType() == OP_BUY )
         {
          if(Volume[0]==1)
            {
             bool res=OrderModify(LongTicket,OrderOpenPrice(),ZIGZAG[Index],0,0,clrAliceBlue);
             if(!res)
             {Print("Error Order Modify PrintER",GetLastError());}
            }
          
         }  
      
      }
   
   
return(0);
}
Ich hab vor wenn ein Long Order eröffnet wird soll er erst ein SL setzen bei 50 Punkten und so bald das erste Tief generiert wurde von dem ZIGZAG Indikator soll er den SL immer nachziehen aber das will er nicht. Und warum weiß ich auch nicht.
  #2 (permalink)  
Alt 10.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich mir deinen Code so ansehe, denke ich, bei dir gibt es noch ein wenig Verständnissprobleme (Grundlagen fehlen).

Gehen wir mal kurz durch:

Code:
int start()
Ist wegen Kompatibilität noch vorhanden, sollte aber durch "OnTick()" ersetzt werden. Siehe auch Update.
Bedenke das dein Code bei JEDEM Tick ausgeführt wird. Vieles im Code ist nicht bei jedem Tick sinnvoll. Du solltest Bedingungen nutzen!

Code:
int bs_array[4] = {1,2,3,4};
int Index = ArrayMinimum(bs_array,WHOLE_ARRAY,0);
double Tief = ZIGZAG[Index];
  • In dem Code, den du gepostet hast, hat "bs_array[]" keinen Sinn.
  • Die zweite Zeile ermittelt IMMER dass gleiche, nähmlich den kleinsten Wert von "1,2,3,4". Auch diese Zeile hat keinen Sinn.
  • Die dritte würde ja noch einigermaßen Sinn ergeben, jedoch wird immer! der erste Wert verwendet. Ist sicher nicht so gedacht.
  • Diese drei Zeilen sind somit unnötig und sprechen konstant immer den gleichen Wert an.
=== === === === === === === === === === === ===
Code:
double ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
  • OrderSelect() liefert nur einen Wert vom Typ "bool (true / false)". Mit "double ord" wolltest du sicher etwas anderes speichern...
  • In deinem Code bekommt "LongTicket" vor dieser Nutzung keinen Wert. Du fragst also immer! die Order mit
    der Ticketnummer "0" ab, was natürlich keinen Erfolg haben kann. Deine Double-Variable "ord" erhält dabei immer den Wert "0 (false)".
=== === === === === === === === === === === ===
Code:
if(OrderCloseTime() != 0 || LongTicket == 0)
{
   ...
  • Nach dem erfolglosen Aufruf von "OrderSelect()", wird auch "OrderCloseTime()" hier nicht erfolgreich aufgerufen.
  • Die zweite Bedingung (LongTicket ist ja 0) sorgt für das Ausführen des if-Blocks. LongTicket bekommt hier
    also endlich einen Wert und eine Order wird eröffnet.
=== === === === === === === === === === === ===
Code:
if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)==true) 
{  
   if(OrderType() == OP_BUY)
   {
      if(Volume[0]==1)
      {
         bool res = OrderModify(LongTicket,OrderOpenPrice(),ZIGZAG[Index],0,0,clrAliceBlue);
         
         if(!res)
            {Print("Error Order Modify PrintER",GetLastError());}
      }
   }
}
  • "OrderTicket()" liefert die Ticketnummer der AKTUELL SELEKTIERTEN Order. Zum einen ist zu diesem Zeitpunkt keine Order
    selektiert (siehe vorherige Anmerkungen), zum anderen ist ein Aufruf von "OrderTicket()" IN der Funktion "OrderSelect()" logischerweise
    vollkommen unlogisch!
  • Das "== true" kann auch weggelassen werden.
  • Sicher, das du das Volumen mit "1" vergleichen willst? Vielleicht solltest du mal nachschauen, was das Volumen ist.
  • Wegen der vorherigen Punkte dürftest du also erst garnicht zu "OrderModify()" kommen. Und bedenke auch bitte,
    was ich weiter oben zu "ZIGZAG[Index]" geschrieben habe.
  #3 (permalink)  
Alt 10.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard

Ich hab mir mal paar Anleitungen angeschaut und mal denn Code verbessert.

Code:
int LongTicket = 0;
extern int StopLoss = 1000;


void OnTick()
{
  double StopLossLevel;
  
  StopLossLevel = Bid - StopLoss*Point;
  
  //---
  
 bool Ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
  if(OrderCloseTime() != 0 || LongTicket == 0)
   {
   if(Open[2] < Close[2] && Open[1] < Close[1])
   {
   
  LongTicket = OrderSend(Symbol(),OP_BUY,1.0,Ask,0,StopLossLevel,0.0,"Buy Order");
  
  if(LongTicket < 0)
   {
    Print("Error");
    
   }
   else
     {
      Print(" Ticket # ist: " +string(LongTicket));
     }
   }
   }

   //---
   double val; 
   int val_index=iLowest(NULL,0,MODE_LOW,14,4); 
   if(val_index!=-1) val=Low[val_index]; 
   else PrintFormat("Error in call iLowest. Error code=%d",GetLastError());
   
   Comment("Low ist: ",val_index);
      
    //---
  
            
         
       
      
      
      
   //---
  if(Volume[0]==1)
  if(LongTicket > 0)
  if(StopLossLevel < val_index)
   {
    bool res=OrderModify(OrderTicket(),OrderOpenPrice(),val_index,0,0,clrAliceBlue); 
    if(!res)
      Print("OrderModify ERROR. ErrorPR: ",GetLastError());
      else
        {
         Print("OrderModify hat funktioniert!");
        }
   }
Jetzt hab ich nur das Problem ich möchte gerne bei Korrekturen das Stoploss nachziehen aber das kommt bei mir nicht ganz hin mit dem ZIGZAG Indikator geht es irgendwie nicht weil die "value" immer falsch ist jetzt möchte ich es mit iLowest probieren aber das bekomme ich auch nicht so ganz hin was mache ich falsch?
  #4 (permalink)  
Alt 10.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Bitte gründlich durchlesen, dann findest du auch den Fehler.
Manche Sachen habe ich schon in meinem vorherigen Post erwähnt. Diese hast du aber nicht korrigiert!

Code:
double StopLossLevel;
StopLossLevel = Bid - StopLoss*Point;
vereinfachen wir das mal...
Code:
double StopLossLevel = Bid - StopLoss*Point;
=== === === === === === === === === === === ===
Code:
bool Ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
  • Genau wie in deinem vorherigen Post, ist auch in diesem Code "LongTicket" OHNE Wert (Ticketnummer). Du versuchst hier schon wieder
    die Order mit der Ticketnummer "0" zu selektieren, was natürlich zu einem erfolglosen "OrderSelect()" führt.
  • Außerdem fängst du hier zwar den Rückgabewert von "OrderSelect()" ab (diesmal auch mit richtigem Variablentyp), aber du machst
    nichts weiter damit. Üblicherweise sollte "OrderSelect()" in nem if aufgerufen, und der if-Block nur bei Erfolg ausgeführt werden.
  • Also kurz zusammengefasst: Hier wird KEINE Order selektiert!
=== === === === === === === === === === === ===
Code:
if(OrderCloseTime() != 0 || LongTicket == 0)
"OrderCloseTime()" kann nur bei einer zuvor selektierten Order arbeiten, was, wie grad oben erklärt, NICHT der Fall ist.
=== === === === === === === === === === === ===
Code:
if(Volume[0]==1)
{
   if(LongTicket > 0)
   {
      if(StopLossLevel < val_index)
      {
         bool res=OrderModify(OrderTicket(),OrderOpenPrice(),val_index,0,0,clrAliceBlue);
         
         if(!res)
            Print("OrderModify ERROR. ErrorPR: ",GetLastError());
         else
            Print("OrderModify hat funktioniert!");
      }
   }
}
  • "LongTicket" hätte hier zwar eine gültige Nummer (sofern OrderSend zuvor nicht fehlschlug), aber du kommst trotzdem nicht
    zu "OrderModify()" durch.
  • Schau dir mal bitte "Volume[0]==1" genauer an und schlag nach, was "Volume" ist.
  • Die Zeile
    Code:
    if(StopLossLevel < val_index)
    ist sinnlos. Hier fragst du ab, ob der "StopLossLevel" (Preis -> Gleitpunktzahl) kleiner als "val_index" (Kerze, deren
    Low-Wert du "val" zugewiesen hast -> Ganzzahl) ist.
  • Wie weiter oben bereits erklärt, ist KEINE Order selektiert!!!
    Die Funktionen "OrderTicket()" und "OrderOpenPrice()" führen
    in deinem "OrderModify()" also zu einem Fehler.
  • In "OrderModify()" benutzt du als dritten Parameter die Ganzzahl "val_index" (Index der Kerze von iLowest()), obwohl hier
    der Stoploss gefordert ist (deine Variable "val", die den Low-Wert der Kerze beinhaltet, welche du mit "val_index" ermittelt hast).
  #5 (permalink)  
Alt 11.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard

Ich verstehe das mit LongTicket noch nicht so ganz also LongTicket =0; ist ja falsch. Aber wie weise ich ihm denn einen Wert zu? Ich möchte ja genau dieses Ticket aufrufen.

Fangen wir mal ganz von vorne an mir geht es ja in erster Linie darum das nur 1 Order eröffnet wird. Ich hab jetzt gesehen das kann ich auch mit
Code:
If(OrdersTotal()==0)
machen.

So dann schaut er ob die Bedienung stimmt und ist so lange in einer schleife bis LongTicket größer als 0 ist also 1.

Code:
   if(Open[2] < Close[2] && Open[1] < Close[1] )
      {
       while(LongTicket<=0)
         {
       LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,StopLossLevel,0.0,"Buy Open",MagicNumber,0,clrGreen);
       
         }
Bis jetzt ist doch alles richtig? Order mache ich wieder was mit LongTicket falsch?
  #6 (permalink)  
Alt 11.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ceo Beitrag anzeigen
Ich verstehe das mit LongTicket noch nicht so ganz also LongTicket =0; ist ja falsch.
Nicht ganz. Die Zeile
Code:
int LongTicket = 0;
in deinem Code ist ok. Hier wird LongTicket erstellt und mit "0" initialisiert. Das Problem ist, das du offensichtlich nicht wirklich weißt,
was du mit "LongTicket" machen musst (obwohl DU sie ja erstellt hast.). Der Grund, warum dein Code fehlerhaft ist, ist ja der, dass
du "LongTicket" eben KEINEN WERT gibst.
Einen echten Wert (eben eine ECHTE Ticketnummer) erhält deine Variable "LongTicket" in dieser Zeile:
Code:
LongTicket = OrderSend(Symbol(),OP_BUY,1.0,Ask,0,StopLossLevel,0.0,"Buy Order");
Du jedoch benutzt diese Variable schon VOR dieser Zeile, nähmlich bei den beiden:
Code:
bool Ord = OrderSelect(LongTicket,SELECT_BY_TICKET);
...
if(OrderCloseTime() != 0 || LongTicket == 0)
obwohl sie zu diesem Zeitpunkt eben NOCH KEINE TICKETNUMMER BEINHALTET!!!

Zitat:
Zitat von Ceo Beitrag anzeigen
Aber wie weise ich ihm denn einen Wert zu? Ich möchte ja genau dieses Ticket aufrufen.
Das tust du doch bereits in dieser Zeile
Code:
LongTicket = OrderSend(Symbol(),OP_BUY,1.0,Ask,0,StopLossLevel,0.0,"Buy Order");
aber erst NACH dieser Zeile hast du besagten Ticket!
Deine Frage lässt leider wirklich darauf schließen, das der Code 1-1 von extern übernommen wurde, und du wirklich keine
Ahnung davon hast, was da eingentlich passiert!

Zitat:
Zitat von Ceo Beitrag anzeigen
Fangen wir mal ganz von vorne an mir geht es ja in erster Linie darum das nur 1 Order eröffnet wird.
Ich denke, in erster Linie geht es dir darum, deinen Stop mit dem Indikator zu verbinden, aber naja...
Es nur auf eine Order zu beschränken ist ja nicht das Problem, welches wir hier die ganze Zeit durchgehen!

Zitat:
Zitat von Ceo Beitrag anzeigen
Ich hab jetzt gesehen das kann ich auch mit
Code:
If(OrdersTotal()==0)
machen.
Unter anderem. Aber bitte richtig und passend im Code unterbringen. Aber nochmal, ums Begrenzen ging es hier bisher doch überhaupt nicht.

Zitat:
Zitat von Ceo Beitrag anzeigen
So dann schaut er ob die Bedienung stimmt und ist so lange in einer schleife bis LongTicket größer als 0 ist also 1.
Ja, bis auf die Tatsache, das "LongTicket" NICHT 1 ist, sondern eine Ticketnummer beinhaltet (3783043 als Beispiel...).
  #7 (permalink)  
Alt 11.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard

Ach jetzt hab ich es verstanden. Nein ein bisschen Ahnung hab ich schon bin zwar noch Anfänger aber immerhin.

Also ja im Grunde möchte ich einfach meinen Stoploss angezogen bekommen. So das wenn er den Trade eingeht ich nicht auf feste Pips angewiesen bin wie mit dem TrailingStop sonder das es Variabel ist. Immer an der letzten Korrektur soll der SL gesetzt werden.

So und jetzt zu dem Code
Code:
   double val; 
   int val_index=iLowest(NULL,0,MODE_LOW,14,4); 
   if(val_index!=-1) val=Low[val_index]; 
   else PrintFormat("Error in call iLowest. Error code=%d",GetLastError());
   
   Comment("Low ist: ",val_index);
Hier zeigt er mir ja den letzten Low an. Nun möchte ich das sich mein SL immer nachzieht. Also neues Low hat sich gebildet SL zieht nach und immer so weit bis er ausgestoppt wird. Wie bekomme ich das nun hin?
  #8 (permalink)  
Alt 11.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard

So ich bin jetzt ein großes Stück weitergekommen. Erstmal will ich verstehen wie ich ganz genau mit OrderModify umgehen muss deswegen hab ich das alles mal anders gestaltet. Mein Code sieht jetzt folgendermaßen aus:

Code:
void OnTick()
{
   double StopLossLevel = Bid - StopLoss*Point;
    

   //---
   if(OrdersTotal()==0)
   if(Close[2]>Open[2] && Close[1]>Open[1])
      {
      
        
       LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,StopLossLevel,0.0,"Buy Order",MagicNumber,clrGreen);
      
       if(LongTicket < 0)
         {
          Print("Error Open Buy",GetLastError());
         }
         else
           {
            Print("Ticket # is: " +string(LongTicket));
           }
      }
      
    //---
    if(OrderType()==OP_BUY)
    if(Open[8]< Ask)
      {
      Trailing();
      }

      
   
   //---
 

    
   
   
   
return;
}


  void Trailing()
  {
   if(OrderSelect(LongTicket,SELECT_BY_TICKET))
   bool res=OrderModify(OrderTicket(),OrderOpenPrice(),Open[8],0,0);
   if(!res)
   Print("Error ",GetLastError());
   else
   Print("Check");
  }
Er zieht den Sl nach aber ich bekomme zwischen drin immer wieder Fehlermeldungen wie z.b.

2018.03.11 23:27:57.088 2017.01.03 09:00:27 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: Error 4108
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: OrderModify error 4108
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function
2018.03.11 23:27:57.088 2017.01.03 09:00:25 EaLong2.0 EURUSD,M15: Error 4108

Wo liegt jetzt genau der Fehler?
  #9 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ceo Beitrag anzeigen
Er zieht den Sl nach aber ich bekomme zwischen drin immer wieder Fehlermeldungen wie z.b.

2018.03.11 23:27:57.088 2017.01.03 09:00:27 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: Error 4108
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: OrderModify error 4108
2018.03.11 23:27:57.088 2017.01.03 09:00:26 EaLong2.0 EURUSD,M15: unknown ticket 24 for OrderModify function
2018.03.11 23:27:57.088 2017.01.03 09:00:25 EaLong2.0 EURUSD,M15: Error 4108

Wo liegt jetzt genau der Fehler?
Zieht er den Stop wirklich nach? Deine Fehler bedeuten alle das selbe: Er kennt KEINE SOLCHE TICKETNUMMER!

Kann es sein, das du deinen Code vor dem Posten um einige Zeilen verringert hast? Falls nicht, dann hast du hier immer noch
die selben Fehler:
Code:
void OnTick()
{
   double StopLossLevel = Bid - StopLoss*Point;
   
   if(OrdersTotal()==0)
   {
      if(Close[2]>Open[2] && Close[1]>Open[1])
      {
         LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,StopLossLevel,0.0,"Buy Order",MagicNumber,clrGreen);
         
         if(LongTicket == -1)
            Print("Error Open Buy",GetLastError());
         else
            Print("Ticket # is: " +string(LongTicket));
      }
   }
   
   if(OrderType()==OP_BUY)
   {
      if(Open[8]< Ask)
         Trailing();
   }
}

void Trailing()
{
   if(OrderSelect(LongTicket,SELECT_BY_TICKET))
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),Open[8],0,0))
         Print("Error ",GetLastError());
      else
         Print("Check");
}
  • In "OrderSend()" hast du zwischen deiner MagicNumber und der Farbe den Parameter "datetime expiration" nicht angegeben.
  • Im mittleren Teil bei "if(OrderType()==OP_BUY)" müsstest du immer einen Fehler bekommen, denn in deinem Code
    selektierst du vorher keine Order.
  • Außerdem sind deine Bedingungen nicht gut. Bei einem erfolglosen Funktionsaufruf gibst du zwar eine Meldung aus,
    setzt deinen Code aber unabhängig weiter fort. Wenn oben "OrderSend()" fehlschlägt, so arbeitest du trotzdem mit "LongTicket" weiter.
  • Du musst den Code richtig "verbinden". Zum Beispiel:
    Code:
    void OnTick()
    {
       double StopLossLevel = Bid - StopLoss*Point;
       
       if(OrdersTotal()==0)
       {
          if(Close[2]>Open[2] && Close[1]>Open[1])
          {
             LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,StopLossLevel,0.0,"Buy Order",MagicNumber,clrGreen);
             
             if(LongTicket == -1)
                Print("Error Open Buy",GetLastError());
             else
                Print("Ticket # is: " +string(LongTicket));
          }
       }
       else
       {
          if(Open[8]< Ask)
             Trailing();
       }
    }
    
    void Trailing()
    {
       if(OrderSelect(LongTicket,SELECT_BY_TICKET))
          if(OrderType() == OP_BUY)
             if(!OrderModify(LongTicket,OrderOpenPrice(),Open[8],0,0))
                Print("Error ",GetLastError());
             else
                Print("Check");
    }
  #10 (permalink)  
Alt 13.03.18
Ceo Ceo ist offline
Mitglied
 
Registriert seit: Jan 2018
Beiträge: 47
Ceo befindet sich auf einem aufstrebenden Ast
Standard

Hey, also die Punkte habe ich verbessert jetzt funktioniert es auch besser nur kommt jetzt so bald eine Order offen ist der Fehler ERROR 1 obwohl der SL nachgezogen wird in einem Englischen Forum hat einer gemeint das passiert wenn der SL schon nachgezogen ist das Programm es aber auf die selbe ziehen will stimmt das? Sonst hab ich nicht wirklich was gefunden was genau der Fehler ist. Also der Code bis jetzt:

Code:
void OnTick()
{
   double StopLossLevel = Bid - StopLoss*Point;
   
   if(OrdersTotal()==0)
   {
      if(Close[2]>Open[2] && Close[1]>Open[1])
      {
         LongTicket = OrderSend(Symbol(),OP_BUY,1,Ask,0,StopLossLevel,0.0,"Buy Order",MagicNumber,0,clrGreen);
         
         if(LongTicket == -1)
            Print("Error Open Buy",GetLastError());
         else
            Print("Ticket # is: " +string(LongTicket));
      }
   }
   else
   {
      if(Open[8]< Ask)
         Trailing();
   }
}

void Trailing()
{
   if(OrderSelect(LongTicket,SELECT_BY_TICKET))
      if(OrderType() == OP_BUY)
         if(!OrderModify(LongTicket,OrderOpenPrice(),Open[8],0,0))
            Print("Error ",GetLastError());
         else
            Print("Check");
}
Thema geschlossen

Lesezeichen

Stichworte
error, fehler, mql4, ordermodify, ordermodify error, 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 06:14 Uhr.





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