Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 19.02.17
Adlerauge Adlerauge ist offline
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard 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);
   }