2016-12-23 4 views
1

Ich möchte bestätigen, dass meine Darstellung der annualisierten Renditeformel (mit monatlichen Renditen) optimal ist.Annualisierte Rendite in Pandas

Die annualisierte Formel Ich verwende (wobei M eine monatliche Rückkehr ist und D die Gesamtzahl der monatlichen Erträge), wo die Anzahl der monatlichen Ergebnisse größer als 12 ist wie folgt:

formula

Alternativ kann das würde dies im Fall der monatlichen Rendite Zahl ändert weniger als 12:

formula

Hier ist meine Darstellung dieser Formel in Pandas:

ann_return = observations.apply(lambda y: y.apply(lambda x: x+1)) 
ann_return = (ann_return.prod() ** (np.min(12/len(ann_return.index.values)) if len(ann_return.index.values) > 12 else 12/len(ann_return.index.values)))-1 
+0

Welche Spalten haben Sie in den Datenrahmen haben? Können Sie ein Beispiel für einen Datenrahmen geben? – DyZ

+1

Ich weiß nicht, was dieses Caret-Symbol zwischen 1 und 12 bedeuten soll. – piRSquared

+0

@piRSquared: Das Caret/Wedge-Symbol zwischen 1 und 12/D wird angezeigt, um den Mindestwert anzugeben [link] (http://www.numericana.com/answer/symbol.htm#chevron) – northernthinking

Antwort

1

Neue Antwort

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D) - 1 

Alte Antwort

, was Sie haben, ist
enter image description here
oder
enter image description here

Ich weiß nicht, wo Sie die zweite Formel bekam . Das erste scheint in beiden Fällen in Ordnung zu sein: D > 12 oder D < 12.

würde ich verwenden:

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D) 

Wenn ich irgendwie falsch bin (was passiert öfter als Ich mag würde)

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D - (D < 12)) 
+0

Vielen Dank, dass Sie die fehlende Subtraktion am Ende der Formel um eins hervorgehoben haben. Müsste der Python-Code dies auch nicht anzeigen? – northernthinking

+0

Die erste Formel ist, was ich denke, ist richtig. Die zweite Formel respektiert, was Sie herausgefunden haben, und bietet Ihnen eine Möglichkeit, sie zu berechnen. Die "- 1" ist in den booleschen Wert "D <12" eingebettet. Wenn "D <12", wird dieser "Wahr" -Wert zu "1" ausgewertet. Wenn 'Falsch', wird es zu '0' ausgewertet. Dies erfasst die if-Anweisung für Sie. – piRSquared

+0

Verstanden, ich glaube, dass die Subtraktion durch einen bedingungslos ist.Was konditionell sein sollte, ist die Exponentenberechnung. 'exponent = 12/D wenn D> 12 else: Exponent = min (1,12/D)' Dies wurde von der folgenden Richtung inspiriert: [Mr Excel Link] (http://www.excelforum.com /showthread.php?t=1116377), in der ich den Wert von. Basierend auf Ihrer Antwort und weitere Überprüfung, ich glaube, die effizienteste und korrekte Zeile wäre: '(df.add (1). Prod() ** (12/len (df.index.values))) -1' – northernthinking

0

Ist es nicht gerade diese ?

(df.Rm + 1)**(df.D/12) 

Oder, wenn d gleich für alle Zeilen:

(df.Rm + 1)**(D/12) 
Verwandte Themen