Alle Inhalte von FinGeR
-
Einstieg zu MT4 Programmierung
gut Jörg ich glaube Mythos hatte auch noch einen Fehler irgendwo...? @Mythos, Krümel Danke für deine, eure Unterstützung...
-
Einstieg zu MT4 Programmierung
so... und weiter gehts..... also wenn die beiden IF Anweisungen durchbrochen wurden kommt das hier // to simplify the coding and speed up access // data are put into internal variables MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); Warte Alex erst kommt die Fehlersuche... Achso ja ist ja gut, erst die Fehlersuche. Dann gehts weiter...
-
Einstieg zu MT4 Programmierung
Wenn du bereit bist jede einzelne Zeile des Codes verstehen zu wollen bis zum ENDE.(egal ob du bei Fragen in Büchern blätterst oder zu Googeln anfängst oder direkt zu Fragen) und wenn es nur dieser code ist "MACD Sample.mq4" heisst die Antwort JA.
-
Einstieg zu MT4 Programmierung
Die Frage klingt jetzt vielleicht blöd, aber: ist die "schwere" Lesbarkeit (was den Programmablauf angeht) von dem Codestück Absicht oder hat das die Code-Umgebung produziert? Aufgrund der Klammerung ist es nur schwer ersichtlich zu welchem if dieses else gehört. (Order ist das Teil der Challenge?;) Teil der Challenge!
-
Einstieg zu MT4 Programmierung
ich glaube Jörg und Co. werden jetzt das Handuch* werfen.... oder werden sie die Fehler finden? *Handtuch
-
Einstieg zu MT4 Programmierung
danke genau mit Fehlersuche lernt man.
-
Einstieg zu MT4 Programmierung
if(Bars<100) //Bars gibt die Anzahl der Balken(Candle) auf dem Chart zurück. { Print("bars less than 100"); return(0); //Abbruch der Funktion und 0 zurückgeben !(bis zum nächsten Aufruf) } if(TakeProfit<10) // TakeProfit ist eine Variable { Print("TakeProfit less than 10"); return(0); //Abbruch der Funktion und 0 zurückgeben !(bis zum nächsten Aufruf) } OK, es hat im Expert getickt oder der Script wurde geladen und steht nun dort vor diese IF Anweisung. IF heisst soviel wie WENN! DANN! WENN NICHT! DANN ÜBERSPRINGEN! und normal WEITER! if(a==1) Print("a=1"); hier brauchen wie keine Grenzen also Klammern{} für unser "Anweisung IF" wenn sie zutrifft. weil nur 1 Zeile benötigt wird.(ist aber optional man kann trozdem eine Klammer benutzten) Wenn wir aber mehr Zeilen benötigen benutzten wir diese Klammern {} hier benutzen wir 2 Zeilen 1.für Print() 2.für alert() if(a==1) { Print("a=1"); alert("Schade aber a ist 1"); } in beide Fälle wird der code danach weiter abgearbeitet. wenn die IF Anweisung zutrifft wird das was in {} steht ausgeführt und weiter gehts. so, jetzt gibt es natürlich die Möglichkeit zu sagen wenn IF nicht zutrifft machen etwas anderes und arbeite danach den anderen code normal weiter ab. dafür benutzten wir ELSE if(a==1) Print("a=1"); else (Print("a ist ungleich 1")); Print("ich arbeite den code jetzt weiter Ab egal was IF ergab."); bei mehr als 1 Zeile benutzten wir wieder diese {} (als ANFÄNGER benutzt immer diese Klammern. ) if(a==1) { Print("a=1"); alert("Schade aber a ist 1"); } else { Print("a ist ungleich 1"); alert("a ist ungleich 1"); } Print("und ich arbeite den code jetzt weiter Ab egal was IF ergab."); so, und nun aber was ist wenn wir nicht wollen das der code weiter abgearbeitet werden soll, sondern ein STOP! an dieser stelle des Codes. dafür benutzten wir return; oder return(); wie am Anfang Erklärt gibt return(0) unserer Funktionint start() {...} das Ergebniss des durchlaufs zurück also? int = 0richtg! aber auch hat dieses return() die Eigenschaft den durchlauf des codes der Funktion genau an dieser Stelle zu stoppen! in diesem Beispiel if(a==1) { Print("a=1"); alert("Schade aber a ist 1"); } else return(0); //hier Stop die Funktion wenn a ungleich 1 ist! Print("wenn a ungleich 1 ist wirst du mich nicht Lesen können"); In diesem Beispiel wird der code gestoppt wenn a ungleich 1 ist. Das nächste Print() wird dann nicht mehr ausgeführt.(wichtig beim nächsten Aufruf der Funktion fängt sie natürlich wieder von vorne an. die Funktion) hier nochmal die Möglichkeiten für den Anfang if(a==b); //wenn a = b if(a>b); //wenn a grösser b if(a<b); //wenn a kleiner b if(a!=b); //wenn a ungleich b So jetzt bitte sagt mir was genau macht dieser folgene Code?(schaut euch diesen code genau an.) Einen kleinen Fehler habe ich auch eingebaut. Findet ihn. (erst dann gehts weiter!) double TakeProfit = 50; if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit>50) { Print("TakeProfit grösse wie 50"); } else { return(0); Print("ist mir zu klein der tp"); }
-
Einstieg zu MT4 Programmierung
man lernt nie aus... Danke das habe ich nicht gewusst.
-
Einstieg zu MT4 Programmierung
der Wert ist 0 wenn keine Wert gegeben wird ja natürlich "pommes" ist OK wenn du Pommes einen Wert geben möchtest musst du das aber einzeln tun. int pommes = 4; wenn du aber mehrer Variablen hast die erstmal ohne Wert sein sollen oder ebend 0 kannst du es auch so schreiben int pommes, nudeln, Bulette; // die haben alle Null WICHTIG MQL4 achtet auf Gross und Kleinschreibung! Pommes sind nicht gleich pommes (als MQL4 sieht das so aus) if (Pommes != pommes) Sosse=rot // wenn Pommes ungleich pommes ist Sosse gleich rot dann kommen wir auch gleich zum nächsten Abschnitt vom Code... ---
-
Einstieg zu MT4 Programmierung
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.
-
Einstieg zu MT4 Programmierung
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 anderen das heisst sie arbeiten nur in dieser Funktion(start()) und nicht ausserhalb. Desweiteren ist Wichtig zu Wissen dadurch das Funktionen mehrmals aufgerufen werden können wie 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 Variablen double 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!
-
Einstieg zu MT4 Programmierung
sehr gut! ich gebe dir aber nur ne 1+
-
Einstieg zu MT4 Programmierung
Nein solch eine Fehlermeldung mein ich nicht diese 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 Beabsichtig der Code arbeitet sauber aber prüft das Ergebniss. 4 setzten. Wichtig selbst ausprobieren! Probier es einfach mal selbst mit und ohne ("") nachdem du meine "?" ausgetauscht hast.
-
Einstieg zu MT4 Programmierung
ok ich erhöhe wer den Fehler findet und behebt. bekommt eine 1+ und ein Stipendium für sein 1. eigenes MTS.
-
Einstieg zu MT4 Programmierung
ein kleiner Fehler ist Eingebaut.(prüft das Ergebniss) Wer den Fehler findet bekommt eine 1+.
-
Einstieg zu MT4 Programmierung
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 0 es 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 Beispiel wir möchten uns eine eigene Funktion programmieren der 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!
-
Einstieg zu MT4 Programmierung
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 erhalten z.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() Funktion nennt 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.01 und int sind 4 oder 2 oder 1 ; bedeutet das ende der Zeile extern zeigt deine Variable im Parameterfenster deines expert,script,indikator
-
Einstieg zu MT4 Programmierung
weiter gehts.... extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; 5 Fragen. 1. was bedeutet "extern" 2. was bedeutet "double" 3. was bedeutet z.b. "TakeProfit" 4. was bedeutet z.b. "= 50" 5. was bedeutet ";" und die 6. Frage Warum steht das ganz am Anfang?
-
Einstieg zu MT4 Programmierung
Richtig. Informiert den Leser dieser Datei. //fuer eine Zeile... /* fuer mehr Zeilen... */
-
Einstieg zu MT4 Programmierung
ok fangen wir ganz oben an. MACD Sample.mq4 Welche Aufgaben haben diese ersten Zeilen? //+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+
-
Einstieg zu MT4 Programmierung
Ein Tipp von mir schnapp dir die Beispiele* von Metatrader 4 und Versuche jede einzelne Zeile zu verstehen.(und Kommentiere sie für dich verständlich.) bis zum bitteren Ende.(wenn du das ernsthaft durchziehst bis zum Ende fängt das lernen an.) *MACD Sample.mq4 Moving Average.mq4 Wichtig wenn du was nicht verstehst. Frag einfach.
-
MQL Library mit Standardfunktionen
-
MQL Library mit Standardfunktionen
hier nochmal eine nützliche Funktion zum Thema gebastelt. TodayOrdersOpen?() Diese Funktion gibt TRUE(1) zurück wenn heute eine Order eröffnet wurde. man kann Parameter angeben muss aber nicht.(wenn nix als Parameter angegeben wird, ist der TYP ORDER und MAGIC uninteressant für diese Funktion) ::type = BUY oder SELL oder PENDING ::magic = Magic Nummer wennn benutzt wird ::symbol = könnte man auch einbauen (so wird nur das Symbol(z.b. EURUSD) benutzt welches wo der Code ins Chartfenster geladen wurde) bool TodayOrdersOpen?(int type=-1, int magic=-1) { int cnt = OrdersHistoryTotal(); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != -1) if(OrderMagicNumber() != magic) continue; if (OrderType() != -1) if(OrderType() != type) continue; if (TimeDay(OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear(OrderOpenTime())==Year()) return(True); } cnt = OrdersTotal(); for (i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != -1) if(OrderMagicNumber() != magic) continue; if (OrderType() != -1) if(OrderType() != type) continue; if (TimeDay(OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear(OrderOpenTime())==Year()) return(True); } return(False); } habe nicht getestet hoffe es hat sich kein Fehler eingeschlichen kann ja dann mit in die Datei eingebaut werden
-
MQL Library mit Standardfunktionen
garnet so einfach aber sich schaffe das. Bitte Warten...
-
MQL Library mit Standardfunktionen
ja aber eine herrausforderung ich schau mal wie man die Sprache herrausbekommt...