
23.10.23
|
Neues Mitglied
|
|
Registriert seit: Jan 2017
Beiträge: 3
|
|
ich konnte es inzwischen selbst lösen:
Hier meine Lösung. Vielleicht hilfts dem einen oder anderen.
Code:
//---
double TrendLinienWertAnKerzeX(string objectName, int timeFrame, int kerze_X){ // timeFrame = Zeitrahmen
double res = 0;
double double_Preis_Schritt = 0;
datetime date_Akt_Kerze = iTime(NULL, timeFrame, 0);
datetime date_Kerze_X = iTime(NULL, timeFrame, kerze_X);
if (timeFrame == 0) timeFrame = Period();
datetime date_Trendlinie_Time_Left = (datetime)(ObjectGet(objectName, OBJPROP_TIME1)); // Datum linker Punkt
double double_Trendlinie_Price_Left = ObjectGet(objectName, OBJPROP_PRICE1); // Preis linker Punkt
datetime date_Trendlinie_Time_Right = (datetime)(ObjectGet(objectName, OBJPROP_TIME2)); // Datum rechter Punkt
double double_Trendlinie_Price_Right = ObjectGet(objectName, OBJPROP_PRICE2); // Preis linker Punkt
//--- i_Shift_Trendlinien_Punkte
int i_Shift_Trendlinie_Time_Left = 0;
i_Shift_Trendlinie_Time_Left = iBarShift(NULL, timeFrame, date_Trendlinie_Time_Left); // Kerzennummer des linken Punktes (kann nur >= 0 sein)
int i_Shift_Trendlinie_Time_Right = 0;
i_Shift_Trendlinie_Time_Right = iBarShift(NULL, timeFrame, date_Trendlinie_Time_Right);
//--- double_Preis_Schritt
if(i_Shift_Trendlinie_Time_Left > i_Shift_Trendlinie_Time_Right // 1 Punkt ist links vom 2 Punkt
&& date_Trendlinie_Time_Right <= date_Akt_Kerze // Rechter Punkt liegt in der Vergangenheit oder Gegenwart
){
double_Preis_Schritt = (double_Trendlinie_Price_Right - double_Trendlinie_Price_Left) / (i_Shift_Trendlinie_Time_Left - i_Shift_Trendlinie_Time_Right); // double_Preis_Schritt ist positiv
res = double_Trendlinie_Price_Right - double_Preis_Schritt * kerze_X;
}
else if(date_Trendlinie_Time_Right > date_Akt_Kerze // Rechter Punkt liegt in der Zukunft
){
i_Shift_Trendlinie_Time_Right = int((date_Trendlinie_Time_Right - date_Akt_Kerze) / (timeFrame * 60)); // 1. Shift-Wert der Punktes ermitteln
double_Preis_Schritt = (double_Trendlinie_Price_Right - double_Trendlinie_Price_Left) / (i_Shift_Trendlinie_Time_Left + i_Shift_Trendlinie_Time_Right); // double_Preis_Schritt ist positiv
double aktueller_Preis = double_Trendlinie_Price_Right - double_Preis_Schritt * i_Shift_Trendlinie_Time_Right; // 3. Preis Zurückrechnen zur aktuellen Kerze
res = aktueller_Preis - double_Preis_Schritt * kerze_X; // 4. Preis Hochrechnen zur Kerze X
}
else{
double_Preis_Schritt = 0;
res = double_Trendlinie_Price_Right - double_Preis_Schritt * kerze_X;
}
return(res);
}
|