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.

Erste Gehversuche in MQL

Geschrieben

Hallo liebe MQL-Gemeinde :laugh:

 

ich will mich ja (wie in meiner Vorstellung angekündigt) in MQL einarbeiten. Dies am liebsten nach der Masche "Learning by Doing". Ein paar Programmierbasics hab ich noch (irgendwo) im Kopf. Allerdings aus der Sprache Java die ich an der Uni kennenlernen durfte. Also in Sachen Boolesche Bedingungen und Schleifen dürfte ich noch halbwegs fit sein. Auch was Variablen und diese ganzen Initialisierungen mit int, double usw. hab ich schon mal gesehen :laugh:

 

Was ich nun vorhabe:

Als kleinen Einstieg wollte ich, sozusagen mit der Tür ins Haus gefallen, einen kleinen Indikator basteln der mir Bar-Formationen erkennt. Natürlich wollte ich jetzt nicht versuchen alle Candles die man so kennt nachprogrammieren. Anfangs will ich das nur mit dem sog. "Hammer" versuchen.

 

Eine paar kleine Definitionen hab ich mir auch schon zurechtgepuzzelt:

  • Tief muss tiefer als am Tag zuvor sein
  • Open + Close sollte im oberen Viertel (oder besser Drittel?) der Kerze liegen

Ich glaube das sollte auch schon so ziemlich die gängiste Auffassung eines Hammers entegegenkommen, oder?

 

So. Wer so sagt ist noch lange nicht fertig. Das ist wohl auch hier ziemlich treffend :ot: :ot:

 

Nun sitze ich gerade etwas ratlos am Rechner und frage mich, wie ich die Kerzen nach diesen Kriterien checken kann. Ich stöbere schon seit Ewigkeiten in der Documentation, komme aber nach wie vor nicht auf den Trichter wie ich die Kerzen prüfen soll. Überhaupt um erstmal sagen zu können, dass Kerze xy nach den Vorgaben a und b prüfen zu lassen.....

 

Kann mir dazu wer einen Tip geben?

 

Natürlich werde ich den Code, wenn ich dann mal was zusammengedengelt bekomme, hier auch posten. Das ganze ist ja kein Staatsgeheimnis :ot:

 

Grüße........

Featured Replies

Geschrieben
  • Autor
bzgl direkt auf die Balken. Du malst es derzeit aug High + 10*Point, das is recht eng. versuch hier mal andere werte bzw. verschieb das Symbol händisch dorthin wo es soll und sieh dir dann an welche Parameter es hat.

ich werde mal schauen, wohin ich das schieben werde :wub:

 

liegt daran das du nas Symbol "Hammer" löscht, aber Symbole "Hammer1"... malst. (im deinit fehlt beim Symbolnamen das i dazu)

wo schreibe ich das i hin? Ich habe hin und her probiert und in der Hilfe nachgelesen. Produzierte aber immer nur Fehler beim Kompilieren :wub:

 

Du kommst nicht umhin über die verfügbaren Objekte zu iterieren (--> ObjectsTotal(...))

ich kann zwar gerade überhaupt nichts mit iterieren anfangen, aber ich schaue mir mal den Befehl ObjectsTotal über die Hilfe an, in der Hoffnung das mein Englisch ausreicht.

mal schauen ob ich danach irretiert oder iteriert bin :wub: :wub:

Bearbeitet von Luisa.A.

Geschrieben
wo schreibe ich das i hin? Ich habe hin und her probiert und in der Hilfe nachgelesen. Produzierte aber immer nur Fehler beim Kompilieren :wub:

nimm einfach statt der Bezeichnung "Hammer" den String den du verwendest wenn du das Objekt erzeugst ;)

 

wegen iterieren: heißt nix anderes wie "alle Objekte durchgehen". ObjectsTotal() gibt dir die Anzahl aller Objekte und du könntest alle durchgehen (über alle iterieren) und löschen welche du willst. Aber da du ja genau weißt welche du erzeugst, machts mehr Sinn diese direkt zu löschen.

 

Noch was zu deiner Objekterzeugung: Überleg dir mal kurz was in folgendem Fall passiert:

Du ziehst den Indi auf den Chart, der aktuelle Balken ist ein Hammer, Objekt wird erzeugt etc. Es kommt ein neuer Balken dazu der auch ein Hammer ist. Welches Objekt wird jetzt erzeugt (wie heißts)? Gibts dieses Objekt in dem Moment schon? Führt das zu einem Problem?

 

HTH

Geschrieben
  • Autor
Welches Objekt wird jetzt erzeugt (wie heißts)? Gibts dieses Objekt in dem Moment schon? Führt das zu einem Problem?

Also die Objekte heißen Hammer 1, Hammer 2, Hammer 3,..., Hammer 55,....usw, Bzw. die Hammer werden so benannt. Wo soll es da zu Problemen kommen? Oder auf was willst Du hinaus?

 

Ich hab soeben auch nochmal nachgeschaut. Dabei ist mir aufgefallen, dass die nicht durchgängig nimmeriert sind, sondern scheinbar die Nummer der Kerze bekommen..... Kann das sein?

Geschrieben
Ich hab soeben auch nochmal nachgeschaut. Dabei ist mir aufgefallen, dass die nicht durchgängig nimmeriert sind, sondern scheinbar die Nummer der Kerze bekommen..... Kann das sein?

ja, sie erhalten als Zahl den aktuellen Offset des Balken. Wenn also jetzt beim vorletzen Balken (also 1 Balken zurück) ein Hammer entdeckt wird, dann erhält der das Objekt "Hammer 1". Jetzt geht der aktuelle Balken (Offset 0) zu Ende und sobald der nächste Balken startet (und der Balken wo "Hammer 1" steht jetzt Offset 2 hat) bemerkst du zB das der Balken der gerade fertig wurde (also Offset 1) jetzt die Kriterien für einen Hammer erfüllt, dann willst du für diesen Balken ein Objekt mit dem Namen "Hammer 1" erzeugen. Das gibts aber schon und du wirst einen Fehler bekommen. Sprich wenn der Indi lang läuft, und "Hammer 1" und "Hammer 0" erzeugt sind, werden keine neuen Hammer mehr "erkannt" weils die Objekte ja schon gibt und somit nicht nochmal gezeichnet werden können.

 

Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind.

 

Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.

Geschrieben

Ich werde euch programmierer wohl mein Leben lang bewundern...

Ich les mir das hier ab und an mal durch, probiere das irgendwie zu verstehen, aber es geht nicht.

Soll aber kein Hilferuf sein, nur Anerkennung anderer Talente, ich laß das mit dem Programmieren mir würde nicht nur die Plattform einfrieren, mein Pc würde schmelzen... :wub:

Gruß Vola

Geschrieben
  • Autor
ja, sie erhalten als Zahl den aktuellen Offset des Balken. Wenn also jetzt beim vorletzen Balken (also 1 Balken zurück) ein Hammer entdeckt wird, dann erhält der das Objekt "Hammer 1". Jetzt geht der aktuelle Balken (Offset 0) zu Ende und sobald der nächste Balken startet (und der Balken wo "Hammer 1" steht jetzt Offset 2 hat) bemerkst du zB das der Balken der gerade fertig wurde (also Offset 1) jetzt die Kriterien für einen Hammer erfüllt, dann willst du für diesen Balken ein Objekt mit dem Namen "Hammer 1" erzeugen. Das gibts aber schon und du wirst einen Fehler bekommen. Sprich wenn der Indi lang läuft, und "Hammer 1" und "Hammer 0" erzeugt sind, werden keine neuen Hammer mehr "erkannt" weils die Objekte ja schon gibt und somit nicht nochmal gezeichnet werden können.

das klingt einleuchtend.

 

Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind.

Genau dieser Punkt ist mir gesterna aufgefallen, als mir mein Indi beim entstehenden Bar fließig locker 4-5 Symbole reingemalt hatte. Mal schauen was ich dazu für eine Logik finde....... ich denke das wird auch was mit if-else oder sowas....... if (Prüfung) else (Objekte löschen)... Mal schauen ob ih eine Funktion finde die nur auf Objekte dieses Bars zurückgreift...

 

Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.

Das wäre natürlich gut, den weiterverwenden zu können. Auch wenn meine "Skills" noch ewig von EAs entfernt sind (es sei denn dieses EA soll Kapital verbrennen) :wub:

Eine Linie für die Balken zu zeichnen kann ja nicht so schwer sein. Mal schauen wie ich das hinbekomme. Dazu muss ich mir wohl mal wieder andere Indis anschauen und bei denen "spicken" :sad: Ich glaube die lustigen Punkte beim Parabolic Indikator sind ja eigentlich nur (fette) Linien. Mal schauen ob ich dort eine Anregung finde :wub:

 

Ich werde euch programmierer wohl mein Leben lang bewundern...

Ich les mir das hier ab und an mal durch, probiere das irgendwie zu verstehen, aber es geht nicht.

Soll aber kein Hilferuf sein, nur Anerkennung anderer Talente, ich laß das mit dem Programmieren mir würde nicht nur die Plattform einfrieren, mein Pc würde schmelzen... :wub:

:wub:

Danke für die Blumen. Auch wenn ich mich da (noch) nicht angesprochen fühlen mag. Ich reiche die Blumen gerne an die Profis hier weiter... Wenn ich in ein paar Monaten weiter bin, zweige ich mir dann vielleicht ein Blümchen von dem Strauß ab :wub:

Geschrieben
  • Autor

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

//Konfiguration / Parameter
extern int CandlesToCheck=100;
extern color IndiColor = DeepPink;

//Variablen für Berechnungen
double HighLowSpanne;
double HighLowDrittel;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
//---- indicators
//----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
 {
 int i;
 for (i=0; i<  Bars; i++)
   {
   if(ObjectFind("Hammer "+DoubleToStr (i, 0)) >= 0 ) ObjectDelete("Hammer "+DoubleToStr (i, 0));
   }
   return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int  start ()

 {
  int    counted_bars=IndicatorCounted (), limit, i=0; 
  if (counted_bars> 0)
     counted_bars--; 

  limit=Bars-counted_bars;  

  if (limit>  CandlesToCheck)
     limit=CandlesToCheck;

  while (i<  limit)
   {

   double k = (High [i] - Low [i]) /3;
      if ((Open [i]> (Low [i]  +2*k))&& (Close [i]> (Low [i]  +2*k)))
         {
         ObjectCreate ("Hammer "+DoubleToStr (i, 0), OBJ_ARROW, 0, Time [i], Low [i]  +(-10)*Point);
         ObjectSet ("Hammer "+DoubleToStr (i, 0), OBJPROP_ARROWCODE, 159);
         ObjectSet ("Hammer "+DoubleToStr (i, 0), OBJPROP_COLOR, IndiColor);
         }
   i++;      
   }
  }

Ich hab ein paar kleine Modifikationen vorgenommen:

  • Farbwahl über das Indikator-Menü
  • Wenn man den Indikator aus dem Chart löscht, werden nun auch alle erstellten Objekte des Indikators gelöscht :)
  • die Markierungen erfolgen nun knapp unter dem Bar und nicht mehr mitten im / hinter dem Bar

 

Anstatt dem Punkt (oder sonst einem Symbol) hab ich leider keine Linien (bisher) hinbekommen. Der malt mir immer gleich durch den ganzen Chart, was super unübersichtlich aussieht und einem an dieser Stelle auch nichts mehr nützt. Mal schauen, ob ich das trotzdem noch irgendwie hinbekomme :wub:

 

An der Prüfung der Bars arbeite ich auch noch, Speziell soll der aktuelle bzw. letzte Bar geprüft werden, falls dort Objekte sind die evtl. wieder gelöscht werden sollen.

Ich denke meine Idee der Prüfung hab ich damit schon angedeutet :wub: aber die Umsetzung ist schwerer (für mich) als es scheint....

Geschrieben
Der malt mir immer gleich durch den ganzen Chart, was super unübersichtlich aussieht und einem an dieser Stelle auch nichts mehr nützt.

 

Für solche Fälle gibt es bei den Indis die Funktion SetIndexEmptyValue(..) bzw. als default für diesen Wert die EMPTY_VALUE (MetaEditor Hilfe weiß mehr: Empty values werden nicht gezeichnet ;), die hilft dir da sicher weiter.

Geschrieben
  • Autor
Was noch dazukommt: beim Balken der sich im entstehen befindet, musst du, falls du den betrachtest, auch eine Möglichkeit einbauen das Objekt wieder zu löschen wenn die Kriterien für einen Hammer nicht mehr erfüllt sind.

 

An der Prüfung der Bars arbeite ich auch noch, Speziell soll der aktuelle bzw. letzte Bar geprüft werden, falls dort Objekte sind die evtl. wieder gelöscht werden sollen.

Ich denke meine Idee der Prüfung hab ich damit schon angedeutet :wub: aber die Umsetzung ist schwerer (für mich) als es scheint....

Ich glaube da eine Lösung gefunden zu haben. Ich habe einfach die Bedigungen mit < und > aus der Hammerprüfung umgedreht. Wenn dann diese Bedingung erfüllt ist wird nach einem Hammer-Objekt beim vorletzten (also dem letzten abgeschlossenen Bar) gesucht und dieses gelöscht. Die paar Codezeilen dazu wären:

	double c = (High [i+1] - Low [i+1]) /3;
//Pruefung ob am vorletzten Bar Objekte vorhanden sind
   //Falsche Objekte werden gelöscht
   if ((Open [i+1]< (Low [i+1]  +2*c))&& (Close [i+1]< (Low [i+1]  +2*c)))
	  {
	  if(ObjectFind("Hammer "+DoubleToStr (i, 0)) >= 0 ) ObjectDelete("Hammer "+DoubleToStr (i, 0));
	  }

Zumindest gibt es schonmal keine Fehler beim kompilieren und das Terminal friert nicht ein :wub: Ob das so korrekt ist und auch wirklich nur die falschen Objekte gelöscht werden konnte ich jetzt in den letzten Bars nicht nachvollziehen.

 

Und um den Indikator von einem EA aus zu verwenden, bringen dir Objekte nit wirklich was. Da macht es mehr Sinn den Indikator eine Linie zeichnen zu lassen, die 1 ist wenn eine Hammer erkannt wurde und 0 sonst. Nur als kleiner Tipp falls du den Hammer später automatisiert weiterverarbeiten willst.

Das verstehe ich jetzt zwar noch nicht so 100% bzw. kann es nicht nachvollziehen, aber das ist auch erstmal nebensächlich, da ich noch lange nicht an einem EA arbeite und mir erstmal ein paar eigene Indies zusammen"bastel" um mein manuelles Trading zu supporten. Bis ich diese fertig habe, brauche ich sicher noch etwas.... Aber wer weiß. Vielleicht bin ich in 2-3 Monaten ja auch viel besser geworden und brauch Euch dann nur noch die fertigen Indis vorstellen und nicht nach jedem Schritt um Hilfe betteln weil ich zum x-ten Mal nicht weiterkomme :wub: :wub:

Bearbeitet von Luisa.A.

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.