Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Einstieg zu MT4 Programmierung

Geschrieben

Hallo,

 

ich hätte da mal eine Frage:

Was benötigt man um überhaupt für mt4 Programmieren zu können?

Welche Standartsoftware ist damit gemeint.

 

Woher bekomme ich diese?

 

Grüsse

Jörg

  • Antworten 269
  • Aufrufe 81Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Most Popular Posts

  • Also wenn dein Code im Indikator aufgerufen wird, brauchst du auf jedem Fall die Funktion iBarShift, wie ich es oben beschrieben habe, aus dem ExpertAdvisor wird auch so funktionieren. Schau wirklich

  • die folgene Erklärung von Funktionen bezieht sich nur auf MQL4!   Was ist start() ? eine Funktion!   Alles was Arbeitet findet immer in Funktionen statt. Ausserhalb von Funktionen geht nix.   bei MQL

  • Das ist eigentlich kein Bug Du gibst in dem iHigh(NULL, 15, 1) in dem Parameter Barshift 1 an, das ist falsch. In dem Strategietester wird dieser Bar immer den gleichen Wert zurückgeben, nämlich Hi

Veröffentlichte Bilder

Featured Replies

Geschrieben

Dann aber ,mit diesen Historieen funktioniert iLow() und iHigh() in der oben dargestellten Variante .

:top:

 

4.) Return(0) spielt glaube ich keine Rolle, da ich übergeordnete Variablen berechne. EnterCurrentShort/Long werden also

innerhalb der Funktion für das gesamte Prg verändert (oder? ) .

 

ja veränderungen an übergeordneten (globalen) Variablen bleiben außerhalb erhalten. bzgl. return(0) wäre es bei einer Funktion die keinen Rückgabewert hat schöner sie als void zu deklarieren (statt double) und statt return(0) nur return zu schreiben. Rein vom Programmierstil.

Geschrieben

Zum Abschluss meiner Frage ganz oben ein Codeschnipsel der alle Lektionen beinhaltet und auf die Historieen der 1 Min-TF und 4-Stunden-TF zurückgreift :

 

//+-----------------------------------------------------------------------------------------------+
//|   function  :  Berechnung der ZielPreise für den Handel                                       |
//| wenn der ÜT Long ist = Long knapp über dem aktuellen Kurs , der Short Hedge unter Tageslow    |
//| wenn der ÜT Short ist = Long Hedge über TagesHigh , der Short knapp unter dem aktuellen Kurs  |
//+-----------------------------------------------------------------------------------------------+
void Zielpreise ()                               // Short False = übergeordneter Longtrade        |
{                                                // Richtung True = kurzfristig Long              |
                                                //                                               |
    if ( Short == False )                       // WENN der übergeordnete Trend LONG             |
         {                                      //                                               |
         if (Richtung == true)                  // falls der kurzfristge Trend LONG ist          |
         {                                      //                                               |
//           Print ("1-1 iHigh 15 = ",High[iHighest(Markt,0,MODE_HIGH,15,1)]);//                  |
CurrentEnterLong = High[iHighest(Markt,0,MODE_HIGH,15,1)]+Step;// das Hoch der letzten 15 Minuten |
//            Print (" 1 C E L = ",CurrentEnterLong);//                                           |
         }                                      //                                               |
          else                                  //                                               |
          {                                     //                                               |
//         Print ("2-1 iHigh 60 = ",High[iHighest(Markt,0,MODE_HIGH,60,1)]);//                    |
CurrentEnterLong = High[iHighest(Markt,0,MODE_HIGH,60,1)]+Step;// das Hoch der letzten Stunde    |
//         Print (" 2 C E L = ",CurrentEnterLong);//                                              |
          }                                     //                                               |
CurrentEnterShort=Low[iLowest(Markt,240,MODE_LOW,6,1)]-0.0025;// das Tagestief für den Hedge      |
//        Print (" 3 C E S= ",CurrentEnterShort);//                                               |
         }                                      //                                               |
      else                                      //  WENN jedoch der übergeordnete Trend Short    |
         {                                      //                                               |
CurrentEnterLong = High[iHighest(Markt,240,MODE_HIGH,6,1)]+0.0025;//das 24 Std-Hoch für den Hedge|
//        Print (" 4 C E L = ",CurrentEnterLong);//                                               |
         if (Richtung == true)                  // falls der kurzfristge Trend LONG ist          |
             {                                  //                                               |
CurrentEnterShort=Low[iLowest(Markt,0,MODE_LOW,60,1)]-Step    ;// das Tief der letzten Stunde     |
//            Print (" 5 C E S = ",CurrentEnterShort);//                                          |
             }                                  //                                               |
          else                                  //                                               |
             {                                  //                                               |
CurrentEnterShort=Low[iLowest(Markt,0,MODE_LOW,15,1)]-Step    ;// das Tief der letzten 15 Minuten |
//            Print (" 6 C E S = ",CurrentEnterShort)     ;//                                     |
             }                                  //                                               |
         }                                      //                                               |
    return                                     ;//                                               |
}                                                //                                               |
//------------------------------------------------------------------------------------------------+

 

Vielleicht hilft´s ja noch jemandem irgendwann

 

KB

 

PS (Edit) : Die "Print"_Anweisungen dienen nur dem Debugg (logo, aber es soll erwähnt sein) .

Geschrieben

Zum Abschluss meiner Frage ganz oben ein Codeschnipsel der alle Lektionen beinhaltet und auf die Historieen der 1 Min-TF und 4-Stunden-TF zurückgreift :

 

Der Vollständigkeitshalber: Die Variable Markt ist ein String und enthält das gewünscht Symbol (also zB Symbol()) richtig?

Geschrieben

Der Vollständigkeitshalber: Die Variable Markt ist ein String und enthält das gewünscht Symbol (also zB Symbol()) richtig?

 

Ja , natürlich, Dank für die Ergänzung . :yes4:

 

KB

Geschrieben
@All : gibt es eigentlich nur den einen StrategyTester den man mit dem MT4 herunterlädt oder gibt es da verbesserte Software die vielleicht komfortablere Settings hat oder auch schöner visualisiert ? Oder gibt es irgendwo einen Thread o.ä. dazu ? Danke KB
Geschrieben

Der Vollständigkeitshalber: Die Variable Markt ist ein String und enthält das gewünscht Symbol (also zB Symbol()) richtig?

 

Die Variable Markt ist ein endloser String mit kryptischer Codierung :palomitas:

 

Lutz

Geschrieben

"Markt" ist String "EURUSD" in meinem EA , s.a. #230 .

 

@All : gibt es eigentlich nur den einen StrategyTester den man mit dem MT4 herunterlädt oder gibt es da verbesserte Software die vielleicht komfortablere Settings hat oder auch schöner visualisiert ? Oder gibt es irgendwo einen Thread o.ä. dazu ?

 

Danke

 

KB

Geschrieben

@All : gibt es eigentlich nur den einen StrategyTester den man mit dem MT4 herunterlädt oder gibt es da verbesserte Software die vielleicht komfortablere Settings hat oder auch schöner visualisiert ?

Was meinst du genau ?

Die Visualsierung oder ausführlichere Ergebnisse ?

 

Guck schon mal hier

Codebase

 

Es gibt aber auch noch diverse Extra Software zu erwerben.

Forex Tester

  • 3 Monate später...
Geschrieben

Nun - ich bin Softwareentwickler und kann auch C. MQ4 ist nah an C. Also lohnt es sich ZUERST C zu lernen und danach sich ins Thema (MQ4) zu arbeiten. Will ich ein Auto reparieren lese ich erstmal die Regeln der Technik, bevor ich irgendwas ausbaue. Hinzu kommt, dass bei Software oftmals es funktioniert. Aber eher zufällig. Solange bis ( programmseits ) der worst case eintritt. Wichtig! Es ist im Kopf des Entwicklers zu beachten - WAS ALLES SCHIEF GEHEN KANN - und dem zu begegnen. Wir denken da an Murphys Gesetz ( gibt es wirklich! )

 

Also kurz gesagt: Hardware ( Speicherarten, Datentransfertechnologien... )verstehen lernen, Programmiersprache lernen ( nicht nur Syntax sondern z.B. auch Speicherplatzbelegungen, Pufferarten u.u. ), Finanzterminologie lernen, MQ4 erlernen und dann...gehts schon los;)

 

 

Viel Spass und halt durch!!!

  • 5 Monate später...
Geschrieben

Hallo,

 

wie müsste ein Array aussehen, wenn ich die Daten der Trade History in ein Array schreiben will. Da die meisten Daten ja vom Typ Double und Int sind wäre es ja einfach - aber mir Symbol und TradeTyp bekommen ich das nicht hin :white_flag::girl_hysteric:

 

mtbf40

Geschrieben

Ich würde für jedes Element in der Trade History Zeile ein eigenes Array festlegen, dann kannst auf die Daten auch einfacher zugreifen, es werde weniger Fehler produziert.

Also die folgende Arrays anlegen und fortlaufend indexieren, wenn neue Trades geschrieben werden:

datetime open_time[]

double open_price[]

double lotsize[]

string symbol[] usw.

 

Wenn ein neuer Trade kommt, dann schreibst es in alle Arrays gleichzeitig was rein. Die kommende Indixierung ist dann indx = ArraySize(open_time),

weil alle Arrays die gleiche Grösse haben.

Dieser Beispiel war für den Fall wenn du die Arrays dynamisch verwalten möchtest, wenn du die Daten Daten in den statischen Array schreiben möchtest, dann reicht es den letzten geschriebenen Index zu merken.

  • 3 Wochen später...
Geschrieben

Also, auch wenn ich wirklich nicht viel mit Devisenhandel und so am Hut hab, ich hoffe ich blicke da demnächst mal durch!

Ich studier ja seit kurzer Zeit Wirtschaftsinformatik und habe da ein Semester Programmieren in C gehabt.

Wenn MQL4, wie ja oft gesagt wird, so ähnlich ist, nur ohne Pointer, dann bin ich glücklicher denn je, da Pointer meines Erachtens nach sowieso nur übertriebene Arrays sind. Man mag sie, oder man mag sie nicht.

Ich hoffe ich kann hier etwas lernen und hoffentlich auch dazu beitragen, dass ihr vielleicht noch etwas lernt - vielleicht nicht die nächsten Monate, aber vielleicht kann ich ja auch in ein paar Jahren hier jemandem behilflich sein, wenn mein Fachwissen sich dem eines geübten Coders nähert!

Geschrieben

Ich hoffe ich kann hier etwas lernen und hoffentlich auch dazu beitragen, dass ihr vielleicht noch etwas lernt

Hallo erstmal.... Buddabrot :Howdy:

 

Willkommen bei Tom-Next !

 

Ob du hier etwas lernen kannst ? - bin mir da recht sicher.

Grade, aber nicht nur zum programmieren wirst du hier in sehr vielfältiger Hinsicht fündig werden.

 

Viel Spaß bei uns.

Geschrieben

Hallo erstmal.... Buddabrot :Howdy:

 

Willkommen bei Tom-Next !

...

Viel Spaß bei uns.

 

Vielen Dank!

 

Gibt es eigentlich so eine Art "Ur-Entwicklungsumgebung" für MQL, außer jetzt das Ding, das mit MT4 sozusagen mitgeliefert wird?

Ich hab das VS Ultimate 2010 von Microsoft zuhause, da die Hochschule scheinbar Geld bis zum Abwinken und einen Vertrag mit Microsoft hat. Kann man darin auch in dieser Sprache programmieren, weiß das zufällig jemand? Bin mit dem Ding schon ziemlich vertraut und wäre daher natürlich super.

Bisher hab ich dort aber "nur" C/C++ hergenommen, wobei doch mehr C ohne ++.

Geschrieben

Gibt es eigentlich so eine Art "Ur-Entwicklungsumgebung" für MQL, außer jetzt das Ding, das mit MT4 sozusagen mitgeliefert wird?

 

Ja, der MetaEditor (also das Ding das mitgeliefert wird). MQL ist zwar ähnlich wie C aber eben nur ähnlich. Braucht also den eigenen Compiler vom MT.

Geschrieben

Gibt es eigentlich so eine Art "Ur-Entwicklungsumgebung" für MQL, außer jetzt das Ding, das mit MT4 sozusagen mitgeliefert wird?

Du kannst so ziemlich jede Entwicklungsumgebung anbinden, von der aus sich Tools (in dem Fall den Compiler) aufrufen lassen.

Ich benutze z.B. UltraEdit. Wenn du komfortabel arbeiten willst, dann solltest du aber auch in der Lage sein Syntax-Highlighting oder Befehlsvervollständigung einbinden zu können.

Da könnte es dann schon nötig sein, dass du deinen eigenen Konfigurationsfiles dafür erstellen musst.

  • 1 Monat später...
Geschrieben

Mal so nebenbei, nach der Zeit des Einlesens und der Orientierung in die Thematik - die Übersetzung ins Deutsche für jeglichen MQL4-Nonsens ist in Arbeit und kommt! Wann ist ungewiss, aber das Ding kommt!

Unheimlich interessant ist es für mich, als Einsteiger, allemal und Spaß macht es noch dazu - beste Voraussetzungen also

 

Und ab gehts Richtung Ziel :kruemel:

  • 4 Monate später...
Geschrieben

hab da mal 'ne Frage an die Experten:

 

kann man(n) bei mql4 ein Array in folgender Art aufbauen:

 

EURUSD

OP -> Wert

SL -> Wert

TP -> Wert

USDCAD

OP -> Wert

SL -> Wert

TP -> Wert

GBPUSD

OP -> Wert

SL -> Wert

TP -> Wert

 

Ausgelesen werden Globale Variablen

 

Bsp.:

EO_OP_GBPUSD

EO_SL_GBPUSD

EO_TP_GBPUSD ... können n+1 Pairs sein

Bearbeitet von mtbf40

Geschrieben

Also ein zweidimensionales Array mit 2. Dimension fix länge 3? ja das geht.

assoziative Arrays gibts nicht... (also EO_OP_GBPUSD kann kein key sein).

 

ansonsten: ich glaub ich hab die frage noch nicht verstanden...

 

jedes Pair hat 3 GV: mit F3 aufgerufen, kann es so ausshen:

Digits -> Wert

EO_OP_GBPUSD -> Wert (GV 1.1.)

EO_OP_EURUSD -> Wert (GV 2.1.)

EO_SL_GBPUSD -> Wert (GV 1.2.)

EO_SL_EURUSD -> Wert (GV 2.2.)

EO_TP_GBPUSD -> Wert (GV 1.3.)

EO_TP_EURUSD -> Wert (GV 2.3.)

PipValue -> Wert

 

ich mache eine for-Schleife über GlobalVariablesTotal()

dann

if (StringFind(GVname,"EO_",0) >= 0 && GVvalue > 0)

es werden nur GV ausgewertet die >0 sind - also wertig

... und dann soll das Array aufgebaut werden nach den Symbolen, jeweils mit OP/SL/TP

Bearbeitet von mtbf40

Geschrieben

jedes Pair hat 3 GV: mit F3 aufgerufen, kann es so ausshen:

Digits -> Wert

EO_OP_GBPUSD -> Wert (GV 1.1.)

EO_OP_EURUSD -> Wert (GV 2.1.)

EO_SL_GBPUSD -> Wert (GV 1.2.)

EO_SL_EURUSD -> Wert (GV 2.2.)

EO_TP_GBPUSD -> Wert (GV 1.3.)

EO_TP_EURUSD -> Wert (GV 2.3.)

PipValue -> Wert

 

ich mache eine for-Schleife über GlobalVariablesTotal()

dann

if (StringFind(GVname,"EO_",0) >= 0 && GVvalue > 0)

es werden nur GV ausgewertet die >0 sind - also wertig

... und dann soll das Array aufgebaut werden nach den Symbolen, jeweils mit OP/SL/TP

 

die Pairs hole ich mir über

StringSubstr(GVname,6,7)

Geschrieben

Mir wurde mal gesagt, dass ich besser die Finger von den "EA nutzt GV"weglassen möge, da beim Datenmanagement im Metatrader nicht immer alles so funzt, dass es 1000% zuverlässig ist . Den Tip habe ich in Zusammenhang mit meiner Frage erhalten, was denn wäre, wenn ich anstatt ein hochkomplexes HS über mehrere Märkte in einem Chart lieber mehrere Charts (mehrere Märkte) mit einem HS arbeiten lassen will .Offensichtlich spielt dann ja das RMMM , dass jeder EA davon weiss, eine große Rolle .

 

Den Rat habe ich ernst genommen und daher folgende #Include geschrieben . Diese basiert auf dem entsprechenden Kapitel des mql4 book insbesondere aber das Ordermanagment .

 

Meine Include erweitert die Terminal() um das Verbinden/Übertragen aller Order einer Gruppe "Magicnumber" in einen Array "Ernten" . Dazu werden im Orderbuch alle aktiven Order mit "Magicnumber" herausgesucht und in den Array eingetragen . Ein Algorithmus beschäftigt sich mit der Klassifizierung der einzelnen Trades, ein anderer mit dem RMMM . All das wird im Array hinterlegt . Der Array ist überall , in allen Sequenzen des restlichen Programmes , abrufbar . So erhalte ich kontinuierliche meine Orderdaten aktuell und basiere dabei auf dem aktuellen Orderbuch . GV werden ja einmal gespeichert und nur Du wirst diese ändern können ; Ausnahme, nach 4 Wochen inaktivität werden sie gelöscht .

 

Vielleicht hilft das ?

 

KB

Geschrieben

Mir wurde mal gesagt, dass ich besser die Finger von den "EA nutzt GV"weglassen möge, da beim Datenmanagement im Metatrader nicht immer alles so funzt, dass es 1000% zuverlässig ist . Den Tip habe ich in Zusammenhang mit meiner Frage erhalten, was denn wäre, wenn ich anstatt ein hochkomplexes HS über mehrere Märkte in einem Chart lieber mehrere Charts (mehrere Märkte) mit einem HS arbeiten lassen will .Offensichtlich spielt dann ja das RMMM , dass jeder EA davon weiss, eine große Rolle .

 

Den Rat habe ich ernst genommen und daher folgende #Include geschrieben . Diese basiert auf dem entsprechenden Kapitel des mql4 book insbesondere aber das Ordermanagment .

 

Meine Include erweitert die Terminal() um das Verbinden/Übertragen aller Order einer Gruppe "Magicnumber" in einen Array "Ernten" . Dazu werden im Orderbuch alle aktiven Order mit "Magicnumber" herausgesucht und in den Array eingetragen . Ein Algorithmus beschäftigt sich mit der Klassifizierung der einzelnen Trades, ein anderer mit dem RMMM . All das wird im Array hinterlegt . Der Array ist überall , in allen Sequenzen des restlichen Programmes , abrufbar . So erhalte ich kontinuierliche meine Orderdaten aktuell und basiere dabei auf dem aktuellen Orderbuch . GV werden ja einmal gespeichert und nur Du wirst diese ändern können ; Ausnahme, nach 4 Wochen inaktivität werden sie gelöscht .

 

Vielleicht hilft das ?

 

KB

 

meine Frage steht in Zusammenhang mit folgenden Thread WindowsID und EasyOrder

Ich kann nicht - oder weis nicht - wie ich die Werte der einzelnen Linien aus den Charts ermitteln kann. deshalb gehe ich über Globale Variablen

Meine Frage habe ich hier reingesetzt, weil es eine allgemeine zu GV und Arrays ist.

Bearbeitet von mtbf40

Geschrieben

Wie gesagt, ein zweidimensionales array geht. Aber nur mit integer als key. Dafür bräuchtest du halt eine fixe Zuordnung von Pair zu array index.

 

Assoziative Arrays bzw. Maps mit Strings als Key gibts in MT4 AFAIK nicht

danke erst einmal - ich werde mal "weiter basteln"

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.