Jump to content
Tom Next - Daytrading Community

Recommended Posts

Posted

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

Posted

man seit ihr schnell.... :full:

 

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

Posted

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örg

Vielen Dank für die ausführliche Erklärung zu den Variablen

Posted

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!

Capture_011.gif

  • Upvote 2
Posted
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 :full:

 

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 ;)

Posted

:full: oh ist das peinlich, hmm keine Ahnung... int fehlt? also Typ (Ganzzahl) int

 

x.jpg

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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: rororo

C++

von Helmut Erlenkötter linked.gif

11. Auflage - Dezember 2007

 

erlenk_tter.jpg

Posted

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! :full:

 

da ist noch ein Fehler drin Beabsichtig

der 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! :top:

 

Probier es einfach mal selbst mit und ohne ("")

nachdem du meine "?" ausgetauscht hast.

Posted (edited)

ich sehe schon was ungewöhnliches jedoch ist das schon arg init() speziell..

finde aber klasse von dir FinGeR :full:

Edited by siscop
Posted
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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 kompilieren

wä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

Posted
*g*, Interesse ist da, nur keiner der sich die Arbeit macht.

:full:

 

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.

Posted (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 by whipsaw
Posted (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 by infojoerg
Posted
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

Posted

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.

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

 

:yep: sehr gut! :bbg:

ich gebe dir aber nur ne 1+ :bbg:

Posted

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!

Posted

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.

 

:bbg:

  • Upvote 1
Posted
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 :bbg: :bbg:

Posted
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! :bbg:

Ich würds vermutlich nicht so schön hinkriegen :bbg:

Posted

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örg

P.S. Die Erklärungen sind 1a großen Respekt.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...