19.02.17
|
Mitglied
|
|
Registriert seit: Nov 2015
Beiträge: 136
|
|
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);
}
|