Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Trendlinien im EA (http://www.expert-advisor.com/forum/showthread.php?t=5492)

Adlerauge 19.02.17 17:45

Trendlinien im EA
 
Hallo allerseits,

hier wurde schon öfters von verschiedenen Leuten nach Code für Trendlinien gefragt, ab da kam nie was bei raus.

Wenn man eine im Chart befindliche Trendlinie in einem EA verwenden will, benötigt man den Wert dieser Trendlinie auf der aktuelle Kerze.

Ich habe diesbezüglich mal was geschrieben. Anregungen sind herzlich willkommen. Wenn jemand Lust hat, noch den Buffer zu definieren, über den der Wert ausgegeben werden kann, dann wäre es als Indikator zu gebrauchen...

Dieser Code findet und selektiert eine im Chart befindliche Trendlinie und berechnet diesen Wert: (es darf sich nur eine Trendlinie im Chart befinden, man kann diese aber auch bei laufendem Betrief zeichnen oder verändern)

Code:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

  {
    int bereits_verwendete_Kerze_TL;
    if (bereits_verwendete_Kerze_TL != iTime(NULL, 0, 0))
      {
      string Aktuelle_Trendlinie;
      int Anzahl_Trendlinien = ObjectsTotal(NULL, 0, OBJ_TREND);
      Alert ("Anzahl Trendlinien  ", Anzahl_Trendlinien);
      if (Anzahl_Trendlinien == 0) Alert("keine Trendlinie vorhanden");
      if (Anzahl_Trendlinien > 1)  Alert("mehr als 1 Trendlinie vorhanden");
      if (Anzahl_Trendlinien == 1)
        {
          int Anzahl_Objekte = ObjectsTotal();
          Alert ("Anzahl Objekte  ", Anzahl_Objekte);
          for (int i=0; i < Anzahl_Objekte; i++)
            {
            string Aktuelles_Objekt = ObjectName(i);
            if (ObjectType(Aktuelles_Objekt) != OBJ_TREND) continue;
              else
              {
                Aktuelle_Trendlinie = Aktuelles_Objekt;
                Alert ("Aktuelle Trendlinie: ",Aktuelle_Trendlinie);
              }
            }

            datetime Trendlinie_Time1      = ObjectGet(Aktuelle_Trendlinie, OBJPROP_TIME1);
            double  Trendlinie_Price1      = ObjectGet(Aktuelle_Trendlinie, OBJPROP_PRICE1);
            datetime Trendlinie_Time2      = ObjectGet(Aktuelle_Trendlinie, OBJPROP_TIME2);
            double  Trendlinie_Price2      = ObjectGet(Aktuelle_Trendlinie, OBJPROP_PRICE2);
 
            int      Shift_Trendlinie_Time1 = iBarShift(NULL, 0, Trendlinie_Time1);
            int      Shift_Trendlinie_Time2 = iBarShift(NULL, 0, Trendlinie_Time2);
            int      Shift_Abstand          = Shift_Trendlinie_Time1 - Shift_Trendlinie_Time2;
            double  Preis_Schritt          = (Trendlinie_Price2 - Trendlinie_Price1) / Shift_Abstand;
 
            double Aktueller_Preis_Trendlinie = NormalizeDouble (Trendlinie_Price2 + Preis_Schritt * Shift_Trendlinie_Time2, Digits);
 
            Comment
              (
              "Anzahl Objekte  ",Anzahl_Objekte,"\n"
              "Trendlinie Time1  ",Trendlinie_Time1,"\n"
              "Trendlinie Price1  ",DoubleToStr(Trendlinie_Price1,5),"\n"
              "Trendlinie Time2  ",Trendlinie_Time2,"\n"
              "Trendlinie Price2  ",DoubleToStr(Trendlinie_Price2,5),"\n"
              "Aktueller Preis Trendlinie  ",Aktueller_Preis_Trendlinie,"\n"
              );
        }
      bereits_verwendete_Kerze_TL = iTime(NULL, 0, 0);
      }
//--- return value of prev_calculated for next call
    return(rates_total);
  }


MA-EA 19.02.17 23:18

Zitat:

Zitat von Adlerauge (Beitrag 37789)
es darf sich nur eine Trendlinie im Chart befinden

Warum? :confused:

Adlerauge 19.02.17 23:56

...weil die dann berechnet wird. Wenn mehr als eine Trendlinie im Chart ist, berechnet er nichts.


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:32 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum