3 votos

Soy programador y necesito una fórmula para calcular el ROI global

Estoy programando una aplicación web para seguir el rendimiento de mi fondo de inversión. Me gustaría encontrar mi ROI global para todo el tiempo.

Si tuviera un saldo inicial y mi saldo actual, entonces encontrar el ROI es fácil. Por ejemplo ((saldo actual / saldo inicial) * 100) para obtener el porcentaje.

Donde estoy teniendo dificultades es en el hecho de que cada semana hay débitos/abonos en la cuenta.

Entonces, ¿cómo puedo calcular con precisión el retorno de la inversión de por vida cuando cada semana estoy añadiendo/quitando fondos?

Este es un ejemplo de informe semanal.

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

Imagínese que las próximas 9 semanas son similares, con porcentajes de ganancias/pérdidas fluctuantes (roi's semanales)

¿Puede alguno de ustedes, genios, proporcionarme una fórmula para descubrir cómo determinar exactamente lo bien que lo ha estado haciendo el gestor de fondos de cobertura hasta el día de hoy, independientemente del número de semanas que haya participado? Supongo que algún tipo de composición semanal.

EDIT: Así que encontré una fórmula que creo que es útil y enchufado en 4 semanas el valor de los datos

    25000((1+i)^4) - 4000((1+i)^3) - 300((1+i)^2) - 1500((1+i)) = 32318.63

¿Cómo puedo resolver la "i"?

1voto

Josiah I. Puntos 237

Rendimiento de la inversión (%) = (Beneficio neto / Inversión) × 100

^ Una fórmula mucho más clara en la que basar tus cálculos. Ahora sólo tienes que calcular el beneficio neto de cada semana, sumarlo todo, hacer lo mismo con la inversión y ya tienes la respuesta.

0voto

Tiene un flujo desigual de pagos que se producen en intervalos de tiempo variables. Y conoce la fórmula del ROI. Lo que intentas determinar es qué tipo de interés para todo el periodo refleja mejor el valor acumulado del fondo, Y has deducido correctamente la fórmula para calcular cada...

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

Necesita una solución iterativa. Tienes que empezar con una estimación del tipo de interés, i, y luego iterar sobre tu vector de depósitos, recalculando el fondo con el tipo estimado. Tendrá que ajustar el tipo de interés adivinado a medida que itere, y la cantidad por la que ajuste el tipo adivinado afectará a la rapidez con la que converja en una solución.

La cantidad de cambios en la tasa adivinada determinará la rapidez con la que se converge en una solución (de hecho, si se converge en una solución). El algoritmo general que aparece a continuación le servirá para empezar. Es necesario que juegues con el cálculo del ajuste en la función guessrate. La complicación es que el cálculo de ROI es no lineal, por lo que necesitará algo que se ajuste de forma no lineal, y en un orden similar al valor de cálculo. Mi función guessrate de ejemplo es lineal, por lo que necesitas refinar la función.

Prueba una solución iterativa. Elija un valor para i, e itere

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
}

0voto

Stephen Denne Puntos 17031

¿Qué diablos es un vector de depósito?

Pero sí, tienes que empezar con 2 (DOS) conjeturas para i - una que sabes que es demasiado alta, y otra que sabes que es demasiado baja. Luego prueba con el punto medio para ver si es demasiado alto o demasiado bajo. Si es demasiado alto, su nuevo rango es la mitad inferior, si no, la mitad superior. Ahora repite, con este nuevo rango más pequeño, una y otra vez.

La función no es lineal, pero es suave y se comporta bien, por lo que no hay que preocuparse por la convergencia, sólo hay que seguir reduciendo el intervalo a la mitad en cada iteración hasta que se acerque lo máximo posible.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X