Zitat
Ersterwert rollt quasi nicht rückwerts mit.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 |
Dim i,j Dim Datumsfeld getdatum Datumsfeld for i= 1 to alleperioden for j= i to 1 step -1 if datumsfeld(j)<(datumsfeld(i)-365) then ergebnis(i)=(daten(i)/daten(j)-1)*100 exit for end if next next |
calc Tag: ValueWhen(DatePart(d),kapital<>#_keinwert#,1,V);
Zitat
Barssince liefert dann kein Ergebnis.
Quellcode |
|
1 2 3 4 5 6 7 |
calc kapital:Datenreihe(#kapitalkurve#); calc jahr:ValueWhen(DatePart(yyyy),kapital<>#_keinwert#,1,V); calc monat:ValueWhen(DatePart(m),kapital<>#_keinwert#,1,V); calc tag:ValueWhen(DatePart(d),kapital<>#_keinwert#,1,V); calc datum:DatePart(yyyy)*12*31+DatePart(m)*31+DatePart(d); calc suchdatum:(jahr-1)*12*31+monat*31+tag; ValueWhen(kapital,datum<=suchdatum,1,v) |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Dim i,suchschritt Dim Datumsfeld getdatum Datumsfeld lookback=365 ' wieviel Tage zurückschauen Startindex = ErsteDatenPeriode(Daten) Endindex = LetzteDatenPeriode(Daten) ergebnis(startindex)=0 for i=startindex to endindex suchschritt=1 linker_rand=startindex rechter_rand=i if (datumsfeld(linker_rand)> (datumsfeld(i)-lookback)) then ergebnis(i)=0 else do mitte=int((linker_rand+rechter_rand)/2) if (datumsfeld(mitte)> (datumsfeld(i)-lookback)) then ' der Wert liegt links der Mitte -> es wird die linke Hälfte zur Suche weiter benutzt rechter_rand=mitte else ' der Wert liegt rechts der mitte -> es wird die rechte Hälfte zur Suche weiter benutzt linker_rand=mitte end if suchschritt=suchschritt+1 loop until (rechter_rand-linker_rand)=1 or 2^(suchschritt-1)>i if (datumsfeld(linker_rand)<=datumsfeld(i)-lookback) and (datumsfeld(linker_rand+1)>=datumsfeld(i)-lookback) then ergebnis(i)=(daten(i)/daten(linker_rand)-1)*100 else ergebnis(i)=ergebnis(i-1) end if end if next |
Hallo Lenzelott,
Herr Knöpfel hat ja schon eine mögliche Lösung gepostet.
Mein Lösungsvorschlag auf Basis deines bisherigen Codes hätte ähnlich ausgesehen - ich schieb ihn nur der Vollständigkeit halber noch nach:
calc kapitalatenreihe(#kapitalkurve#);
calc jahr:ValueWhen(DatePart(yyyy),kapital<>#_keinwert#,1,V);
calc monat:ValueWhen(DatePart(m),kapital<>#_keinwert#,1,V);
calc tag:ValueWhen(DatePart(d),kapital<>#_keinwert#,1,V);
calc datumatePart(yyyy)*12*31+DatePart(m)*31+DatePart(d);
calc suchdatumjahr-1)*12*31+monat*31+tag;
calc diff: datum-suchdatum;
(Kapital / RefVar(Kapital, - diff)-1) * 100
Zitat
Aber leider nicht mehr auf Intraday Geschichten.