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: 3745
Beiträge: 36591
Benutzer: 5.902
Aktive Benutzer: 519
Links: 80
Wir begrüßen unseren neuesten Benutzer: Polytrade
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Stunden
- Polytrade
vor 8 Stunden
- exspas432
vor 19 Stunden
- elgaza
vor einem Tag
- DeSaint
vor einem Tag
- DeSaint123...

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 95
Gesamt: 98
Team: 0
Team:  
Benutzer:  Breakout25, ForexMax, Lena
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 9
scarpy05 befindet sich auf einem aufstrebenden Ast
Standard erster eigener EA probleme

Hallo bin neu hier und auch relativ neu im bereich der ea`s
meine Strategie war bis jetzt ein ema cross in Tretrichtung diese habe ich versucht in einen ea zu packen mit Hilfe dieser Seite http://fxeabuilder.com/ea-builder/und habe jetzt Probleme
leider reichen meine Kenntnisse nicht zu beheben und hoffe das mir hier einer helfen kann
Angehängte Dateien
Dateityp: mq4 test.mq4 (5,2 KB, 7x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 225
next user befindet sich auf einem aufstrebenden Ast
Standard

Hi,

der Code ist ja mal extrem schlecht formatiert.
Ich helfe ja wirklich gerne, aber es ist auch nicht gerade optimal, einfach einen Builder zu benutzen und Fehler korrigieren zu lassen ohne ein wenig selber reinzuschauen.

Und bitte, wenn du auf Fehler hindeutest, so gib diese genau(er) an. Ein allgemeiner Satz ala "Da is'n Fehler" sagt nicht gerade aus, das du dich überhaupt mit dem Fehler beschäftigt hast.
Dadurch werden auch die potentiellen Helfer nicht gerade motiviert.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 9
scarpy05 befindet sich auf einem aufstrebenden Ast
Standard

Hey
Ja sorry mein Fehler war heute morgen vor der Arbeit nen bisschen im Stress und hab mir nicht richtig überlegt wie ich das formulieren soll und so.
Ich habe vorher nen paar Mal versucht über YouTube Videos und Foren mir einen es zusammenzustellen die habe ich aber nie zum Laufen bekommen daher dachte ich ich Versuche es Mal mit dem builder auf der Seite und der gibt mir nur den Fehler raus das bei den Order clous Funktionen was nicht stimmt. Dazu ein paar Warnungen die mit den orderselct Funktionen zutun haben. Also vermute ich das es daran liegt das die nicht richtig definiert sind.
Mir ist noch aufgefallen das ich die fariablen für die emas noch zuschreiben muss und das der 200 ema eigentlich ein Sma werden muss.

Wen ich heute Abend wider Zuhause bin kann ich Mal den Fehler Bericht hochladen und die fehlenden Dinge zuschreiben.

Wen sie die cod in dem Editor laden sollten denke ich die gleichen Meldungen rauskommen oder zwischen ich mich da.
Sorry bin echt nicht so bewandert was die Schrift Programmierung angeht
Ich danke aber für jede Hilfe
Liebe Grüße
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 225
next user befindet sich auf einem aufstrebenden Ast
Standard

Die Fehler und Warnungen lassen doch darauf schließen, was nicht stimmt.
Angehängte Grafiken
Dateityp: jpg Fehler.jpg (134,4 KB, 10x aufgerufen)
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 9
scarpy05 befindet sich auf einem aufstrebenden Ast
Standard

Okay und auf was ?
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 225
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von scarpy05 Beitrag anzeigen
Okay und auf was ?
Was heißt für dich denn "Undeclared Identifier"?

Damit ist einfach gemeint, dass die Variable Closed, die du zum Speichern des Rückgabewertes z.B. hier
Code:
Closed = OrderClose(ShortTicket,OrderLots(),Ask,0,Red);
vorher nicht deklariert wurde. Sie exsistiert also nicht.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 9
scarpy05 befindet sich auf einem aufstrebenden Ast
Standard

Ja doch soweit hatte ich das verstanden aber nicht wie ich es beheben kann.
Das was ich versucht hatte hat nicht funktioniert und nur noch mehr Meldungen gegeben weswegen ich mich entschlossen habe dann auch Hilfe zu suchen.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 225
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von scarpy05 Beitrag anzeigen
Ja doch soweit hatte ich das verstanden aber nicht wie ich es beheben kann.
Das was ich versucht hatte hat nicht funktioniert und nur noch mehr Meldungen gegeben weswegen ich mich entschlossen habe dann auch Hilfe zu suchen.
Nicht böse gemeint, aber du solltest schon wissen, was eine Variable ist.
Wenn du "vollkommen blind" einen EA generieren lässt ist das eine Sache, aber so einen EA würde ich nicht mit echtgeld verwenden.

Zum Problem:
Eine Funktion liefert, sofern sie nicht mit dem Typ void deklariert wurde immer einen Rückgabewert.
In diesem Fall ist es die Funktion OrderClose(...), welche einen Wert vom Typ Bool liefert. Dieser Datentyp hat 2 "Zustände", True und False.
Jetzt musst du eine Variable vom Typ Bool deklarieren, um die Antwort des Funktionsaufrufs abzufangen.
Code:
bool Closed = false;
Hier mit dem vordefinierten Wert "False".
Wenn "Closed" hier
Code:
Closed = OrderClose(ShortTicket,OrderLots(),Ask,0,Red);
den Wert True erhält, so war die Funktion erfolgreich. Wenn False, dann nicht.
Im Folgenden könntest du jetzt z.B. reagieren, wenn die Funktion fehlschlägt:
Code:
bool Closed = false;
...
...
Closed = OrderClose(ShortTicket,OrderLots(),Ask,0,Red);

if(Closed == false)
{
// Was soll passieren, wenn die Funktion fehlschlägt...
}
else
{
// Was soll passieren, wenn die Funktion erfolgreich war...
}
Aber, um den Fehler zu beheben, musst du einfach nur die Variable erstellen.
Du solltest auch mal einen Blick hierrein werfen (oder hier in schlechtem Deutsch).

Musst nicht gleich programmieren, aber gerade beim Traden solltest du dich fragen, warum es sich die Programmierer "schwer machen", wo es doch
solche Builder gibt.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 9
scarpy05 befindet sich auf einem aufstrebenden Ast
Standard

hey danke das hat sehr geholfen die fehler sind wech.
die seite ist auch echt top muss ich mir am we mal genauer anschauen danke

ich habe mir mit der erklärung nochmal die fehler der anderen es die ich selbst mit youtube verfast habe angeschaut und mir ist aufgefallen das dort der gleiche fehler bzw änliche auftraten jetzt habe ich nur das problem das ich nicht weis wie ich die deklarieren kann gieb es da eine tabelle oder sowas ?

ich hänge die datei einfach mal an wen einer möchte kann ja gerne mal drüberschauen
Angehängte Dateien
Dateityp: mq4 ma cross.mq4 (12,5 KB, 1x aufgerufen)
Mit Zitat antworten
  #10 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: May 2015
Beiträge: 225
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 (vor 4 Wochen um 08:15 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
code, fehler programmierung, fxeabuilder, mql4, 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 17:56 Uhr.



-----------------------------------------------------------------------------------------------------------------------------
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.
-----------------------------------------------------------------------------------------------------------------------------