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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4484
Beiträge: 40719
Benutzer: 6.868
Aktive Benutzer: 253
Links: 80
Wir begrüßen unseren neuesten Benutzer: huseceti
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 14 Stunden
- huseceti
vor einem Tag
- petra25
vor 4 Tagen
- hk0163
vor 4 Tagen
- magnr1
vor 5 Tagen
- boypac007

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 84
Gesamt: 86
Team: 0
Team:  
Benutzer:  Indikator-Trading, MA-EA
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 54
LQK befindet sich auf einem aufstrebenden Ast
Standard Die Funktion Start()

Hallo,

MA-EA hat mir in einem anderen Zusammenhang empfohlen, die Funktion Start() ans Ende eines EA zu setzen, da Start() dann anscheinend den EA kontinuierlich mit Ticks füttert, was man gut zu zum Testen des EA verwenden kann.

Ich hatte für mein Problem, Danke noch mal Euch allen, mehrere Lösungsvorschläge bekommen und nachdem eine funktioniert hat, bin ich der Sache mit Start() dann nicht mehr weiter nachgegangen.

Jedoch hatte ich damals ein kleinen Test-EAmit Start() erstellt, welches ich gerade zufällig noch mal probiert habe. Mir sind dabei ein paar, meines Erachtens, bemerkenswerte Dinge aufgefallen, was für mich Anlass zur Öffnung des jetzigen Threads ist. Im anderen Thread wollte ich diese Debatte nicht führen, da es OT wird und der Thread dann nicht mehr so gut als Nachschlagewerk dienen kann.

---

Es ist so, dass der Charakter der Funktion Start() für mich nach wie vor verblüffend ist.

Zunächst habe ich gerade beim Aufräumen dieses von mir erstellte Test-EA gefunden und gestartet. Der Compiler hat dann gemeckert, dass bei Start geschweifte Klammern zu viel seien (im unten gepostetn Quellcode rot markiert). Nachdem ich diese rot geschweiften Klammern gelöscht habe, ließ sich der EA sich ohne Fehler compilieren. Nach dem Ausführen hat der EA dann kontinuierlich Ticks "verarbeitet" (?), erkenntlich daran, dass unregelmäßig, normalerweise jedoch spätestens alle paar Sekunden, die Meldung "Danke Start() erscheine ich auf dem Bildschirm" auf dem Bildschirm ausgegeben wurde.

Dass das funktioniert, ist es erforderlich, dass der Anwender in ein Konto, zumindest ein Demo-Konto, eingeloggt ist. Dass der EA bei mir plötzlich funktioniert hat ist reiner Zufall, da ich vor einigen Tagen nun doch noch zu Testzwecken extra ein Demo-Konto angelegt habe, in das ich beim Testen zufällig eingeloggt war. Testweises Ausloggen aus dem Demokonto zeigte, dass der EA dann nicht mehr funktioniert.


---


Wenn ich nun "int" auch noch weglösche, dass im obig geposteten Quellcode nur noch "Start" steht, funktioniert der EA nicht mehr.

Das finde ich verwunderlich, aus diesem Grund:

int oder ein anderer Datentyp gibt ja normalerweise den Rückgabewert einer vom Anwender selbst auszuprogrammierenden Funktion an. Wenn es so ist, dass die Funktion Start() vom Programmierer selbst zu implementieren ist, hätte der Compiler allerdings nicht die {} in Zusammenhang mit Start() monieren dürfen.

Der compiler hat aber die {} im Zusammenhang mit Start() moniert. Also ist die Funktion Start() offenbar nicht vom Anwender selbst zu implementieren. Wenn die Funktion Start() allerdings nicht vom Anwender selbst zu implementieren ist, sondern bereits von MQL zur Verfügung gestellt wird, verstehe ich nicht, warum die Angabe int in Zusammenhang mit Start() offenbar zwingend erforderlich ist.

Habe gerade mal noch spaßeshalber in bei Start den Rückgabetyp int nacheinander durch void, bool und double ersetzt. Die verblüffende Erkenntnis ist, dass der EA mit jedem dieser Rückgabetypen einwandfrei funktioniert.

---

Mir ist somit, insgesamt betrachtet, nicht klar um was es sich bei Start() handelt. Um eine Funktion, klar. Offenbar scheint diese aber unter verschiedenen Gesichtspunkten eine Sonderstellung unter den von MQL angebotenen Funktionen zu haben.



Eine andere Sache ist, dass ich weder in der Hilfe, noch in der Referenz einen Eintrag für Start() finde. Einen kleine Erklärung zu Start habe ich in unten stehendem Link gefunden. Finde die Erklärung allerdings nicht sehr hilfreich, da wird nur wortreich geschildert, wann und unter welchen Umständen Start() gestartet wird.


Hier der Link:
https://book.mql4.com/programm/special


Ach ja, hier noch der Quellcode des von mir oben stehend beschriebenem Test-EA:

Code:
int OnInit()
  {

   

   return(INIT_SUCCEEDED);
  }


void OnTick()
  {
//---
  
  Print("Danke Start() erscheine ich auf dem Bildschirm");
  
   
  }
//+------------------------------------------------------------------+



int Start();

{
}


---


Würde mich freuen, wenn jemand von Euch was zu Start()weiß.




Besten Dank und Grüße,
LQK
Mit Zitat antworten
  #2 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.376
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ganz einfache Erklärung:

Was früher mal unter MQL4 start() hieß, heisst heute unter MQL4.5 eben OnTick(). Ich nenne die derzeitige Version von MQL4 deshalb MQL4.5, weil in das alte MQL4 einige Neuerungen eingebaut worden, die sich auch in MQL5 wiederfinden. Aber es ist kein reines MQL5.

Das ist alles. Die Aufgeabe dieser Funktionen sind total identisch.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 54
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Ganz einfache Erklärung:

Was früher mal unter MQL4 start() hieß, heisst heute unter MQL4.5 eben OnTick(). Ich nenne die derzeitige Version von MQL4 deshalb MQL4.5, weil in das alte MQL4 einige Neuerungen eingebaut worden, die sich auch in MQL5 wiederfinden. Aber es ist kein reines MQL5.

Das ist alles. Die Aufgeabe dieser Funktionen sind total identisch.

traderdoc
Danke für diesen wertvollen Hinweis!

Vielleicht werde ich es die Tage mal testen, ob die beiden Funktionen haargenau das Gleiche tun!
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.376
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Kannst Du tun, kannst es aber auch lassen, kommt
aufs Gleiche raus. Die Funktionen sind wirklich identisch.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 295
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Ja das kann man echt lassen, start() kann ins Museum was nicht mal mehr in der Doku zu finden ist, sollte man erst gar nicht mehr in Betracht ziehen. https://docs.mql4.com/basis/function/events
Mit Zitat antworten
  #6 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 376
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Ja das kann man echt lassen, start() kann ins Museum was nicht mal mehr in der Doku zu finden ist, sollte man erst gar nicht mehr in Betracht ziehen. https://docs.mql4.com/basis/function/events
Steht hier https://docs.mql4.com/basis/mql4changes unter "Changes in MQL4 Language", 6. Absatz.
Solche ChangeLogs sind immer ganz gute Informationen (mit anderen Worten "deprecated, don't use" - nicht mehr verwenden)
AVT
Mit Zitat antworten
  #7 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 295
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Jo der einzige Grund warum es sich damit noch kompilieren lässt, ist um eine Abwärtskompatibilität zu schaffen für ältere Codes.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 952
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

1.
Entweder
Code:
int start(){
und ganz am Ende des EA
Code:
return(was-auch-immer-fürn-Rückgabe-Wert);}
oder

Code:
void OnTick{ (oder wies richtig heißt :rolleyes: )
und ganz am Ende des EA
Code:
}
Eins von Beiden, entweder void OnTick o d e r int start().


2.
kann, wie man rauslesen kann, int start() einen return-Wert zurück liefern.
Mit Zitat antworten
Antwort

Lesezeichen

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 18:53 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------