formula para hallar tasa de interes

2,449 views
Skip to first unread message

elkin dario uribe torres

unread,
Jul 19, 2011, 4:45:26 PM7/19/11
to publice...@googlegroups.com
Muy buenas tardes

Alguien tiene una funcion para poder hallar la tasa de interes segun el metodo frances aplicada a un monto, conociendo cuatro variables como son:

- Monto a financiar
- Valor Cuota
- Plazo
- Monto Financiado

La formula que aplico para hallar el valor de la cuota cuando me dan la tasa de interes, el monto y el plazo es Payment() y me funciona perfecto, pero como desean migrar una aplicacion y esta generaba o calculaba las obligaciones pero tenia un campo en la tabla maestra para la tasa de interes y cada que la actualizaban borraba el valor anterior y no lo guarda en ningun otro sitio, me ha tocado hasta el momento efectuarlo en excel con la funcion TASA(), pero deseo hacerlo directamente por foxpro y no estar mandando a excel y luego importar.

Gracias



Elkin Uribe
Medellin - Colombia

Luis Maria Guayan

unread,
Jul 19, 2011, 4:54:01 PM7/19/11
to publice...@googlegroups.com
Esto te va a servir, lo hice alguna vez, pero no me preguntes de las formulas que algún contador amigo me las pasó ;-)

*-- Sistema Frances
*-- Datos a Cargar
Capital = 10000
CantidadCuotas = 36
TasaAnual = 22  && Porcentaje
TasaMensual = TasaAnual/12/100
*-- Listado
? "    Nro.Cuota        Cuota             Cuota Capitalizada             Interes"
? REPLICATE("-",80)
FOR NroCuota = 1 TO CantidadCuotas
  Cuota = Capital * (TasaMensual/(1-(1+TasaMensual)^-CantidadCuotas))
  CuotaCapitalizada = Cuota * (1-TasaMensual*(1-(1+TasaMensual)^-(CantidadCuotas-NroCuota+1))/TasaMensual )
  Interes = TasaMensual * Cuota * (1-(1+TasaMensual)^-(CantidadCuotas-NroCuota+1))/TasaMensual
  ? NroCuota, ROUND(Cuota,2), ROUND(CuotaCapitalizada,2), ROUND(Interes,2)
ENDFOR

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

elkin dario uribe torres

unread,
Jul 19, 2011, 5:12:00 PM7/19/11
to publice...@googlegroups.com
Muchas gracias Luis

Esta parte ya la tengo funcionando en mi aplicacion, pero lo que deseo es saber como lograria determinar la tasa que se le aplico a una obligacion cuando se conocen las otras variables, ya que para poder migrar los datos de la aplicacion anterior hay que saber con que tasa se financio dicha obligacion y esta no existe en las tablas de esa aplicacion.  Mira que de tanto voltiar en Google revisando documentos para poder aplicar una formula despejando los valores dados ya veo todo lo mismo.

Lo que logre hacer en excel es lo siguiente

 =(TASA(Periodo,cuota,-monto)*100)

En este caso los valores son:

Periodo = 6
Cuota = 453.044,99
monto = 2.549.728

Y aplicando la formula nos dice que la tasa que se aplico fue de 1.86%, sera que en Vfp se podria hacer una funcion o si ya existe cual seria?


Gracias


Elkin Uribe
Medellin - Colombia

Marco Plaza

unread,
Jul 19, 2011, 5:14:57 PM7/19/11
to Comunidad de Visual Foxpro en Español
Aqui la tienes:
*-------------------------------
Function tasa
*-------------------------------
Parameters d,m,N,F

*n = numero de pagos ( plazo )
*d = deuda ( monto financiado )
*m = monto del pago ( valor de la cuota )
*f = numero de pagos en un año ( ej 12 o 24 )
*i = cargo por intereses ( n*m )-d

i = (N*m) -d

? 'deuda ',d
? 'numero de pagos ',N
? 'monto del pago ',m
? 'pagos anuales ',F
? 'intereses totales:',i
? 'tasa ',((6*F*i)/( ( 3*d*(N+1) )+(i*(N-1) ) ))*100

On 19 jul, 16:45, elkin dario uribe torres <eduribe2...@gmail.com>
wrote:

elkin dario uribe torres

unread,
Jul 19, 2011, 5:35:49 PM7/19/11
to publice...@googlegroups.com
MUCHAS GRACIAS Marco y Luis M. esto era lo que estaba buscando, la diferencia que da con repecto al excel es de una centecima pero lo dejare así; Por fin tratare de migrar los datos.

Saludos



Elkin Uribe
Medellin - Colombia

Víctor Hugo Espínola Domínguez

unread,
Jul 20, 2011, 6:06:50 PM7/20/11
to publice...@googlegroups.com
Hola Elkin,

Prueba esta función:

FUNCTION Interes
LPARAMETERS tnPrestamo, tnCuota, tnCntCuotas
LOCAL ;
lnInteresMax, lnInteresMin, lnPrecision, lnInteresPeriodo, ;
lnPrestamoAux, lnDifPrestamo

lnInteresMax = +100
lnInteresMin = -101
lnPrecision  = 0.00001
DO WHILE .T.
lnInteresPeriodo = ( lnInteresMax + lnInteresMin ) / 2
lnPrestamoAux = PV( tnCuota, lnInteresPeriodo / 100, tnCntCuotas )
lnDifPrestamo = tnPrestamo - lnPrestamoAux

IF ABS( lnDifPrestamo ) <= lnPrecision
EXIT
ENDIF
IF lnDifPrestamo < 0
lnInteresMin = lnInteresPeriodo
ELSE
lnInteresMax = lnInteresPeriodo
ENDIF
ENDDO

RETURN lnInteresPeriodo

Saludos, Víctor.

javier enrique avila jimenez

unread,
Apr 9, 2012, 11:08:49 PM4/9/12
to publice...@googlegroups.com
El presente no es precisamente para dar una respuesta, mas bien, para agradecer al sr. Guayan, por su aporte, mejor...  IMPOSIBLE!!! , gracias

guill...@gmail.com

unread,
Apr 5, 2013, 3:11:37 AM4/5/13
to publice...@googlegroups.com
Hola a todos
 
Les queria comentar que utilice la rutina que publico Marco
 
Function tasa
*-------------------------------
Parameters d,m,N,F

*n = numero de pagos ( plazo )
*d = deuda ( monto financiado )
*m = monto del pago ( valor de la cuota )
*f = numero de pagos en un año ( ej 12 o 24 )
*i = cargo por intereses ( n*m )-d

i = (N*m) -d

? 'deuda ',d
? 'numero de pagos ',N
? 'monto del pago ',m
? 'pagos anuales ',F
? 'intereses totales:',i
? 'tasa ',((6*F*i)/( ( 3*d*(N+1) )+(i*(N-1) ) ))*100
Declare las variables como numericas, pero el programa no me corre es decir cuando le doy ejecutar se queda ahi mismo no hace nada, probe colocandole el ENDFUNC al final del programa pero quedo igual.
 
Me pueden ayudar con la rutina para que me despliegue los datos por favor?

Luis Salazar

unread,
May 1, 2013, 5:29:05 PM5/1/13
to publice...@googlegroups.com
Guillec ... debes llamar la funcion desde un programa ... por ejemplo
Hice la prueba pero me da un tasa de Interes MUY ALTA ..????
***
 

n = 24

d = 3000.00

m = 130.00

f = 175.00*24

tasa_i = tasa(d,m,n,f)   &&   Aqui llamas a la funcion para q te devuelva el Valor 

?tasa_i

Alvaro Ayala

unread,
Aug 2, 2014, 12:04:13 PM8/2/14
to publice...@googlegroups.com
Buen día y muchas gracias por sus comentarios. Mi pregunta va para Marcos Plaza:

Procedí a dar valores a tus parameters:

*n = numero de pagos ( plazo ) = 24  meses
*d = deuda ( monto financiado ) = 6.400.000
*m = monto del pago ( valor de la cuota ) = 409.000
*f = numero de pagos en un año ( ej 12 o 24 ) = 12 (dado que son cuotas mensuales)
*i = cargo por intereses ( n*m )-d = 24*409.000 - 6.400.000 = 3.416.000

i = (N*m) -d = 3.416.000


? 'deuda ',d
? 'numero de pagos ',N
? 'monto del pago ',m
? 'pagos anuales ',F
? 'intereses totales:',i
? 'tasa ',((6*F*i)/( ( 3*d*(N+1) )+(i*(N-1) ) ))*100
((6*12*3.416.000)/((3*6.400.000*(24+1))+(3.416.000*(24-1))))*100 = 44,03%

Consulta: esta es la tasa  efectiva anual?. De r así  debo dividir entre 12 para obtener la tasa mensual = 44,03%/ 12 = 3,67%.

Aplicando la función  tasa de Excel = tasa( 24; -409.000; 4.900.000) = 3,75%

Me sale un error de-2,13.% (3.67/ 3.75-1)

Favor verificar si mi cálculo está correcto y si habría una forma de reducir el error.

Saludos desde Asunción.

Víctor Hugo Espínola Domínguez

unread,
Aug 2, 2014, 3:53:14 PM8/2/14
to publice...@googlegroups.com
Hola Alvaro

La función TASA de Excel, RATE en la versión en inglés, calcula la tasa de interés para el sistema francés, la fórmula que envió Marcos es para otro sistema, no sé cuál. Para calcular el interés del sistema francés no existe actualmente una fórmula, y el que la invente puede reclamar el premio Nobel de matemáticas, que por cierto tampoco existe ;-(.

Prueba el siguiente código:

Local lnCuota, lnPlazo, lnPrestamo, lnTasAnual, lnTasMensual

lnPrestamo =  6400000
lnCuota       =   409000
lnPlazo       =       24

lnTasMensual = InteresFrances(m.lnPrestamo, m.lnCuota, m.lnPlazo)
lnTasAnual     = m.lnTasMensual * 12

Messagebox(Transform(m.lnTasAnual) + " - " + Transform(m.lnTasAnual / 12))
*
*-------------------------------------------------------------------------------------------
*
Function InteresFrances
Lparameters tnPrestamo, tnCuota, tnCntCuotas

Local lcSetDecimal, lnDifPrestamo, lnInteresMax, lnInteresMin, lnInteresPeriodo, lnPrecision
Local lnPrestamoAux

lcSetDecimal = Set("Decimals")
Set Decimals To 18

lnInteresMax = + 100
lnInteresMin  = -101

lnPrecision    = 0.000001
Do While .T.
    lnInteresPeriodo = ( m.lnInteresMax + m.lnInteresMin ) / 2
    lnPrestamoAux     = Pv( m.tnCuota, m.lnInteresPeriodo / 100, m.tnCntCuotas )
    lnDifPrestamo     = m.tnPrestamo - m.lnPrestamoAux

    If Abs( m.lnDifPrestamo ) <= m.lnPrecision
        Exit
    Endif
    If m.lnDifPrestamo < 0
        lnInteresMin = m.lnInteresPeriodo
    Else
        lnInteresMax = m.lnInteresPeriodo
    Endif
Enddo

Set Decimals To (m.lcSetDecimal)

Return (m.lnInteresPeriodo)

Saludos,
Víctor.
Lambaré - Paraguay.

Marco Plaza

unread,
Aug 2, 2014, 11:11:30 PM8/2/14
to publice...@googlegroups.com

Hola Alvaro, la fórmula que publiqué en ese entonces la tenía anotada de un libro de matemáticas financieras - y confieso que se la envié con la seguridad de que aplicaba para pagos mediante metodo francés porque así la tenía marcada - pero da una diferencia pequeña, de modo que no es exacta. Como Elkin reportó en su momento que le sirvió .. pues no lo revisé. Ciertamente no he encontrado otra formula mas, así que es simple iterar para hallar el resultado, tal como también lo propone Victor.

Para enmendar el asunto les hago llegar otra función, con un ejemplo esta ves si.

Saludos.


*******************************************************************
* obtener tasa de interes anual para un financiamiento por metodo de pago francés
* a partir de la cuota, monto del préstamo y plazo
********************************************************************
clear

tasaAnual = 13.09
prestamo = 100000
numerodePagos = 36
pagosAnuales = 12

pago =  Payment(prestamo,tasaAnual/100/pagosAnuales,numerodePagos)
? 'La funcion debe devolver ',tasaAnual,' para cuotas de ',pago

tasaInt = tasa( prestamo , pago, numerodePagos, pagosAnuales )

if tasaInt = -1
    ? 'Datos suministrados no son válidos '
else
    ? ' La función devuelve ', tasaInt
endif

*-------------------------------
Function tasa( d,m,n,f )
*-------------------------------

*d = deuda ( monto financiado )
*m = monto del pago ( valor de la cuota )
*n = numero de pagos ( plazo )
*f = numero de pagos en un año ( ej 12 o 24 )
*------------------------------------
Local difAnter,i,tasa
difAnter = m.d
i = 0

#define maxTasaValida 80

Do While m.i < maxTasaValida

    cuotac = Payment(m.d,m.i/m.f/100,m.n)
    estadif = m.cuotac - m.m

    If m.estadif > 0
        tasa = m.i-Iif(m.difAnter < m.estadif,0.01,0)
        Return tasa
    Endif

    difAnter = m.estadif
    i = m.i+0.01

Enddo

return -1

Alvaro Ayala

unread,
Aug 4, 2014, 8:13:26 AM8/4/14
to publice...@googlegroups.com
Hola Víctor,

Gracias por tu aporte. La verdad que de programación no entiendo nada, solo lo básico  de macros. La forma más práctica que encuentro de hallar  la tasa es usando  solver  o la herramienta Análisis de Hipótesis. Me hubiera gustado hallar la misteriosa fórmula   para hacerlo de manera directa, pero veo que es muy difícil porque despejando i de la función  VA = R*(((1-(1+i)^-n)/i)) se obtiene VA/R= (1-(1+i)^-n)/i, y por tanto se intenta buscar una valor de "i" que iguale a la razón entre el valor actual  y el monto de la cuota.
6.400.000/ 409.000 = ((1-(1+i)^-24)/i)
15,64= ((1-(1+i)^-24)/i)
Si le doy valor  a i = 3,75%   se obtiene  la razón entre el valor actual y el monto de la cuota 15,64. La función tasa del Excel devuelve 3,75%.

Me pregunto: como hace la fórmula de Excel? no creo que tenga que recurrir a alguna macro o iteración para calcularlo.
Creo que la fórmula de Marcos Plaza tiene que ser ajustado por la capitalización.

Saludos

Alvaro Ayala

unread,
Aug 4, 2014, 10:04:33 AM8/4/14
to publice...@googlegroups.com
Buen día Marcos,

Muchas gracias por tu gentil ayuda.  Como yo no entiendo de programación me estuve centrando en el análisis meramente financiero.
Estuve pensando sobre el valor que arroja la fórmula que publicaste inicialmente, y pude llegar a la conclusión de que devuelve la tasa nominal anual.
Por tanto para llegar  a la tasa efectiva que devuelve la función tasa de Excel tenemos que proceder a dos ajustes:

1) Hallar la tasa efectiva anual  a través de la ecuación: ie = (1+in/12)^12-1)* 100. Donde ie es la tasa de interés efectiva anual e  in es la tasa de interés nominal que devuelve la fórmula.
2) Hallar la tasa efectiva mensual con la ecuación: iem = ((1+ie)^(1/12)- 1)* 100. Donde iem es la tasa efectiva mensual.
3) El valor obtenido en el punto 2 es el mismo que se halla dividiendo directamente  la tasa que arroja la ecuación de  la propuesta  de Marcos entre 12

Esto sería lo matemáticamente correcto. Pero sin embargo, aunque no le encuentro una explicación lógica  aún para llegar al valor que arroja Excel debemos hacer este ajuste:
ie Excel = ((1+iem/12)^12- 1)*100. Esto es como asumir otra capitalización mensual.
 
Con este ajuste se obtiene una precisión de  99,64%. esto quité  como promedio de varios experimentos aleatorios

Aplicando valores a tu fórmula se obtiene 44.03%  (con más decimales  44,0325976%. luego:
1) hallar la tasa efectiva anual ie = ((1+0,4403/12)^12-1)*100 = 54,10%.
2) hallar la tasa efectiva mensual  =(1+0,5410)^(1/12)-1 = 3,67%
3) se puede hallar directamente : 44,03%/ 12 = 3,67%. (3,67% periódica mensual).

Realizando el ajuste para aproximarse al valor que devuelve Excel:  ((1+0,0367/12)^12-1)*100 = 3,73%
Función tasa de Excel = 3,75%.
Favor pasarme el nombre del libro y autor  en donde se explica la fórmula en caso de que lo encuentres.

Un cordial saludo.

Víctor Hugo Espínola Domínguez

unread,
Aug 4, 2014, 1:02:19 PM8/4/14
to publice...@googlegroups.com
Hola Alvaro


>Me hubiera gustado hallar la misteriosa fórmula   para hacerlo de manera directa, pero veo que es muy difícil porque despejando i de la >función  VA = R*(((1-(1+i)^-n)/i)) se obtiene VA/R= (1-(1+i)^-n)/i

En esa fórmula es imposible despejar la variable i, ni aún recurriendo a la aplicación de logaritmos. Porque en realidad es una sola ecuación con dos variables x e y, donde x está representada por i e y por (i+1)

>Me pregunto: como hace la fórmula de Excel? no creo que tenga que recurrir a alguna macro o iteración para calcularlo.

Hombre de poca fe, deberías creer ;-)

>Creo que la fórmula de Marcos Plaza tiene que ser ajustado por la capitalización.

Esa fórmula no tiene nada que ver con el sistema francés, olvídala.

Dinos cuál es el problema que quieres resolver y quizás alguien del foro pueda ayudarte.

Saludos,
Víctor.
Lambaré - Paraguay.

Reply all
Reply to author
Forward
0 new messages