[MQL] Jemand Erfahrungen - Hilfestellung - API/Variablen?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.721
Hey Community,

Ich habe die ganze Woche jetzt schon vor mir etwas in MQL (MetaTrader) zu programmieren. Allerdings finde Ich zu den Indikatoren und generell der Sprache leider sehr wenig. Klar auf der Seite direkt gibt es einige Artikel, nur helfen diese mir nicht weiter... :/

Ich benötige z.B. den ZigZag Indikator, allerdings finde Ich in den Docs dazu nichts und auch nicht, wenn Ich in Google nach "ZigZag MQL Api" schaue. Ich habe was gelesen von iCustom, komme damit aber nicht ganz klar.
https://docs.mql4.com/indicators/icustom

Unter anderem verstehe Ich in MQL nicht die Variablenspeicherung. Ich kann Java und wenn Ich einer Variable einen Wert zuweiße, dann bleibt der auch so, wenn Ich ihn nicht verändere. Allerdings ist der Wert einer Variable bei mir komischerweise "statisch". Ich erhöhe ihn zwar mit "i++", allerdings komme Ich dann z.B. nicht in den if Zweig, da Ich noch die Variable noch den zugewiesenen Wert hat...

Ich würde mich freuen, wenn mir dabei jemanden helfen kann und mir MQL evtl. ein wenig "beibringen" könnte. Großer Unterschied zu Java ist da ja nicht, nur arbeitet MQL anscheinend anderes...

MfG und Danke!
 
Den Quelltext für den ZigZag Indikator findest du im Meta Editor unter MQL4/Indicators. Was Variablen betrifft, da kommst es darauf an, wo man diese deklariert. Es gibt globale und lokale. Die Globalen halten ihren Wert bei jedem Aufruf von OnCalculate().

Code:
//+++++++++++++++++++++
//| Beispiel Global
//+++++++++++++++++++++

uint ui_var = 3;

bool Func()
{
    return;
}

int OnCalculate(...)
{
    Print("ui_var: ",IntegerToString(ui_var));
    ....
}

Bei den Lokalen werden die Werte bei jedem Aufruf von OnCalculate() wieder zurückgesetzt. Dies kann man umgehen, wenn man die Variablen static deklariert.

Code:
//+++++++++++++++++++++
//| Beispiel Lokal
//+++++++++++++++++++++

bool Func()
{
    uint ui_var1 = 0;
    static uint ui_var2 = 0;

    ui_var1++; // Liefert immer den Wert 1.
    ui_var2++; // Zählt von Null bei jedem Aufruf der Funktion eins höher.
    Print("ui_var1: ",IntegerToString(ui_var1));
    Print("ui_var2: ",IntegerToString(ui_var2));

    return;
}

int OnCalculate(...)
{
    return(func());
    ....
}

Was iCustom() betrifft, damit werden eigene oder bereits vorhandene Indikatoren in anderen Indikatoren, aber vorallen in Expert Advisors (automatische Handelsprogramme), eingebunden. Z.B. kann man einen eigenen Indikator erstellen, der ein Signal aus mehreren anderen Indikatoren generiert. Am häufigsten dürfte der Fall sein, dass man iCustom() in Expert Advisors benutzt, um mittels der eingebundenen Indikatoren die Handelssignale für Kauf- und Verkaufsaufträge zu generieren.

Am besten du schaust dir mal die ganzen Beispielquelltexte der vorhandenen Indikatoren im Meta Editor an und arbeitest dich da durch. Auch die Seite von Metaquotes (https://forum.mql4.com/) bietet einiges an Artikeln und Beiträgen zu Programmierung in MQL. Wenn was nicht klappen sollte, wäre es sehr gut, wenn du mittels CODE /CODE den entsprechenden Quelltext mit in deinen Beitrag packen würdest.
 
Das mit dem Global und Local kenne Ich ja von Java. Nur ging es mir darum, dass die Variablen immer wieder zurückgesetzt wurden... Danke!
Also mit static. Ich werde es mal probieren!
 
Zurück
Oben