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

Die OrderHistory gibt´s nur live, also nicht im Backtest ne?

Doch, gibt es auch im Backtest.

Geschrieben

Hmh dann muss ich die Tage was falsch gemacht haben, gab immer -1 zurück.

Muss ich nochmal testen, Danke Dir Rainworm. :correct:

 

 

Geschrieben

Und was bedeutet dann bei mir OrderSymbol() == Symbol() ? :tongue:

Damit addierst Du den Profit nur für ein bestimmtes Pair, wurde z.b. vorher mit Orderselect ausgewählt!?

Geschrieben

Und was bedeutet dann bei mir OrderSymbol() == Symbol() ? :tongue:

Vermute mal, das bedeutet, dass ich langsam blind werde :prof:

Geschrieben

Und was bedeutet dann bei mir OrderSymbol() == Symbol() ? :tongue:

Da keine Einsprüche kommen, sehe ich das dann als gelöst an. :palomitas:

Geschrieben

Da keine Einsprüche kommen, sehe ich das dann als gelöst an. :palomitas:

Du hast schon recht... :top:

 

Rainworms Frage war aber eher rhetorisch gemeint, da ich vorher rumgemeckert hab, daß genau diese Abfrage fehlt :fool:

Geschrieben

Da keine Einsprüche kommen, sehe ich das dann als gelöst an. :palomitas:

Tja, das war aber nicht die Frage :drinkbeer: Das bezog sich lediglich auf Wogo's Aussage, ich würde das Symbol nicht prüfen, was ich jedoch mit genau der Zeile mache.

 

Die Preisfrage ist die hier:

Achja: mein Code funktioniert nur bis Timeframe D1. Alles über der Tagesdarstellung geht nicht. Wer rausfindet wieso, bekommt ein Thanks

 

@Wogo: du darfst nicht (schriftlich) mitmachen, die Frage ist für die Nachwuchsprogrammierer :jump:

Geschrieben

@Wogo: du darfst nicht (schriftlich) mitmachen, die Frage ist für die Nachwuchsprogrammierer :jump:

Ok, ok, ich sag die Antwort jetzt leise vor mich hin...

 

Dann will ich aber auch, dass du leise "Danke Wogo" sagst, wenn ich mir das "Thanks" schon nicht wegschnappen darf :laie70b:

Geschrieben

Axo, naja, wenn EOD handelst macht ein Tagsziel/limit wenig Sinn, weil der Trade könnte ja vor X Tagen gestartet worden sein und es geht nur ein Trade am jeweiligen Tag.

Es sei denn, das Tageslimit ist grösser/kleiner als das Positionsrisiko, macht aber gar keinen Sinn sowas.

Dann kann ich auch gleich sagen: ab einem Fehltrade ist Schicht für heute.

 

Ich hoffe, ich habe mich unverständlich genug ausgedrückt. :laugh:

Geschrieben

Ich hoffe, ich habe mich unverständlich genug ausgedrückt. :laugh:

Ja, hast du. Das ist aber nicht die Antwort :wink2:

Die Funktion get_day_profit() von oben kann natürlich nicht nur für das Prüfen von Tageslimits genutzt werden. Inhaltlich hast du natürlich Recht. Warum holt diese Funktion aber in einem Wochen- oder Monatschart nicht den Profit vom aktuellen Tag?

Geschrieben

Dann will ich aber auch, dass du leise "Danke Wogo" sagst, wenn ich mir das "Thanks" schon nicht wegschnappen darf :laie70b:

Habe dir als Ausgleich Reputation in Post 209 gegeben :laugh:

 

Und :empathy2: wirst du auch...

Geschrieben

Hi Leute,

mal ist man einen Tag nicht durchgehend on schon geht die Post ab ;)

muss nur ein bissl Senf dazugeben:

@Nelly: übrigens überprüfst du in deinem Code nicht den Monat. Somit würde er bspw. am 08.03.2011 nicht handeln, wenn du am 08.02.2011 über 1000 EUR warst.

 

Doch würde er, er überprüft nämlich nicht den Tag, sondern DayOfYear und dann noch Year. Also voll in Ordnung. Zusätzliche Überprüfung des Monats is nit falsch aber auch nit notwendig.

 

 

Zu deiner Frage: Die is fast ein bissl fies. Vor allem für Noobies ;) Aber durch Herausforderungen wächst man. Aber da ich aufholen muss darf i zumindest einen Tipp in Form einer neuen Frage geben: Welche Zeit/Zeitpunkt hat ein Balken im Wochen/Monatschart?

(Und es macht echt wenig Sinn den Tagesprofit zu verwenden wenn der EA am Wochenchart rennt ;)

Geschrieben

Welche Zeit/Zeitpunkt hat ein Balken im Wochen/Monatschart?

Ja genau, da hatte ich auch erst dran gedacht. Dachte aber dann, dass es daran liegt wie die Ticks reinkommen (aber das dürfte ja in allen TFs identisch sein) und da war Bull dann verwirrt. :plorar1:

Aber ist doch klar: Time[0] bezieht sich ja auf den aktuellen Balken und der bewegt sich ja dann zb. im Monatschart einen Monat lang horizontal garnicht.

Hab aber bestimmt wieder was übersehen. :laugh:

Geschrieben

Aber ist doch klar: Time[0] bezieht sich ja auf den aktuellen Balken und der bewegt sich ja dann zb. im Monatschart einen Monat lang horizontal garnicht.

Korrekt. Time[0] beinhaltet immer die Startzeit der Candle. Somit ist Time[0] im Monatschart ein Monat lang der 01. des Monats. Ich habe dir mal Thanks verteilt. Sogar zurückgenommen und nochmal, wieder zurückgenommen und nochmal :gum:

 

er überprüft nämlich nicht den Tag, sondern DayOfYear und dann noch Year. Also voll in Ordnung.

Auch ich sollte besser lesen. Stimmt. Es handelt sich nämlich nicht um den Tag, sondern um die Tagesnummer im Jahr (1 bis 365). Daher passte das doch so. Jetzt ist Vola ganz verwirrt bei so vielen Möglichkeiten :wink2:

Geschrieben

Jetzt ist Vola ganz verwirrt bei so vielen Möglichkeiten :wink2:

Vola ist nicht mehr wirklich verwirrt, eure Erlärungen sind schon super - aber ich bekomme das nicht in den Kopf.

Für mich ist und bleibt das alles, die Wurzel aus Russisch rückwärts gewaschen3 :undecided:

Geschrieben

hallo RAiNWORM,

 

habe eben mal deinen vorschlag bei mit in den ea gepackt, aber da kommt folgende fehlermeldung:

 

 

http://img215.imageshack.us/img215/9348/rainworm.jpg

 

 

mache ich was falsch? sicherlich, denn ich denke, dass du keinen fehler in deinem code hast ...

Bearbeitet von Mythos
Zitat gelöscht, bitte nur notwendigen Text zitieren

Geschrieben

Hi Nelly,

 

wo hast du den Code im EA eingefügt? Ich vermute innerhalb der start() Funktion.

get_day_profit() ist aber eine eigene Funktion die du außerhalb von start definieren musst und dann in Start verwenden kannst.

 

hth

 

hallo Mythos,

 

vielen dank für die info!!!

 

werde es gleich mal ausprobieren ...

  • 1 Monat später...
Geschrieben

Hallo,

 

klasse Unterstützung, da sträubt man sich nicht mehr es zu lernen.

 

Ihr seid Rakete.

 

 

Gruß

 

paspartout

Geschrieben

iHigh( NULL , 15,1) oder auch iHigh( NULL , 60,1) funktionieren im StratTester nicht und gibt Wert "0" als Ergebnis . Die Historie

ist OK , d.h. ich finde Preise . Hingegen bekomme ich für iLow(NULL , 1440 ,1) die erwarteten Ergebnisse .

Kompilierung ist fehlerfrei . Die Vielzahl der Print-Befehle verdeutlichen, wie lange ich schon den Bug suche . :-(

 

 

//+-----------------------------------------------------------------------------------------------+
//|   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  |
//+-----------------------------------------------------------------------------------------------+
double 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 = ",iHigh(NULL, 15, 1));//                                     |
             CurrentEnterLong = iHigh(NULL, 15, 1)+Step  ;// das Hoch der letzten 15 Minuten     |
             Print (" 1 C E L = ",CurrentEnterLong);//                                           |
         }                                      //                                               |
          else                                  //                                               |
          {                                     //                                               |
             Print ("2-1 iHigh 60 = ",iHigh(NULL, 60, 1));//                                     |
             CurrentEnterLong = iHigh(NULL, 60, 1)+Step  ;// das Hoch der letzten Stunde         |
             Print (" 2 C E L = ",CurrentEnterLong)      ;//                                     |
          }                                     //                                               |
         CurrentEnterShort= iLow (NULL , 1440 , 0)-0.0025;// das Tagestief für den Hedge         |
         Print (" 3 C E S= ",CurrentEnterShort);//                                               |
         }                                      //                                               |
      else                                      //  WENN jedoch der übergeordnete Trend Short    | 
         {                                      //                                               |
         CurrentEnterLong = iHigh(NULL, 1440, 0)+0.0025  ;// das TagesHoch für den Hedge         |
         Print (" 4 C E L = ",CurrentEnterLong);//                                               |
         if (Richtung == true)                  // falls der kurzfristge Trend LONG ist          |
             {                                  //                                               |
             CurrentEnterShort = iLow(NULL, 60, 0)-Step     ;// das Tief der letzten Stunde      |
             Print (" 5 C E S = ",CurrentEnterShort);//                                          |
             }                                  //                                               |
          else                                  //                                               |
             {                                  //                                               |
             CurrentEnterShort = iLow( NULL,15, 0)-Step  ;// das Tief der letzten 15 Minuten     |   
             Print (" 6 C E S = ",CurrentEnterShort)     ;//                                     |
             }                                  //                                               |
         }                                      //                                               |
    return(0)                                  ;//                                               |
}                                                //                                               |
//------------------------------------------------------------------------------------------------+

 

Für Hilfe meinen Dank im voraus .

 

KB

Geschrieben

Das ist eigentlich kein Bug :wwink:

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 High[1] auf dem 15M Timeframe ( dieser Wert würde dem Wert High[1] auf dem aktiven Chart 15M entsprechen),

wenn du also im Strategietester die ganze Historie durchjagst, bekommst du immer den gleichen Wert ( also High vor letzter Kerze im 15M Chart )

 

Richtig wäre diesen Parameter, also den Barshift ( bei dir 1 ) mit der Funktion iBarShift zu ermitteln :yess:

Geschrieben

iHigh( NULL , 15,1) oder auch iHigh( NULL , 60,1) funktionieren im StratTester nicht und gibt Wert "0" als Ergebnis . Die Historie ist OK , d.h. ich finde Preise . Hingegen bekomme ich für iLow(NULL , 1440 ,1) die erwarteten Ergebnisse .

Kompilierung ist fehlerfrei . Die Vielzahl der Print-Befehle verdeutlichen, wie lange ich schon den Bug suche . :-(

 

Also iHigh retourniert dir in M15 und H1 0, iLow für D1 geht? Was meinst du mit "History is OK"? Das M15 und H1 Daten entsprechend vorhanden sind? Würd ich sonst als erstes checken.

Geschrieben

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 in die History, ob da eventuell Lücken vorhanden sind

 

hier habe einen kleinen Code für dich geschrieben, den du als EA abspeichern kannst und dann im StrategieTester im VisualMode ausführen könntest,

dann könntest du auf die Schnelle herausfinden, wo es hackt :declare:

 

int start()
{
  Comment("High/Low 1M=",  iHigh(NULL,PERIOD_M1,1),  " / ", iLow(NULL,PERIOD_M1,1), "\n",
          "High/Low 5M=",  iHigh(NULL,PERIOD_M5,1),  " / ", iLow(NULL,PERIOD_M5,1), "\n",
          "High/Low 15M=", iHigh(NULL,PERIOD_M15,1), " / ", iLow(NULL,PERIOD_M15,1),"\n",
          "High/Low 30M=", iHigh(NULL,PERIOD_M30,1), " / ", iLow(NULL,PERIOD_M30,1),"\n",
          "High/Low H1=",  iHigh(NULL,PERIOD_H1,1),  " / ", iLow(NULL,PERIOD_H1,1), "\n",
          "High/Low H4=",  iHigh(NULL,PERIOD_H4,1),  " / ", iLow(NULL,PERIOD_H4,1), "\n",
          "High/Low D1=",  iHigh(NULL,PERIOD_D1,1),  " / ", iLow(NULL,PERIOD_W1,1), "\n",
          "High/Low W1=",  iHigh(NULL,PERIOD_W1,1),  " / ", iLow(NULL,PERIOD_W1,1), "\n",
          "High/Low MN1=", iHigh(NULL,PERIOD_MN1,1), " / ", iLow(NULL,PERIOD_MN1,1)
          );
}

Geschrieben

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.

Stimmt in einem Indi wärs sinnlos, daran hab ich gar nicht gedacht.

 

hier habe einen kleinen Code für dich geschrieben, den du als EA abspeichern kannst und dann im StrategieTester im VisualMode ausführen könntest,

:doubleup: (bei solchem Feedback reicht ein Thx und rep+1 gar nicht aus...)

Geschrieben
bei solchem Feedback reicht ein Thx und rep+1 gar nicht aus...

 

sehe ich ganz genauso und möchte daher auch nochmals recht herzlich Euch allen, vor allem aber titanfx , meinen Dank sagen !!

 

 

 

Ansonsten bin ich weiter gekommen aber mit dem EA von Titan wird es mehr Erkenntnisse geben :

 

1.) ich habe NULL durch Symbol() (EURUSD) ersetzt, dass konnte nur richtig sein, auch wenn es hier vielleicht/wahrscheinlich nicht die Ursache war

2.) meine Historieen mußte ich als nächstes korrigieren, ich habe zwar 15 Monate 1Min-Kerzen, aber nicht soviel bei 15Min. Ich dachte, dass das automatisch umgerechnet wird, ist aber nicht so .

3.) je nach Demo oder Cashkonto sind meine 15 Min Kerzenhistoriee ab Feb 11 (Demo) oder Nov10 (Cash) .

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

 

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? ) .

 

Vielen Dank nochmals .

 

Für mich ist TN wirklich ein vorbildliches Forum , sowohl in der Art und Weise wie miteinander umgegangen wird, aber auch in der wirklich aussergewöhnlichen Hilfsbereitschaft . Daher - und ich weiss , dass ich mich widerhole - bitte ! wenn ich mal helfen kann, dann sehr sehr gerne .

 

KB

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.