Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 11.12.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard Zeit für Vertical Line wird nicht umgesetzt

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