Die ermittelten Werte sind soweit richtig. Dein Fehler liegt im Folgenden:
Code:
int Pos1 =iHighest (NULL,PERIOD_H1,MODE_HIGH,24,1);
double Price1=iHigh (NULL,0,Pos1);
datetime Time1 =StringToTime ((string)TimeYear(Time[0])+"."+(string)TimeMonth(Time[0])+"."+(string)TimeDay(Time[Pos1]));
Du willst eine Trendlinie an den höchsten bzw. tiefsten Punkten im H1-Chart zeichnen, ermittelst die Zeitkoordinate aber nur bis zum Tag.
Dein Code muss von
Code:
... (string)TimeDay(Time[Pos1])
zu
Code:
... (string)TimeDay(Time[0])+" "+(string)TimeHour(Time[Pos1])
geändert werden. Für den Vortag nimmste dann z.B TimeDay(Time[24]). Für die anderen drei natürlich genau so.
Außerdem gehen deine Bedingungen
Code:
if(Price2<Price1)
...
if(Price4>Price3)
nur bei "aufwärts gerichtet" (High) und "abwärts gerichtet" (Low) auf. Auf umgekehrter Reihenfolge nicht. Hoffe das ist so gewollt.
Beim Vortag müsste folgender Code
Code:
(NULL,PERIOD_H1,MODE_LOW,48,25);
(NULL,PERIOD_H1,MODE_HIGH,48,25);
so heißen
Code:
(NULL,PERIOD_H1,MODE_LOW,24,25);
(NULL,PERIOD_H1,MODE_HIGH,24,25);
denn der vorletzte Parameter gibt die Anzahl zu überprüfender Kerzen an,
beginnend vom letzten Parameter.
Mit deiner Angabe überprüfst du die letzten
BEIDEN Vortage.
Noch ein kleiner Tipp.
Deine Zeilen zur Ermittlung der Zeitkoordinate sind unnötig. Du kannst auch einfach bei der Objekterstellung anstatt
Code:
ObjectCreate(0,"High_Trendline",OBJ_TREND,0,Time1,Price1,Time2,Price2)
folgendes schreiben
Code:
ObjectCreate(0,"High_Trendline",OBJ_TREND,0,Time[Pos1],Price1,Time[Pos2],Price2)
So sparst du dir 4 Variablen und 16 (bzw. mit der Korrektur 20) Funktionsaufrufe.