Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Die Funktion Start() (http://www.expert-advisor.com/forum/showthread.php?t=6689)

LQK 15.06.20 19:12

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

traderdoc 15.06.20 20:41

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

LQK 16.06.20 15:47

Zitat:

Zitat von traderdoc (Beitrag 43867)
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! :)

traderdoc 17.06.20 12:00

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

traderdoc

Ca$hDigger 17.06.20 12:47

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

AVT 17.06.20 15:24

Zitat:

Zitat von Ca$hDigger (Beitrag 43876)
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

Ca$hDigger 17.06.20 16:56

Jo der einzige Grund warum es sich damit noch kompilieren lässt, ist um eine Abwärtskompatibilität zu schaffen für ältere Codes.

MA-EA 17.06.20 18:56

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:08 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum