Einzelnen Beitrag anzeigen
  #17 (permalink)  
Alt 08.02.18
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Talking

Sorry, muss diesen Thread grad mal hoch holen...

@Angel
Hier wurden schon einige Sachen gesagt. Lena hat hier zur leichteren Erlernung z.B. Java parallel vorgeschlagen.
Ich finde, gerade wenn man keine Vorkenntnisse hat, sollte man eher zu C++-Grundlagen anstatt zu Java greifen, da es einfach besser und näher zu Mql steht.

Mein Tip an dich:
  1. Schau dir die Grundlagen von C++ an:
    • Was sind Datentypen und Variablen.
    • Was sind Funktionen. Wie sieht deren Aufbau aus und wie erstellt man eigene.
    • Was sind If's, Schleifen und Switch.
  2. Wenn du die drei Punkte oben zumindest angeschaut hast (ein paar YVideos tuns auch, viel wichtiger verstehen!), sollten solche Formulierungen wie
    • Zitat:
      Zitat von Angel Beitrag anzeigen
      Zeigt an, dass die Funktion (Oder ist es ein Befehl? Naja..) vom Typ "bool" ist. Was "bool" ist: Googlen
    • Zitat:
      Zitat von Angel Beitrag anzeigen
      Die Klammer darf nicht vergessen werden, sie umschließt das alles, was auf "ObjectCreate" folgt
    • Zitat:
      Zitat von Angel Beitrag anzeigen
      Ist übrigens vom Typ "String", fall man es nich tmit Klarnamen versieht, sondern mit einer Variablen
    • Zitat:
      Zitat von Angel Beitrag anzeigen
      Die Variable, sollte es eine sein...
    • Zitat:
      Zitat von Angel Beitrag anzeigen
      Schließen der Klammer bedeutet, die Definition des Rechtecks ist abgeschlossen.
    Vergangenheit sein.
  3. Dann kannst du dir das Vorgehen von Traderdoc zu Herzen nehmen, aus bestehenden, kleinen Programmen & Codeschnipseln Zeile für Zeile zu lernen.

=== === === === === === === === === === === ===

Nun wollte ich noch durch den Thread gehen und paar Dinge aufgreifen,
auch wenn es vielleicht nicht mehr nötig ist
:
Warum? Weil ich hier in letzter Zeit vermehrt Leute und Fragen gesehen habe, die durch Fehlende Grundlagen (absolute Grundlagen!) Fehler machen...

Zitat:
Zitat von Angel Beitrag anzeigen
So zB was ist Überhaupt die Bedeutung von "void"
Void kann man als Datentyp sehen, mit dem KEINE Variablen erstellt werden können. Beispiele zur Verwendung:
Code:
// Funktion die KEINEN Wert zurückgeben, werden mit Void deklariert
void functionGibAus()

// Bei einer Funktion ohne Parameter kann Void verwendet werden, um es zu // "signalisieren"
bool erfolg(void)
Zitat:
Zitat von Angel Beitrag anzeigen
Die Funktion "RectangleCreate" fand ich nicht in der Dokumentation.
Ist auch keine Funktion in der Doumentation, sondern einfach eine erstellte Funktion im Beispielcode.
Diese Seite Zeigt alle Objekttypen. Wenn du jetzt auf OBJ_RECTANGLE klickst, kommst du zu
dem Beispielcode, den Trader6666 gepostet hat.

Zitat:
Zitat von Angel Beitrag anzeigen
Zudem ist in Deinem Beispiel - soviel kann ich aus dem Code rauslesen - ein Script bzw. ein Indikator geschrieben worden.
Ich will das Ding innerhalb eines EA schreiben.
Wie auf der Seite zu lesen, ein Skript. Spielt aber keine Rolle. Du kannst das Beispiel auch hervorragend in einen EA integrieren.
Ist ja nicht so, als wäre da komplett anderer Code...

Zitat:
Zitat von Angel Beitrag anzeigen
Üben, üben, üben ist leichter gesagt als getan, irgendwann steht man vor einer Wand und kommt nicht weiter außer alle möglichen Kombinationen durchzuprobieren. Mal kommt da ein Semikolon hin, mal eben nicht, dann dies oder das und vor allem wenn das Rechteck sich wie hier bewegen soll.
"Alle möglichen Kombinationen" durchzuprobieren sagst du jetzt. Wenn du erstmal weißt, was Variablen, Datentypen, Funktionen ect. sind und
deren Aufbau verstanden hast, so wirst du nicht mehr von "möglichen Kombinationen" sprechen müssen. Dann wird sich sogar das mit dem Semikolon legen.

Zitat:
Zitat von Angel Beitrag anzeigen
Da steht nix von "RectangleCreate" oder Deinem Codeschnipsel " if(!ObjectCreate". Gerade das Ausrufezeichen ließ mich aufhorchen. Es handelt sich also wohl nicht um einen EA.
RectangleCreate. Der Codeschnipsel sagt überhaupt nichts von einem Indikator oder EA!
Gehen wir das mal gründlich durch:
Code:
// Mit einem if fragt man ab, ob etwas wahr oder unwahr ist (true / false)
// Beispiel:

if(10 > 13) // 10 größer 13 ===>>> Falsch ===>>> false
if(100-50 == 50) // 50 == 50 ===>>> Richtig ===>>> true

// Doppelte Gleichheitszeichen stellen ein Vergleich da.
// Ein Ausrufezeichen im if kehrt den Wert um.
// Aus true wird false und umgekehrt.
// Die Funktion "bool ObjectCreate(...)" liefert bei Erfolg "true" bei
// einem Fehlschlag "false" zurück.

if(ObjectCreate(...)) IST GLEICH WIE if(ObjectCreate(...) == true)
if(!ObjectCreate(...)) IST GLEICH WIE if(ObjectCreate(...) == false)
Zitat:
Zitat von Angel Beitrag anzeigen
Deinen Vorwurf "Hättest du richtig gesucht, wärst du auf den Punkt ChartXYtoTimePrice gestoßen"
Hier verstehe ich auch nicht, wie er darauf kommt. Habe deine Posts durchgelesen und nirgendwo steht
was von einer gewünschten Umwandlung.

Zitat:
Zitat von Angel Beitrag anzeigen
Außer dass wir einen Beispielcode haben, der uns nix bringt, da er für einen Indikator geschrieben ist (i...)
Ich nehme mal an, du meinst hier ein Ausrufezeichen. Das es rein garnichts über Indikator / EA / Skript aussagt, weißt du jetzt.

=== === === === === === === === === === === ===

Zitat:
Zitat von Angel Beitrag anzeigen
Und jetzt mal ehrlich: Ein Anfänger, der in der F1-Hilfe einen solchen undokumentierten Code sieht:

//--- create a rectangle
if(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpFill,InpBack,InpSelection,Inp Hidden,InpZOrder))
{
return;
}


Der kotzt doch im Strahl und verliert jede Lust am Programmieren!!!!!!!
(Wir) Progger sollten oft nicht so hochmütig sein und Anfängern nicht immer zB sagen "wenn du darauf kein Bock hast , dann kannst du es auch gleich sein lassen" Man kann sich auch mal ein wenig Zeit nehmen, etwas Schritt für Schritt zu erklären und zu beleuchten. Nicht jede(r) ist so verbissen und schläft über der MQL4-Dokumentation ein und ich muss schon sagen: Der heilige Gral der Benutzerfreundlichkeit ist MQL4 garantiert nicht, eher das Gegenteil.
Die Dokumentation geht ja auch davon aus, das Programmiergrundlagen vorhanden sind!
Du hast es wahrscheinlich mittlerweile verstanden, aber für andere Anfänger, die damit nichts anfangen können mal etwas
auseinandergenommen (will ja nicht, das noch jemand im Strahl kotzt...):

Mit bischen Google und passenden Wörtern wie "mql4 ..." müsste man es alleine schaffen!
Hier mal eine kleine Herangehensweise für blutige Anfänger:

  1. Zitat:
    RectangleCreate ???
    Das finden wir im Beispielcode(siehe Verlinkung weiter oben!) relativ am Anfang:
    Code:
    bool RectangleCreate(const long            chart_ID=0,        // chart's ID
                         const string          name="Rectangle",  // rectangle name
                         const int             sub_window=0,      // subwindow index 
                         datetime              time1=0,           // first point time
                         double                price1=0,          // first point price
                         datetime              time2=0,           // second point time
                         double                price2=0,          // second point price
                         const color           clr=clrRed,        // rectangle color
                         const ENUM_LINE_STYLE style=STYLE_SOLID, // style of rectangle lines
                         const int             width=1,           // width of rectangle lines
                         const bool            fill=false,        // filling rectangle with color
                         const bool            back=false,        // in the background
                         const bool            selection=true,    // highlight to move
                         const bool            hidden=true,       // hidden in the object list
                         const long            z_order=0)         // priority for mouse click
    Ok. Es ist also eine selbst erstellte Funktion vom Typ "bool" mit einigen Parametern. Schauen wir uns die Datentypen hier (deutsch!) an, wird
    einiges verständlicher. Diese Funktion liefert also "true" oder "false" zurück.
    Das Schlüsselwort "const" bei den Parametern gibt lediglich an, das die übergebenen Variablen(-Werte) nicht geändert werden können.

  2. Zitat:
    (0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
    InpStyle,InpWidth,InpFill,InpBack,InpSelection,Inp Hidden,InpZOrder)
    Der Großteil dieser Parameter ist also von den Variablen am Anfang des Codes:
    Code:
    input string          InpName="Rectangle"; // Rectangle name
    input int             InpDate1=40;         // 1 st point's date, %
    input int             InpPrice1=40;        // 1 st point's price, %
    input int             InpDate2=60;         // 2 nd point's date, %
    input int             InpPrice2=60;        // 2 nd point's price, %
    input color           InpColor=clrRed;     // Rectangle color
    input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Style of rectangle lines
    input int             InpWidth=1;          // Width of rectangle lines
    input bool            InpFill=true;        // Filling the rectangle with color
    input bool            InpBack=false;       // Background rectangle
    input bool            InpSelection=true;   // Highlight to move
    input bool            InpHidden=true;      // Hidden in the object list
    input long            InpZOrder=0;         // Priority for mouse click
    Normale Variablen mit Datentypen, aber diesmal einem "input" davor? Google bringt uns u.a. zu Input.
    Dieser Modifikator wird also vor dem Datentyp gesetzt, um Variablen zu erstellen, die nur vom Benutzer des EA's / Indikators
    bei den Eingabeparametern verändert werden können. In MQL4 gibt es auch noch "extern", das selbe, mit dem Unterschied, das die Variablen damit auch im Code verändert werden können.

    Etwas weiter im Code finden wir dann auch die Bezeichnungen "date" & "price", welche wir mit google als "Arrays" identifizieren:
    Code:
    datetime date[];
    double   price[];
    Weiter suchen => Ahh! Ein Array ist einfach nur ein "Feld" von Werten gleichen Datentyps. Die Klammern geben dabei den "Index" an,
    dessen Wert wir haben wollen. Zurück zum Codeschnipsel sehen wir als Index die int-Variablen d1/2 und p1/2.

  3. Zitat:
    {
    return;
    }
    Hier lesen wir über "return", welches die aktuelle Funktion verlässt und üblicherweise einen Wert zurückgibt, der mit dem Datentyp der Funktion übereinstimmt.
    Da die Funktion in unserem Code vom Typ Void ist (= kein Rückgabewert), wird dem return hier kein Wert mitgegeben.
  4. Zum if:
    Code:
    if(... == true) kann so geschrieben werden: if(...)
    if(... == false) kann so geschrieben werden: if(!...)

Fassen wir zusammen:
Code:
if(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpFill,InpBack,InpSelection,Inp Hidden,InpZOrder))
{
   return;
}
  • Im if wird die Funktion RectangleCreate(...) aufgerufen, welche true oder false zurückgibt (bool).
  • Das Ausrufezeichen fragt ab, ob die Funktion false zurückgegeben hat.
  • Ist also (RectangleCreate(...) == false), wird mit return die aktuelle Funktion abgebrochen. Andernfalls wird weiter in der aktuellen Funktion abgearbeitet.

PS: Hey Doc, komm mir jetzt nicht wieder mit "ich hätte zu viel Zeit"
Hatte grad eine Wartepause wegen anderen Sachen. Bin auf diesen Thread gestoßen und wollte was loswerden.