infojoerg Posted January 19, 2009 Author Report Posted January 19, 2009 nur noch mal wegen dem Verständniss: extern heißt ich benenne eine Variable?double heißt die Variable ist eine Gleitkommazahl? Dann muss es ja andere Kennzeichnungen auch noch geben oder? Was braucht man denn am häufigsten double? D. h. mit dem Extern kann ich dem User erlauben Werte zu verändern oder? gruss Jörg
FinGeR Posted January 19, 2009 Report Posted January 19, 2009 man seit ihr schnell.... es handelt sich dabei um Variablen die einen Wert zugewiesen bekommen.z.b. double StopLoss = 50.5;z.b. int StopLoss = 50;z.b. int Lindenstrasse = 5;oder draufvorbereitet werden um spaeter einen Wert zu erhaltenz.b. int counter; Wichtig wenn sie noch keinen Wert zugewiesen bekommen z.b. int counter;haben sie immer automatisch den Wert 0 beim double den Wert 0.0 Dadurch das diese ganz am Anfang stehen vor der start() Funktionnennt man sie Globale Variablen man hat von Ueberall im Code dieser Datei Zugriff darauf und kann den Wert beliebig veraendern. double und int ist fuer Zahlen Werte wobei double Gleitkommazahlen sind z.b. 4.2 oder 4.2345.. oder 0.01und int sind 4 oder 2 oder 1 ; bedeutet das ende der Zeile extern zeigt deine Variable im Parameterfenster deines expert,script,indikator
infojoerg Posted January 19, 2009 Author Report Posted January 19, 2009 Also heißt das in unserem Beispiel mit dem MACD Sample.mq4 das es eine vom Benutzer einstellbare Variablen Namens TakeProfit, Lots, TrailingStop, MACDOpenLevel, MACDCloseLevel und MATrendPeriod gibt, die alle schon einen Wert zugewiesen bekommen haben, die der Benutzer aber jederzeit ändern kann. Wenn ich was falsches schreibe bitte korrigieren. Dann könnten wir eigentlich zum nächsten Punkt kommen. Die Kommentarzeilen lassen wir aus, dann kommt jetzt int start() OK mein Tip:Hier ist der eigentliche Programmbeginn. int ist wohl eine Anweisung die am Anfang jedes Programmes stehen muss. und start () ich tippe mal das ist der Name (selbst wählbar) der Routine oder? Gruss JörgVielen Dank für die ausführliche Erklärung zu den Variablen
FinGeR Posted January 19, 2009 Report Posted January 19, 2009 die folgene Erklärung von Funktionen bezieht sich nur auf MQL4! Was ist start() ?eine Funktion! Alles was Arbeitet findet immer in Funktionen statt. Ausserhalb von Funktionen geht nix. bei MQL4 gibt es vordefinierte Funktionen und eigene Funktionen der Bereich die Grenzen einer Funktion werden mit diesen { ... } gekenzeichnet.alles was sich dort drin befindet ist die Funktion. einer Funktion kann man Werte mitgeben(Parameter) bevor sie durchlaufen wird.eine Funktion kann nach durchlaufen einen Wert zurückgeben.eine Funktion wird beim normal Aufruf 1x durchlaufen. die Position einer Funktion im Code(oben, unten vor oder nach einer anderen Funktion) ist nur Optisch Wichtig. vordefinierte Funktionen gibt es 3 int init() {...} diese Funktion wird 1x aufgerufen beim reinladen des scripts, experts, indikators ins Chartfenster int deinit {...} diese Funktion wird 1x aufgerufen beim beenden. int start() {...} diese Funktion wird bei jedem neuen Tick aufgerufen. (Wichtig und nur bei scripts 1x ohne das es Ticken muss) eigene Funktionen kann man sich selbst programmieren z.b. int Meine Funktion(int a, int b) {...} int ist das was die Funktion zurückgibt nach ihrem aufruf und durchlauf.int ist ein zahlen wert z.b. 2 oder 3 oder 0es kann auch double z.b. 5.5562 sein oder eine string z.b. "du hast mich gerade aufgerufen :)" Das was sich in(int a, int b) befindet sind die Parameter die der Funktion mitgegeben werden können.auch das können int, double oder string sein. Ein Beispielwir möchten uns eine eigene Funktion programmierender Name : AddiereFürMich diese Funktion addiert uns 2 Werte und gibt das Ergebniss zurück.double AddiereFürMich(int a, int b) { return(a+b); }a und b sind die 2 Werte mit der die Funktion arbeitet(addiert)return gibt zurück ein double(das Ergebniss). hier der Komplette Code + Erklärung im Code das was oben nicht beschrieben wurde. //+------------------------------------------------------------------+ //| Alexander Piechotta (FinGeR) mql4@gmx.de 19.01.2009 //+------------------------------------------------------------------+ /* Wichtig du kannst mich als expert benutzten oder script bedenke wenn du mich als expert benutzt rufe ich solange die start() Funktion auf(jeden Tick) bis du mich beendest.(meine Aufgabe kennst du?) aber wenn du mich als Script lдdst erledige ich meine Aufgabe 1x und beende wieder als Indikator kann du mich so nicht benutzen. :P */ #property copyright "© 2005-2012" #property link "www.metatraders.de" #property show_inputs //ich sorge dafьr das mein Parameterfenster angezeigt wird beim reinalden. extern double a = 5.4; extern double b = 3; void init() { //Comment() zeigt den Text in Klammer auf dem Chart nur oben Links und lцscht den der vorher da stand. Comment("Hallo ich bin die init() sobald es tickt wird die start() Funktion ausgefьhrt und der Text gelцscht", "\n ausser ich bin ein Script dann wird nach mir sofort die start() und dann die deinit() Funktion aufgerufen."); } void start() /// void bedeutet soviel wie NIX also diese Funktion start() gibt nix zurьck { // \n bedeutet eine neue Zeile schrift art, grцsse und Farbe kцnnen nicht verдndert werden. Comment("ich bin die start() Funktion und rechne jetzt und zeige dir ein alert Fenster mit den Ergebniss", "\n ich addiere die beiden Werte von a und b"); alert(AddiereFьrMich(a, b)); double x = AddiereFьrMich(a, b); Print("Ergebnis =", x);//ich zeige diesen Text und das ergebniss in Variable x in MT4 Reiter unten(experts) an. return(0); // immer der Rьckgabewert einer Funktion } void deinit() { Comment("");// ich Loesche alle angezeigten Kommentare. wenn ich beendet werde. } double AddiereFürMich(int a, int b) { return(a+b); } benutzt den MQL4 Editor! 2
FinGeR Posted January 19, 2009 Report Posted January 19, 2009 ein kleiner Fehler ist Eingebaut.(prüft das Ergebniss) Wer den Fehler findet bekommt eine 1+.
FinGeR Posted January 19, 2009 Report Posted January 19, 2009 ok ich erhöhe wer den Fehler findet und behebt.bekommt eine 1+ und ein Stipendium für sein 1. eigenes MTS.
Mythos Posted January 19, 2009 Report Posted January 19, 2009 wer den Fehler findet und behebt.bekommt eine 1+ und ein Stipendium für sein 1. eigenes MTS. Ich biete einen "Fehler" (obwohl ich es eher ungewünschtes Verhalten nennen würde) und 2 programmiertechnische "Unschönheiten" wobei eine davon direkt mit dem Fehler zusammenhängt. Aber ich glaub ich sollte noch nix verraten, man lernt am meisten wenn man selber draufkommt Tipp: Nehmt den Tipp ernst und überprüft mal das Ergebnis. EDIT: Ganz vergessen: Find ich klasse was hier abgeht! Wenn ihr nicht so extrem schnell wärt könnt ich auch hie und da was erklären ;)
whipsaw Posted January 19, 2009 Report Posted January 19, 2009 Find ich klasse was hier abgeht! 100% ACK! Wenn ihr nicht so extrem schnell wärt könnt ich auch hie und da was erklären ;)
Ecart Posted January 19, 2009 Report Posted January 19, 2009 oh ist das peinlich, hmm keine Ahnung... int fehlt? also Typ (Ganzzahl) int ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Ganz wichtige Erklärung für mich:extern zeigt deine Variable im Parameterfenster deines expert,script,indikator ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comment("");// ich Loesche alle angezeigten Kommentare. wenn ich beendet werde. Das hier mal bitte sehr genau erklären: Comment("") >>> also keine Leerzeile vor ("") "" >>> habe ich schon oft gesehen, aber nie verstanden. Stand immer was mit Strings bzw. Zeichenketten IMMER so ("") oder NUR so "" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Zum Thema C++ (MQL):Im Internet gibt es viele Quellen, aber ein Buch kann nicht schaden. Hier mein Tipp (liegt jetzt neben mir). € 10,95; Verlag: rororoC++von Helmut Erlenkötter 11. Auflage - Dezember 2007
FinGeR Posted January 20, 2009 Report Posted January 20, 2009 Nein solch eine Fehlermeldung mein ich nichtdiese war nicht Beabsichtig. das "?" ist normal ein Buchstabe (ä,ö oder ü)da ich Kyrillische Buchstaben habe aktiviert zeig er bei euch dieses "?" und der MQL4 Compiler kann nix damit Anfangen. = Fehlermeldung.Sorry nochmal das war nicht beasichtig.Einfach mal bitte ersetzten mit den richtigen Buchstaben DANKE! da ist noch ein Fehler drin Beabsichtigder Code arbeitet sauber aber prüft das Ergebniss. Das hier mal bitte sehr genau erklären: Comment("") >>> also keine Leerzeile vor ("") "" >>> habe ich schon oft gesehen, aber nie verstanden. Stand immer was mit Strings bzw. Zeichenketten IMMER so ("") oder NUR so "" 4 setzten. Wichtig selbst ausprobieren! Probier es einfach mal selbst mit und ohne ("")nachdem du meine "?" ausgetauscht hast.
siscop Posted January 20, 2009 Report Posted January 20, 2009 (edited) ich sehe schon was ungewöhnliches jedoch ist das schon arg init() speziell..finde aber klasse von dir FinGeR Edited January 20, 2009 by siscop
Krümel Posted January 20, 2009 Report Posted January 20, 2009 An die Coder: Die meisten Programmiersprachen basieren auf Englisch? habe ich noch nie gesehen, immer nur und sowas in der Art.Schleifen in Russisch gab's zu Ostblockzeiten, glaub ich auch, aber hat sich gegen Englisch nicht durchsetzen können. Und Schleifen können auch viel fantasievoller sein als nur if/then/else: Vatical (Gibt angeblich auch Implementierungen davon)
Mythos Posted January 20, 2009 Report Posted January 20, 2009 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Ganz wichtige Erklärung für mich:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Das hier mal bitte sehr genau erklären: Comment("") >>> also keine Leerzeile vor ("")"" >>> habe ich schon oft gesehen, aber nie verstanden. Stand immer was mit Strings bzw. Zeichenketten IMMER so ("") oder NUR so "" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Ich weiß jetzt nicht ob du das meinst, aber:"" (also zwei anführungszeichen hintereinander) stehen für einen leeren String.Ein String (also der Wert, den eine Variable mit dem Typ string zugewiesen bekommt) wird in MQL durch Anführungsstriche markiert zB "Das ist ein String". Will man jetzt nichts ausgeben so muss man das dem Kompiler sagen.string mein_string = ; //Produziert Errormeldung beim kompilierenwäre falsch da hinter dem '=' ja nichts steht. Deswegen ist der leere String einfach ein String, in dem nichts steht. Die Ich-bin-ein-String-Striche bleiben aber.string mein_string = ""; // weist mein_string den leeren String zu Die Klammern rund um den leeren String haben an sich nichts mit dem String zu tun. Hier ist der String ein Übergabeparameter an die Funktion Comment(), die Klammern gehören also zum Funktionsaufruf und "" ist der übergebene String. HTH
Krümel Posted January 20, 2009 Report Posted January 20, 2009 *g*, Interesse ist da, nur keiner der sich die Arbeit macht. Richtig. Wenn man in dem Bereich aktiv werden will, ist Englisch Pflicht: zumindest Lesen und Verstehen; Hören-Verstehen-Antworten ist nochmal ne andere Baustelle und nicht zwingend nötig, außer beim Kontakt mit Brokern ohne deutschen Support). Ansonsten: keine Arme - keine Kekse ! Klingt hart, ist aber so. 99% der Literatur, der Brokerwebseiten usw. sind in Englisch, selbst die milliardenschwere Saxobank hat nur Bruchteile lokalisiert. Man kann einfach nicht erwarten, dass alles einem mundgerecht-übersetzt dargeboten wird. Zumal es doch dann auch bitte schön immer umsonst sein soll (ansonsten kann man auch nen Anglistik-Studenten anheuern, der einem alles übersetzt). Von daher: wer mag, kann die MT-Tutorial-Seite gerne übersetzen oder eigene MT-Tutorials in Deutsch schreiben, aber ich muss ehrlich sagen, für mich ist es verschenkte Zeit, da man das Problem mit der Sprache nur verschiebt. Es gibt einfach bestimmte Grundfähigkeiten, über die MUSS man m.M. nach verfügen, um in dem Bereich Trading arbeiten zu können. Und wenn man die nicht drauf hat, muss man es lernen und das Reichwerden noch 1 Jahr oder länger rauszögern. Jedes normale Studium dauert 5 Jahre (rund), und im Laufe der meisten Studiengänge sollte man eigentlich auch Fachtexte in Englisch lesen lernen, und damit meine ich, dass man anfangs zwar jedes 2. Wort 20 Mal im Wörterbuch nachschlägt, aber am Ende des Studiums liest man die Texte als wäre es die Muttersprache.Ich kenn auch genug Ex-Kommilitonen, die sich drumrum gedrückt haben, aber die haben es im Beruf dann bereut, da die Sprache Englisch Zugang zu "frischem" Wissen bedeutet. Auch auf die Gefahr hin, mich mit meinem Appell unbeliebt zu machen: Lernt Englisch ! @whipsaw: Hilfe zur Selbsthilfe: ja, da bin ich dabei, aber ich verweigere mich, wenn Leute vom Erwerb signifikanter Fähigkeiten abgehalten werden sollen.
whipsaw Posted January 20, 2009 Report Posted January 20, 2009 (edited) @whipsaw: Hilfe zur Selbsthilfe: ja, da bin ich dabei, aber ich verweigere mich, wenn Leute vom Erwerb signifikanter Fähigkeiten abgehalten werden sollen. Darum gehts, ich hätte es nicht besser formulieren können. ..die Richtung zeigen - klar, Handreichen - selbstverständlich, laufen allerdings muss jeder selber. Zum Ziel getragen zu werden, wäre einseitig, anstrengend, nervig und würde keinen Sinn machen. An alle, die sich erst neu in die Materie, oder die des CFD Handels, oder was auch immer einarbeiten: Darum geht es! Darum geht es uns. Und - denkt alle daran, die Coder genauso wie die Trader, die hier ihr Wissen mit anderen teilen, müssen das nicht tun. Das was hier passiert, sollte auch entsprechend gewürdigt werden. Und sei es nur dadurch, dass man selbst mal ein Wörterbuch in die Hand nimmt und nachschlägt bzw. auf die vielen nützlichen Links klickt, die hier gepostet werden. Edited January 20, 2009 by whipsaw
infojoerg Posted January 20, 2009 Author Report Posted January 20, 2009 (edited) Ich hätte da mal eine kleine Zwischenfrage ich hoffe die ist nicht zu einfach: Ich habe das kleine Programm mal kopiert und in den MetaEditor eingefügt. Wie kann ich das jetzt ausprobieren. Ich schätze mal zuerst Kompilieren, oder? Und was dann? Wie bringe ich es dann zum laufen, das es anzeigt was ich haben will? Grüsse Jörg Edited January 20, 2009 by infojoerg
Mythos Posted January 20, 2009 Report Posted January 20, 2009 Ich habe das kleine Programm mal kopiert und in den MetaEditor eingefügt. Wie kann ich das jetzt ausprobieren. Ich schätze mal zuerst Kompilieren, oder? Und was dann? Wie bringe ich es dann zum laufen, das es anzeigt was ich haben will? Genau, mit dem Button kompilieren wird die *.ex4 datei erzeugt, die dann im Terminal verwendet wird.Um es zu verwenden gehst du einfach in den MetaTrader (vom MetaEditor aus am einfachsten per Klick auf "Terminal") und ziehst den ExpertAdvisor/Script/Indikator (je nachdem als was du es erstellt hast) aus dem Navigator auf den Chart, auf dem du es anwenden willst. Die Comments erscheinen direkt im Chartfenster, die Print() Anweisungen geben die Info im Terminal im Reiter "Experten" aus und alerts werden in einem PopUp angezeigt. HTH
infojoerg Posted January 21, 2009 Author Report Posted January 21, 2009 Ich habe glaube ich den Fehler gefunden. double AddiereFürMich(int a, int b) { return(a+b); } müßte richtig heißen double Addiere FürMich(double a, double b) Stimmt das? Auf jeden Fall stimmt bei mir dann das Ergebnis. Habe wegen Zeitmangel etwas länger gebraucht. Gruss Jörg P.S. Ich wollte auch mal Dank sagen an alle die so bereitwillig Erklärungen abgeben. Ihr seid echt spitze.
FinGeR Posted January 21, 2009 Report Posted January 21, 2009 Ich habe glaube ich den Fehler gefunden. müßte richtig heißen double Addiere FürMich(double a, double b)Stimmt das? Auf jeden Fall stimmt bei mir dann das Ergebnis. Habe wegen Zeitmangel etwas länger gebraucht. Gruss Jörg P.S. Ich wollte auch mal Dank sagen an alle die so bereitwillig Erklärungen abgeben. Ihr seid echt spitze. sehr gut! ich gebe dir aber nur ne 1+
FinGeR Posted January 21, 2009 Report Posted January 21, 2009 weiter gehts... double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; was passiert hier?müsste ja jetzt jeder Wissen.mit einem double oder int mehrere Variablen deklarieren ist auch möglich(optional). Nun die Frage warum stehen sie dort und nicht auch ganz am Anfang wie die anderen Variablen? Diese Variblen werden in einer Funktion(start()) erstellt(deklariert).sie sind dadurch nicht Global wie die anderendas heisst sie arbeiten nur in dieser Funktion(start()) und nicht ausserhalb. Desweiteren ist Wichtig zu Wissen dadurch das Funktionen mehrmals aufgerufen werden könnenwie z.b. diese start() bei jedem Tick durchlaufen wird werden die Variablen auch jedes mal neu deklariert. Ein Beispiel der 1. Tick = start() Funktion wird durchlaufen:deklariert diese Variablendouble MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total;in unserem Fall werden sie automatisch alle auf 0 bzw. 0.0 gesetzt sie können wärend des durchlaufs einen Wert zugewiesen bekommen z.b.cnt = 5; beim 2. Tick = start() Funktion wird wieder durchlaufen:und diese Variablen wieder auf 0 gesetzt da sie am Anfang wieder neu deklariert werden.also ist unser cnt wieder 0 (solange bis sie wieder einen Wert zugewiesen bekommt) das ist Wichtig zu Wissen!
FinGeR Posted January 21, 2009 Report Posted January 21, 2009 nur mal so nebenbei...Von meinen Rechtschreib und Grammatikfehlern mal ganz abgesehen... Erkläre ich alles einwenig "Locker vom Hocker"nicht so sehr prof. aber ich glaube doch auf den Punkt kommend verständlich. 1
ronner Posted January 21, 2009 Report Posted January 21, 2009 nicht so sehr prof. aber ich glaube doch auf den Punkt kommend verständlich.[/i] selbstverständlich - manche Deutsche können schlechter deutsch sprechen als Du schreibst
Mythos Posted January 21, 2009 Report Posted January 21, 2009 Von meinen Rechtschreib und Grammatikfehlern mal ganz abgesehen... Erkläre ich alles einwenig "Locker vom Hocker"nicht so sehr prof. aber ich glaube doch auf den Punkt kommend verständlich. Ich finds super lesbar und (vor allem für Anfänger) super verständlich! Ich würds vermutlich nicht so schön hinkriegen
infojoerg Posted January 21, 2009 Author Report Posted January 21, 2009 Die Variablen die hier gesetzt werden können irgendwie benannt werden, oder? Ist es egal ob ich die Variablen double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; oder double hamburger, cheesburger, pommes;double eins, zwei, drei;int fritz, paul, eva; nenne, oder? Bis hierhin hat die Variable ja noch keinen Wert und weiss nicht was sie für eine Aufgabe hat oder gibt es vordefinierte Variablen auch? lg JörgP.S. Die Erklärungen sind 1a großen Respekt.
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now