Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
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.