Einzelnen Beitrag anzeigen
  #10 (permalink)  
Alt 20.07.17
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von scarpy05 Beitrag anzeigen
... jetzt habe ich nur das problem das ich nicht weis wie ich die deklarieren kann gieb es da eine tabelle oder sowas ?
Für die Konstanten und Funktionen von MQL schaust du am besten in der Dokumantation nach.
Für eigenes gibt es logischerweise keine Tabelle. Wie du Variablen deklarieren kannst, siehst du auch in der Dokumentation.


So, gehen wir mal den Fehlerbericht durch, wa?
(Hab den Code etwas formatiert. Weniger Zeilen und übersichtlicher...)



1. Emty controlled Statement found
  • Warnungen sind nicht immer wichtig, diese aber schon.
  • Sie bezieht sich u.a. auf folgenden Code
    Code:
    if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true);
    {
       bool ShortOrderGeclosed = OrderClose(ShortOrder,OrderLots(),Ask,10,Blue);
       if(ShortOrderGeclosed==true) ShortOrder=0;
    }
  • Hier hast du nach der If-Klammer ein Semikolon stehen, daher die Warnung "empty". Der Code in den geschweiften Klammern wird "ignoriert".

2. Symbole - Function not defined
  • Bezieht sich u.a. auf
    Code:
    while(LongOrder<=0)
    {
       LongOrder = OrderSend(Symbole(0),OP_BUY,HandelsLots,Ask,10,0,0,"MAXing LONGE",MagicNummer,0,Green);
    }
  • Die Funktion um das aktuelle Finanzinstrument zu ermitteln heißt Symbol() und wird ohne Parameter aufgerufen. Also schmeiß das "e" und die Null raus.
  • Außerdem ist hier eine Schleife unpassend. Deine Bedingung verrät mir, dass du solange eine Order senden willst, bis es geklappt hat.
    Allerdings stellst du dir hier selbst ein Bein, da OrderSend(...) im Misserfolg -1 liefert, was deine Bedingung weiter bestehen lässt.
    Da ein Misserfolg oft auf fehlerhafte Parameter zurückzuführen ist, landest du hier in eine Endlosschleife.
    Vergiss die Schleife und frag einfach mit if ab. Da ein Fehler oft in den Parametern liegt, ist es auch sinnlos diese ein zweites mal zu senden.

3. OrderTakeProfit - Undeclared Identifier
  • Bezieht sich u.a. auf
    Code:
    bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit,0,Yello);
  • Hier möchtest du die Funktion OrderTakeProfit() aufrufen, vergisst allerdings die Klammern, welche jeder Funktionsaufruf haben muss, auch wenn diese leer sind.

4. Yello - Undeclared Identifier
  • Bezieht sich u.a. auf
    Code:
    bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit,0,Yello);
  • Die Konstanten Namen für Farben beginnen bei MQL immer mit "clr".
  • Bei deinem Yello fehlt außerdem das "w". Richtig: "clrYellow"

5. StoppLoss && OrderAngepasst - Undeclared Identifier
  • Klassischer Fehler bzgl. der "Sichtbarkeit / Gültigkeit" von Variablen.
  • Bezieht sich u.a auf
    Code:
    //SL Long Deals Setzen 
    if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
    {
       if(OrderCloseTime()==0 && OrderStopLoss()==0)
       {
          double StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits);    
          bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit,0,Yello);
       }
    }
    
    //SL Short Deals Setzen 
    if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
    {
       if(OrderCloseTime()==0 && OrderStopLoss()==0)
       {
          StoppLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100)),Digits);    
          OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit,0,Yello);
       }
    }
  • Innerhalb des ersten If-Blocks erstellst du die Variablen "double StoppLoss" & "bool OrderAngepasst".
  • Variablen sind allerdings, sofern sie nicht global (außerhalb jeder Funktion) erstellt werden, immer nur in dem Block existent, in dem sie erstellt wurden.
  • Innerhalb des zweiten If-Blocks (und jedes weiteren darunter) versuchst du jetzt diese beiden Variablen zu nutzen.
    Du befindest dich jedoch schon in einem vollkommen anderen Block (als in dem, in welchem du die Variablen erstellt hast), weshalb die Variablen "StoppLoss" & "OrderAngepasst" unbekannt sind.
  • Entweder du erstellst in jedem Block eigene "double StoppLoss" & "bool OrderAngepasst", oder du deklarierst sie ganz oben außerhalb von jeder Funktion und jedem Block, dann kannst du sie überall nutzen.
    Dann musst du beim ersten If-Block den Datentyp vor den Variablen entfernen.

6. TakeProfit - Undeclared Identifier
  • Das gleiche wie in Punkt 5.

7. ')' Not all controll Paths return a Value
  • Die Funktion
    Code:
    int start()
    ist mit "int" deklariert. Der Datentyp einer Funktionsdeklaration ist gleichzeitig auch der Datentyp des Rückgabewertes. Alle Funktionen außer mit "void" deklarierte, müssen einen Wert zurückliefern.
    Nimm hier einfach den Standard "return 0;"

Die anderen Warnungen Kurz:
  • Implicit Conversion from 'Number' to 'String'
  • ===>>> Immer wenn ein String "gefordert" ist, du aber eine Variable eines nummerischen Datentyps angibst.
  • Z.B:
    Code:
    int zahl = 199234;
    
    Alert("Der zweite Parameter wird automatisch in ein String konvertiert und liefert besagte Warnung",zahl);
    ----------------------------------------------------
    ----------------------------------------------------

  • Possible loss of Data due to Type Conversion
  • Immer wenn ein größerer Datentyp in einen kleineren konvertiert wird.
  • Z.B:
    Code:
    ObjectCreate(0,"TEST",OBJ_LABEL,0,0,0);
    int schrift = ObjectGetInteger(0,"TEST",OBJPROP_FONTSIZE);
  • ObjectGetInteger(...) hat den Datentyp "long" (8 Byte) als Rückgabewert. Hier wird das Ergebnis allerdings "nur" in einer Int-Variablen (4 Byte) gespeichert.
    Die Warnung weisst darauf hin, das es evtl. zu "Datenverlust" kommen könnte.

Geändert von next user (20.07.17 um 08:15 Uhr)