Ich habe ein Problem mit dem Zeichnen von vertikalen Linien.
Aufgabe: zu einer bestimmten Zeit vertikale Linien in den Chart zeichnen.
Die Zeit für die vertikale Line wird berechnet, das alles über einen bestimmten Zeitraum im Chart.
Problem: alle Linien werden auf die letzte Bar gezeichnet.
Code:
/* string LaterTimeHHandMM(int HHhour=0, int MMminute=0, int HHadd=0, int MMadd=0)
errechnet den späteren HH:MM Wert
Hier die OnCalculate Zusammenfassung
*/
for(int i=limit; i>=0; i--)
{
DayOfiWkDay=TimeDayOfWeek(Time[i]); //CurrentWeekdayofIndexnummber
if(DayOfiWkDay>=WEEKSTART && DayOfiWkDay<=WEEKSTOP) //default:Mo-Fr
{
string SepHM=":";
int SepHMpos=StringFind(HSTART,SepHM,0); //PositionOfHour:MinuteSeparator,=2
int HHofStart=(int)StringToInteger( StringSubstr(HSTART,0,SepHMpos) ); //0 tillSep(WithoutSep)
int MMofStart=(int)StringToInteger( StringSubstr(HSTART,SepHMpos+1,0) ); //1 afterSep
string TmpLater= LaterTimeHHandMM(HHofStart, MMofStart,1,30); //1:30
//Print(HSTART," SepHMpos=",(int)SepHMpos,
// " HHofStart=",(int)HHofStart,
// " MMofStart=",(int)MMofStart,
// " from ",HSTART," 1:30 TmpLater=",TmpLater,
// " Time[i]=",TimeToStr(Time[i]),
// " DayOfiTDate+TmpLater=",DayOfiTDate+" "+TmpLater );
if(Time[i]==StringToTime(DayOfiTDate+" "+TmpLater) )
PaintVertLine("TrendStart"+TimeToStr(Time[i]),
Time[i]);
}//Mo-Fr
}//int i=limit; i>=0; i--
// ======================= Funktion zum Malen der Vertikalen
bool PaintVertLine(string name="VertBaseName", datetime VertTime=0)
{
name=PFX+name;
ResetLastError();
if(ObjectFind(name)!=0)
if(!ObjectCreate(0,name,OBJ_VLINE,0,VertTime,0))
{ Print(__FUNCTION__," failed ",name," Code=",_LastError); return(false); }
//ObjectSetInteger(0,name,OBJPROP_TIME,VertTime);
ObjectSetInteger(0,name,OBJPROP_COLOR,COLOROPCL9);
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
ObjectSetString(0,name,OBJPROP_TEXT,"Trend Trade Start");
ObjectSetInteger(0,name,OBJPROP_BACK,true);
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); //make deleting possible
ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
return(true);
}
// =======================
Die Printzeile liefert korrekte Werte (hier im m15 chart)
Code:
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:15 DayOfiTDate+TmpLater=2021.12.09 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:30 DayOfiTDate+TmpLater=2021.12.09 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.09 09:45 DayOfiTDate+TmpLater=2021.12.09 9:45
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:15 DayOfiTDate+TmpLater=2021.12.10 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:30 DayOfiTDate+TmpLater=2021.12.10 9:45
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 09:45 DayOfiTDate+TmpLater=2021.12.10 9:45
...
08:00 SepHMpos=2 HHofStart=8 MMofStart=0 from 08:00 1:30 TmpLater=9:30 Time[i]=2021.12.10 20:45 DayOfiTDate+TmpLater=2021.12.10 9:45
Ich kann beim besten Willen nicht rausfinden, warum alle Linien (die Namen sind korrekt) übereinander auf die letzte Bar im Chart gesetzt werden, selbst wenn ich das Objekt erst ohne Zeit erstelle und dann die OBJPROP_TIME setze.
Hat jemand eine Idee?
Danke. AVT