Der Code hat erst funktioniert, als ich die alert-Funktion mit einem Großbuchstaben begonnen habe. Sehr penibel dieses MQL4.
Diese Funktion alarmiert immer dann, wenn ein neues Tick-Signal kommt. Das hat doch damit zu tun, dass die start() bei jedem Tick ausgeführt wird, oder?
Was auch klasse funktioniert ist, dass durch Comment(""); alle Kommentare gelöscht werden, wenn ich den EA aus dem Chart entferne! Und das liegt daran, dass deinit() nur beim beenden des EA ausgeführt wird, oder?
Was ich nicht verstehe ist, warum die Deklarierung von AddiereFürMich ganz unten steht... kann mir das jemand erklären?
Ich versuche mir das mal selbst zu beantworten: Der programmierte EA wird vom MetaTrader zunächt komplett eingelesen! Alle Deklarierungen werden im Speicher abgelegt. Und dann wird bei einem neuen Tick die start() Funktion ausgeführt. Somit hätte man die Deklarierung von AddiereFürMich auch nach oben schreiben können!?!
Eine weitere Frage habe ich auch noch: Wenn ich den MetaTrader mit dem EA von FinGeR geöffnet habe, dazu habe ich den MetaEditor mir dem Code von FinGeR offen... wenn ich jetzt im Code was ändere - es dann Kompiliere... wird es dann direkt auf dem EA im Chart angewendet? Oder muss ich den EA aus dem Chart entfernen und dann wieder neu aktivieren, damit die Änderungen aktiv sind?
Und, eine abschließende Frage:
Warum ist das Smiley-Gesicht im Chart oben rechts mit nach unten gezogenen Mundwinkeln? Der EA läuft doch... auch die Alert-Funktion geht...! Sie signaliesiert bei jedem Tick...!?!
Hallo zusammen, ich habe aus dem Topic "Einstieg zu MT4 Programmierung" noch mal was rausgeholt.
Dazu habe ich noch mal eine spezielle Frage. Im Origial-Beispiel ist ein Fehler
double AddiereFürMich(int a, int b)
eingebaut, den ich im folgenden Code mal durch
double AddiereFürMich(double a, double b)
korrigiert habe:
//+------------------------------------------------------------------+ //| 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(double a, double b) { return(a+b); }Der Code hat erst funktioniert, als ich die alert-Funktion mit einem Großbuchstaben begonnen habe. Sehr penibel dieses MQL4.
Diese Funktion alarmiert immer dann, wenn ein neues Tick-Signal kommt. Das hat doch damit zu tun, dass die start() bei jedem Tick ausgeführt wird, oder?
Was auch klasse funktioniert ist, dass durch Comment(""); alle Kommentare gelöscht werden, wenn ich den EA aus dem Chart entferne! Und das liegt daran, dass deinit() nur beim beenden des EA ausgeführt wird, oder?
Was ich nicht verstehe ist, warum die Deklarierung von AddiereFürMich ganz unten steht... kann mir das jemand erklären?
Ich versuche mir das mal selbst zu beantworten: Der programmierte EA wird vom MetaTrader zunächt komplett eingelesen! Alle Deklarierungen werden im Speicher abgelegt. Und dann wird bei einem neuen Tick die start() Funktion ausgeführt. Somit hätte man die Deklarierung von AddiereFürMich auch nach oben schreiben können!?!
Eine weitere Frage habe ich auch noch: Wenn ich den MetaTrader mit dem EA von FinGeR geöffnet habe, dazu habe ich den MetaEditor mir dem Code von FinGeR offen... wenn ich jetzt im Code was ändere - es dann Kompiliere... wird es dann direkt auf dem EA im Chart angewendet? Oder muss ich den EA aus dem Chart entfernen und dann wieder neu aktivieren, damit die Änderungen aktiv sind?
Und, eine abschließende Frage:
Warum ist das Smiley-Gesicht im Chart oben rechts mit nach unten gezogenen Mundwinkeln? Der EA läuft doch... auch die Alert-Funktion geht...! Sie signaliesiert bei jedem Tick...!?!
Bearbeitet von ronner
mql-Tags hinzugefügt