Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 14.04.23
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard Fehlende Preisdaten

Die Aufgabe:
Es soll der Eröffnungspreis um 8:00 DElocal geholt und zur Weiterberechnung verwendet werden.
Der Code:
Code:
   static double Open8, Close8, LastOpen8; // when found fixed value
   static string DayOfiTDate, DayOfiYDate, // DateOfToday/YesterdayForIndexNo
                 Start8, Stop8;
   static int    DayOfiWkDay, clos8shift;

   for(int i=limit; i>=0; i--)
   {
      DayOfiWkDay=TimeDayOfWeek(Time[i]); //CurrentWeekdayofIndexnummber
      //Print(" DayOfiWkDay=",DayOfiWkDay);
      
      if(DayOfiWkDay>=WEEKSTART && DayOfiWkDay<=WEEKSTOP)     //Mo-Fr
      {
         // =================================================================== Calculation
         DayOfiTDate=TimeToString(Time[i],TIME_DATE);        //yyyy.mm.dd Today
         DayOfiYDate=GetYesterdate(DayOfiTDate,DayOfiWkDay); //yyyy.mm.dd Yesday
         clos8shift=iBarShift(NULL,PERIOD_D1,StringToTime(DayOfiYDate));
         //Print(" DayOfiYDate=",DayOfiYDate," clos8shift=",(int)clos8shift);
         
         Start8=DayOfiTDate+" "+H8START; //yyyy.mm.dd 08:00
         Stop8 =DayOfiTDate+" "+H8STOP;  //yyyy.mm.dd 22:00
         // ======================== 8lines values
         if( Time[i]==StringToTime(Start8) )
         {  
            Open8=Open[i];
            LastOpen8=iOpen(NULL,PERIOD_D1,clos8shift); //YesterdayOpen
            Close8=iClose(NULL,PERIOD_D1,clos8shift);   //YesterdayClose
            // === DAS funktioniert nicht, weil es 8:00 nicht gibt
            //if(Open[i] !=LastOpen8) Open8=Open[i];
            //else                    Open8=0;
         }
         // ======================== Painting lines of Calculation start-stop
         if(   Time[i]>StringToTime(DayOfiTDate+" "+PAINTSTART)  
            && Time[i]<StringToTime(DayOfiTDate+" "+PAINTSTOP ) )
         {
            // ======================== 08:00
            if(SHOWH8LINES)
            {
               if(Time[i]>StringToTime(Start8) && Time[i]<StringToTime(Stop8))
               { 
                  LineOpen8[i]=Open8; 
                  LineClose8[i]=Close8; 
               }
            }//SHOWH8LINES
         }//paint start-stop
      }//Mo-Fr
   }//(int i=limit; i>=0; i--)
Das Problem:
Um 8:00 gibt es plötzlich keinen Preis, sondern (in diesem Fall) erst um 8:05 (bisher einmaliges Vorkommen).
Als Folge davon wird der Vortages Open genommen.
Das macht natürlich die gesamte Weiterberechnung falsch. Wenn ich einfach den erste Open des Tages nehme, bekomme ich Schwierigkeiten bei einem Broker, der z.B. durchgehende Preise hat.

Ich kriege eine Korrektur des Codes einfach nicht gebacken, irgendwie drehe ich mich gedanklich im Kreis; mittlerweile artet das zum Drehwurm aus und ich brauche bitte einen Denkanstoß.
Danke. AVT