Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matlab financiero
Autores:
Analista de Infraestructura
y Comunicaciones: Alejandro Bolivar
Analista de Sistemas de
Información: Mesias Anacona Obando
UNI-FO-13 V 1.0
Consecutivo: INF-INV-MATFR-INF-2010/II
matlab Financiero
Director Unidad Informática: Henry Martínez Sarmiento
Auxiliares de Investigación:
UNI-FO-13 V 1.0
MATLAB FINANCIERO
TABLA DE CONTENIDO
1. RESUMEN .......................................................................................................................................5
2. ABSTRACT .....................................................................................................................................5
3. INTRODUCCIÓN........................................................................................................................6
3.1. VIABILIDAD............................................................................................................................6
4 CONCLUSIONES ...................................................................................................................... 28
5 BIBLIOGRAFIA ........................................................................................................................... 29
1. RESUMEN
Este informe es la continuación de la investigación emprendida por la Unidad de
Informática de La facultad de Ciencias Económicas, titulada Modelamiento y análisis
financiero en Matlab, en la cual se realizó una inmersión en los toolbox que posee este
software aplicativo, haciendo especial énfasis en el financiero, enfocando dichos temas al
curso libre de “Excel Financiero”, para su implementación en Matlab; arrojando como
conclusión que Matlab es un software que tiene un gran potencial para ser aplicado en el
mundo de las finanzas. Así, en este informe se realiza una inspección más exhaustiva de los
recursos que ofrece el toolbox financiero, para analizar y demostrar que matlab puede ser
usado en la enseñanza de tópicos de índole financiero, siendo mejor en algunos casos que
que la hoja de cálculo de Excel.
2. ABSTRACT
This report is the continuation of the research undertaken by the Unit of Computer
Science of The Economic Sciences Faculty, named “Modelamiento y analisis financiero en
Matlab”, in which a dip was realized in the toolbox that it possesses this applicative
software, doing special emphasis in the financier, focusing the above mentioned topics on
the free course of " Financial Excel ", for their implementation in Matlab; throwing as
conclusion that Matlab is a software that has a great potential to be applied in the world of
the finance. This way, in this report there is realized a more exhaustive inspection of the
resources that the financial toolbox offers, to analyze and to demonstrate that matlab
financier can be used in the education of topics of nature, being better in some cases that
that the spreadsheet of Excel.
3. INTRODUCCIÓN
Dentro de la enseñanza de temas concernientes a las finanzas en la Facultad de Ciencias
Económicas únicamente se emplean las herramientas que contiene la suite de office, sin
embargo estas no son las únicas que tiene la facultad a disposición de la comunidad
universitaria. Matlab es una herramienta que podría emplear la facultad, no obstante no se
tiene el conocimiento del potencial que esta nos ofrece con su toolbox financiero. En este
sentido esta investigación tiene como propósito realiza una inmersión dentro de este
toolbox y encontrar su aplicabilidad en el contexto académico de la facultad.
3.1. VIABILIDAD
El toolbox financiero ofrece un gran número de funciones, que son de gran utilidad a la
hora de realizar cálculos financieros, sin embargo para obtener los resultados en formato
de número decimal (comúnmente empleado) se recomienda efectuar la siguiente
configuración:
Se empiezan a realizar algunos ejercicios de MATLAB a nivel básico, al igual que se inicia
en la documentación base (Ver ESTADO DEL ARTE).
Una inversión de $16.000 tiene el siguiente flujo de caja no periódico. La inversión inicial y
sus fechas son incluidas.
Fechas=[‘01/12/2003’
’02/14/2004’
’03/03/2041’
’06/14/2004’
’12/01/2004’];
Devuelve:
Retorno =
0.4644 (ó 43.44)
DF = {'12-Jan-2007'
'14-Feb-2008'
'03-Mar-2008'
'14-Jun-2008'
'01-Dec-2008'};
R = xirr(CF, DF)
Devuelve
R=
0.1006
Valores Fechas
-10000 12/01/2007
2500 14/02/2008
2000 03/03/2008
3000 14/06/2008
4000 01/12/2008
Fórmula Descripción
(resultado)
"=TIR.NO.PER(A2:A6;B2:B6)" Tasa interna de
retorno
(0,100643784
ó 10,06%)
Debido a que MATLAB puede ser un tanto engorroso para ser utilizado por los
estudiantes de la facultad de ciencias económicas, planteamos que para solucionar
problemas sencillos es mucho más fácil EXCEL en su uso. Por ende se plantean ejercicios
fáciles de simulación, (facultad que no tiene EXCEL y si MATLAB) para ser utilizados…
Veamos el siguiente ejemplo:
clear
T = 100; phi=0.9;
y(1) = 0;
for t=2:T
a=rand;
if a<=0.25
alet(t) = 1;
elseif a<=0.5
alet(t) = 0.5;
elseif a<=0.75
alet(t) = -0.5;
else
alet(t) = -1;
end
y(t) = phi*y(t-1)+alet(t);
end
plot(y, ‘r’)
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
9
UNI-FO-02 V 1.0
MATLAB FINANCIERO
Este programa, de manera muy sencilla muestra gráficamente una variación económica de
una empresa.
Otro ejemplo analizado, empieza a implementar algunas funciones del toolbox financiero.
En este se observa el gráfico de un flujo de caja cuando se compra un bono, su tasa cupón
y las fechas de maduración. Mostrando al final el gráfico de flujo de caja.
Settle = '03-Aug-1999';
Maturity = ['15-Aug-2000';'15-Dec-2000'];
Period = [3;2];
Basis = [1;0];
cfplot(CFlowDates,CFlowAmounts)
ylabel('Bonds')
Para calcular este tipo de tasas Matlab no ofrece una formula ya predeterminada, entonces
para obtener los resultados se parametrizan las variables de la formula o simplemente,
realizamos la operación como si Matlab fuera una calculadora así:
P: cantidad
I: tasa de interés
n: periodos
>> ((P)+(P)*(n))
ans =
1200
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
11
UNI-FO-02 V 1.0
MATLAB FINANCIERO
>> (P)*(1+i)^n
>> ((1000)*((1+0.2)^2))
ans =
1440
DF = {'12-Jan-2007'
'14-Feb-2008'
'03-Mar-2008'
'14-Jun-2008'
Devuelve
R=
0.1006
Calcular la tasa nominal a la que equivale una tasa de interés efectiva anual de 9.38%
Cual es el interés efectivo de una tasa de interés del 18% anual si se capitaliza:
a. Anualmente
b. Semestralmente
c. Mensualmente
d. Diariamente (suponga año de 365 días)
b. >> effrr(0.18,2)
ans =
0.1881
c. >> effrr(0.18,12)
ans =
0.1956
d. >> effrr(0.18,365)
ans =
0.1972
3.2.4. Anualidades
Una persona deposita $100.000 en una cuenta que paga el 5% semestral. Si esta persona
quisiera retirar cantidades iguales al final de cada semestre durante 5 años ¿de que
tamaño seria cada retiro?
ans =
12950.46
Valor Futuro
Si en una cuenta de ahorros que paga el 15% anual se depositan $ 1000 anuales durante cinco
años, ¿Qué cantidad se acumularía al final del año 10, si el primer depósito se hizo al final del
año 1?.
>> fvfix(0.15,5,1000,0,0)%fvfix(interés,tiempo,dinero,pago_extra(opc),
%anticipado=1/vencido=0(opc))
ans =
6742.38
Al final del quinto año se acumula $6742.38, entonces como se quiere saber cuánto
tenemos al final del año 10 se multiplica la cantidad acumulada por los intereses de los
siguientes 5 años
ans =
13561.33
MATLAB maneja dos funciones, una con fechas periódicas (pvvar) y otra con fechas
manejadas por el usuario (pvfix). Veamos el siguiente ejemplo:
%Calcule el valor actual del siguiente flujo de caja considerando una tasa de %descuento
de 15%
% Años 0 1 2 3 4
En MATLAB tenemos:
Devuelve:
A= 1938.92
3.2.7. Bonos
Basis: Es la convención utilizada por MATLAB para contar el número de días que resta en
un bono para su maduración. Por ejemplo en la expresión actual/ actual el numerador
calcula el número de días real entre dos rechas y el denominador cuenta el número de
días en un año, es decir 366 o 365 dependiendo de si es bisiesto o no.
0 = actual/actual
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
15
UNI-FO-02 V 1.0
MATLAB FINANCIERO
1 = 30/360 (SIA)
2 = actual/360
3 = actual/365
4 = 30/360 (PSA)
5 = 30/360 (ISDA)
6 = 30/360 (European)
7 = actual/365 (Japanese)
8 = actual/actual (ISMA)
9 = actual/360 (ISMA)
10 = actual/365 (ISMA)
11 = 30/360E (ISMA)
12 = actual/365 (ISDA)
13 = BUS/252
Default: 0
0=cupón cero
1=anual
3=trimestral
4=cuatrimestral
6=bimestral
12=mensual
Veamos el siguiente ejemplo, para un bono del estado con tres diferentes rentabilidades:
Esto devuelve:
Price =
104.8106
99.9951
95.4384
AccruedInt =
0.4945
0.4945
0.4945
Devuelve:
Yield =
0.0610
0.0500
0.0396
Para obtener la estructura de pagos de un bono MATLAB utiliza la siguiente función cfdates
Donde:
>> datestr(CfFechas)
Ejemplo:
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
18
UNI-FO-02 V 1.0
MATLAB FINANCIERO
%Sean tres bonos con tres fechas de vencimiento diferentes y las siguientes caracteristicas:
%Settle: ’15.Mar.2000’
%Maturity:’30-sept-2001’,’31-oct-2002’,’30-nov-2002’
%Basis actual/actual
%EndMonthRule activa
>>CF=cfdates(’15-Mar-2000’, Maturity)
%CF =
>> datestr(CF(3,:))
%ans =
%31-May-2000
%30-Nov-2000
%31-May-2001
%30-Nov-2001
%31-May-2002
%30-Nov-2002
% Si por ejemplo se calcula la duración de un bono A de nominal 100 a cinco años con cupon
anual del 10% y cuya TIR es r=12% anual entonces
>>[Duracion. ModDuracion]=cfdur(CashFlow,0.12)
Retorna
Duracion=
4.1355 (años)
ModDuracion=
3.6924 (años)
%El precio de un bono normal coincide con el VAN, por tanto la función pvfix
P=92,79
3.2.8. Amortizaciones
r=annurate(Numperiods, Valorpresente,valorfuturo(opc),anticipado=1,vencido=0(por
defecto=0))
%se toma un prestamo de 8000 por 5 años y se hacen pagos mensuales de 225 al final de cada
mes
>>tasa_mensual=annurate(5*12,225,8000,0,0)
Devuelve
tasa_mensual= 0.02
Amortize, sirve para generar una tabla de amortización, devuelve el principal y los pagos
del prestamo, el saldo del valor original del monto prestado, los intereses pagados y el
abono a capital periódico, su sintaxis es:
%Calcule una tabla de amortización para un prestamo convencional de 30 años a una tasa fija
con pagos mensuales constantes. Asuma que la tasa fija es del 12% anual periodica y el valor
inicial del prestamo es de 2000000
>>tasa_mensual=0.12/12;
>>nper=30*12;
>>valorpresente= 2000000;
%Esto nos arroja un array de datos, para una mejor visualización, se %plantea el siguiente gráfico
para ver el actual saldo del préstamo, el %abono a capital y el pago de interes sobre el tiempo de
amortización. Se %nota que excede los 2700000 mucho mas que la cantidad prestada
plot(cumsum(Principal),’- -k’)
plot(cumsum(Interes),’r’)
xlabel(‘Pago’)
ylabel(‘Pesos’)
grid(‘on’)
%La línea azul sólida representa el saldo de la deuda, que declina mientras transcurren los 30
años (360 meses). La línea punteada roja indica el incremento acumulado de los pagos de
interés. Finalmente la línea cortada negra representa el abono a capital logrado después de los
30 años.
%prestamo.m
%Argumentos de entrada:
%Argumentos de salida:
interesm= interes*0.01/12;
a=1+interesm;
b=(a^(annios*12)-1)/interesm;
pagom=cantidad*a^(annios*12)/(a*b);
pagot=pagom*annios*12;
>>help prestamo
Con este comando veremos todo lo que colocamos en comentarios, para utilizarla
tenemos el siguiente ejemplo
>>[mensual,total]=préstamo(25000,7.5,4)%prestamo(dinero,tasa,años)
En MATLAB retorna
Mensual=
600,72
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
23
UNI-FO-02 V 1.0
MATLAB FINANCIERO
Total=
28834.47
3.3.1. Gradientes
En MATLAB para desarrollar un gradiente geométrico se debe crear un script que realice
esta tarea, se propone el siguiente programa pero el lector puede crear su aplicación.
%Gradiente lineal
%Argumentos de entrada:
%A=Anualidad
%L=incremento
%i=interés
%n=tiempo (meses)
%p=valor de un pago
%Argumentos de salida:
If ( i==0){
else
i=i/100;
r=-n;
vf=A*(((1+i)^r-1)/i)+(L/i)*(((1+i)^r - 1)/i)+r);
vfi= (A+L)/i;
vpago=A+(p-1)*L;
end
Devuelve
vp=33106009
vf= 9772937
vfi= 101000000
En MATLAB para desarrollar un gradiente lineal se debe crear un script que realice esta
tarea, se propone el siguiente programa pero el lector puede crear su aplicación.
%GRadiente geometrico
%Argumentos de entrada:
%A=Anualidad
%G=incremento
%i=interes
%n=tiempo (meses)
%p=valor de un pago
%Argumentos de salida:
if (i==0)
else if (G~=i);
r=-n;
vf= A*((1+G)^n-((1+i)^n))/(G-i));
else if (G==i)
vp= (A*n)/(1*n);
vf= A*n*((1+i)^(n-1));
end;
UNIVERSIDAD NACIONAL COLOMBIA
FACULTAD DE CIENCIAS ECONÓMICAS
UNIDAD DE INFORMÁTICA Y COMUNICACIONES
26
UNI-FO-02 V 1.0
MATLAB FINANCIERO
ggi= A/(i-G);
vpago=A*(1+G)^(n-1);
4 CONCLUSIONES
5 BIBLIOGRAFIA