Ich programmiere eine Web-App, um die Performance meiner Hedgefonds zu verfolgen. Ich möchte meinen Gesamt-ROI für alle Zeiten ermitteln.
Wenn ich ein Anfangsguthaben und mein aktuelles Guthaben hatte, ist es einfach, den ROI zu finden. Zum Beispiel ((aktuelles Guthaben / Anfangsguthaben) * 100), um den Prozentsatz zu erhalten.
Wo ich Schwierigkeiten habe, ist die Tatsache, dass es jede Woche Belastungen/Gutschriften auf dem Konto gibt.
Wie kann ich also einen lebenslangen ROI genau berechnen, wenn ich jede Woche Gelder hinzufüge/entferne?
Hier ist ein Beispiel für einen Wochenbericht.
9/9/2013-9/13/2013 :
beginning balance = 25000 :
Profit/Loss in % = 16.45 :
Gross Profit/Loss = 4,112.72 :
Debit/Credit = -2000 :
New Balance 27,114
Stellen Sie sich vor, die nächsten 9 Wochen sehen ähnlich aus mit schwankenden Gewinn-/Verlustprozentsätzen (wöchentliche Roi's).
Kann mir einer von euch Genies eine Formel geben, wie ich genau feststellen kann, wie gut der Hedgefonds-Manager bis heute gearbeitet hat, unabhängig davon, wie viele Wochen ich daran beteiligt war? Ich gehe von einer Art wöchentlicher Aufzinsung aus.
BEARBEITEN: Also habe ich eine Formel gefunden, die ich für nützlich halte, und Daten im Wert von 4 Wochen eingefügt
25000((1+i)^4) - 4000((1+i)^3) - 300((1+i)^2) - 1500((1+i)) = 32318.63
Wie könnte ich nach 'i' auflösen?
Kapitalrendite (%) = (Nettogewinn / Investition) × 100
^ Eine viel klarere Formel, auf der Sie Ihre Berechnungen aufbauen können. Jetzt müssen Sie nur noch Ihren Nettogewinn für jede Woche berechnen, alles zusammenzählen, dasselbe für Investitionen tun, und Sie haben Ihre Antwort.
Sie haben einen ungleichen Zahlungsstrom, der in variablen Zeitabständen auftritt. Und Sie kennen die Formel für den ROI. Was Sie zu bestimmen versuchen, ist, welcher Zinssatz für den gesamten Zeitraum den kumulierten Wert des Fonds am besten widerspiegelt, und Sie haben die Formel zur Berechnung jedes ...
Time Amount Effect
4 25000 25000((1+i)^4) #contribution due to first deposit
3 4000 4000((1+i)^3) #contribution due to second deposit
2 -300 -300((1+i)^2) #contribution due to third (withdrawal)
1 1500 1500((1+i)^1) #contribution due to fourth deposit
Sie brauchen eine iterative Lösung. Sie müssen mit einer Schätzung für Ihren Zinssatz i beginnen und dann über Ihren Einzahlungsvektor iterieren, um den Fonds mit dem geschätzten Zinssatz neu zu berechnen. Sie müssen Ihren geschätzten Zinssatz während der Iteration anpassen, und der Betrag, um den Sie Ihren geschätzten Zinssatz anpassen, wirkt sich darauf aus, wie schnell Sie zu einer Lösung kommen.
Der Betrag, um den Sie Ihre geschätzte Rate ändern, bestimmt, wie schnell Sie sich einer Lösung nähern (tatsächlich, ob Sie sich einer Lösung nähern). Der allgemeine Algorithmus unten wird Ihnen den Einstieg erleichtern. Sie müssen an der Anpassungsberechnung in der Schätzfunktion basteln. Die Komplikation besteht darin, dass die ROI-Berechnung nicht linear ist, sodass Sie etwas benötigen, das sich nicht linear und in einer ähnlichen Reihenfolge wie der Berechnungswert anpasst. Meine Beispielschätzfunktion ist linear, also müssen Sie die Funktion verfeinern.
Versuchen Sie eine iterative Lösung. Wählen Sie einen Wert für i und iterieren Sie
intialize_fund
{
value = 32318.63
//initialize your deposit/withdrawal vector/array
deposits[]
deposits[0] = +25000
deposits[1] = +4000
deposits[2] = -300
deposits[3] = +1500
duration = 5 //number of periods
}
calcval( deposits[], rate, duration )
{
accum = 0.0
for period=0; period<duration; ++period)
{
accum = accum * (1+rate)
if( exists deposits[period] ) accum += deposits[period]
}
return accum
}
#you will need to tinker with this until you get a function that
#converges
#converges quickly
guessrate( actual, calculated, rate )
{
adjustby = abs(actual - calculated) / actual
if(calculated > actual) rate = rate * (1.0 - adjustby)
else rate = rate * (1.0 + adjustby)
return rate
}
guessRoi
{
guess = 0.01 #initial guess
tryVal = calcval( guess, changes, duration )
while( abs(actual - tryVal) > .01 )
{
rate = guessrate( actual, tryVal, rate )
tryVal = calcval( deposits, rate, duration )
}
#guess has calculated rate, i
#tryRoi should have converged to actual accumulation
}
Was zum Teufel ist ein Einzahlungsvektor?
Aber ja, Sie müssen mit 2 (ZWEI) Schätzungen für i beginnen - eine, von der Sie wissen, dass sie zu hoch ist, und eine, von der Sie wissen, dass sie zu niedrig ist. Probieren Sie dann mit dem Mittelpunkt aus, ob er zu hoch oder zu niedrig ist. Wenn zu hoch, ist Ihr neuer Bereich die untere Hälfte - andernfalls die obere Hälfte. Wiederholen Sie dies nun mit diesem neuen kleineren Bereich immer wieder.
Die Funktion ist nichtlinear, aber glatt und brav, sodass Sie sich keine Gedanken über die Konvergenz machen müssen. Halbieren Sie einfach das Intervall bei jeder Iteration, bis Sie so nah dran sind, wie Sie es möchten.
JTP - Entschuldige dich bei Monica
Benutzer1888959
JTP - Entschuldige dich bei Monica
Chris Degen
Benutzer1888959
Chris Degen
25000/(1 + x)^0 - 4000/(1 + x)^0.25 - 300/(1 + x)^0.5 - 1500/(1 + x)^0.75 = 32318.63/(1 + x)^1
ich 60,34 % erhalte. Für wöchentlich ist das (1 + 0,6034)^(1/4) - 1 = 12,53 %, was dem Lösen von entspricht25000/(1 + x)^0 - 4000/(1 + x)^1 - 300/(1 + x)^2 - 1500/(1 + x)^3 = 32318.63/(1 + x)^4
. Hoffentlich hilft das.Benutzer1888959
Benutzer1888959