Function VALORACIÓN TITULO
Publicado por ELD (1 intervención) el 02/05/2019 00:26:29
BUENAS TARDES
NECESITO CON URGENCIA UNA AYUDA!!!!!!!!!!!!!!
ESTOY PROGRAMANDO UNA FUNCIÓN QUE ME VALORE TITULOS DE DEUDA MES VENCIDO, YA QUE LAS FUNCIONES DE EXCEL NO SIRVEN PARA TITULOS MES VENCIDO.
CUANDO CREO LA RUTINA NO TENGO NINGUN PROBLEMA LA RUTINA TIENE EL RESULTA ESPERADO
PERO AL CREAR UNA Function NO LA ESTA CALCULADO ME MUESTRA EL ERROR #¿NOMBRE?
ESTA ES LA RUTINA QUE ESTA CORRECTA
PERO AL CREAR LA FUNCIÓN NO MUESTRA RESULTADOS
NECESITO CON URGENCIA UNA AYUDA!!!!!!!!!!!!!!
ESTOY PROGRAMANDO UNA FUNCIÓN QUE ME VALORE TITULOS DE DEUDA MES VENCIDO, YA QUE LAS FUNCIONES DE EXCEL NO SIRVEN PARA TITULOS MES VENCIDO.
CUANDO CREO LA RUTINA NO TENGO NINGUN PROBLEMA LA RUTINA TIENE EL RESULTA ESPERADO
PERO AL CREAR UNA Function NO LA ESTA CALCULADO ME MUESTRA EL ERROR #¿NOMBRE?
ESTA ES LA RUTINA QUE ESTA CORRECTA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Sub PRECIO_ELD_RUTINA()
Dim PRECIO_ELD, Tasa, Rtdo, Amortización, Base, Residuo As Variant
Dim Fecha_Liquidación As Date
Dim Fecha_Vencimiento As Date
Dim Cupon_Fecha_Anterior_MES As Date
Dim n, j As Integer
Tasa = 5.11046319289302
Base = 360
Fecha_Liquidación = "29/04/2019"
Fecha_Vencimiento = "29/11/2020"
Rtdo = 5.355
Amortización = 100
'Calcula Fecha del Cupón anterior
Cupon_Fecha_Anterior_MES = DateSerial(Year(Application.EoMonth(Fecha_Liquidación, -1)), Month(Application.EoMonth(Fecha_Liquidación, -1)), Day(Fecha_Vencimiento))
'Cuenta el numero de periodos del titulo para la matriz dinamica que contiene los flujos con todos los calculos
n = DateDiff("M", Cupon_Fecha_Anterior_MES, Fecha_Vencimiento)
'Define la matriz dinamica donde se realizaran todos los calculos para llegar al precio sucio
ReDim Matriz_Flujos(n, 6) As Variant
'Diligencia encabezados dentro de la matriz Dinamica
Matriz_Flujos(0, 0) = Fecha_Flujos
Matriz_Flujos(0, 1) = Biciestos_VF
Matriz_Flujos(0, 2) = Días_Entre_Flujos
Matriz_Flujos(0, 3) = Cupón
Matriz_Flujos(0, 4) = Biciestos_VPN
Matriz_Flujos(0, 5) = Días_VPN
Matriz_Flujos(0, 6) = VPN
'Realiza los calculos dentro de la matriz dinamica
Matriz_Flujos(0, 0) = Cupon_Fecha_Anterior_MES
j = 0
For j = 0 To n - 1
'Columna Fechas
Matriz_Flujos(j + 1, 0) = DateSerial(Year(Application.EoMonth(Matriz_Flujos(j, 0), 1)), Month(Application.EoMonth(Matriz_Flujos(j, 0), 1)), Day(Fecha_Vencimiento))
'Culumna Biciestos en VF
Residuo = Year(Matriz_Flujos(j + 1, 0)) Mod 4
If Residuo = 0 And Month(Matriz_Flujos(j + 1, 0)) = 2 Then Matriz_Flujos(j + 1, 1) = 1 Else Matriz_Flujos(j + 1, 1) = 0
'Culumna Días_Entre_Flujos
If Base = 360 Then Matriz_Flujos(j + 1, 2) = 30 Else Matriz_Flujos(j + 1, 2) = Matriz_Flujos(j + 1, 0) - Matriz_Flujos(j, 0) - Matriz_Flujos(j + 1, 1)
'Culumna Cupón calcula la tasa periodica asumiendo que la tasa es nominal
If Matriz_Flujos(j + 1, 0) <> Fecha_Vencimiento Then Matriz_Flujos(j + 1, 3) = Tasa / (Base / Matriz_Flujos(j + 1, 2)) Else Matriz_Flujos(j + 1, 3) = (Tasa / (Base / Matriz_Flujos(j + 1, 2))) + Amortización
'Culumna Biciestos_VPN
Matriz_Flujos(1, 4) = Matriz_Flujos(1, 1)
If Matriz_Flujos(j + 1, 1) = 0 Then Matriz_Flujos(j + 1, 4) = Matriz_Flujos(j, 4) Else Matriz_Flujos(j + 1, 4) = Matriz_Flujos(j + 1, 1) + Matriz_Flujos(j, 4)
'Culumna Días_VPN
Matriz_Flujos(j + 1, 5) = Matriz_Flujos(j + 1, 0) - Fecha_Liquidación - Matriz_Flujos(j + 1, 4)
'Culumna VPN
If Matriz_Flujos(j + 1, 5) <> 0 Then Matriz_Flujos(j + 1, 6) = (Matriz_Flujos(j + 1, 3)) / (1 + (Rtdo / 100)) ^ (Matriz_Flujos(j + 1, 5) / Base) Else Matriz_Flujos(j + 1, 6) = 0
Precio_Calculado = Matriz_Flujos(j + 1, 6) + Precio_Calculado
Next j
'Resultado
PRECIO_ELD = Precio_Calculado
MsgBox (PRECIO_ELD)
End Sub
PERO AL CREAR LA FUNCIÓN NO MUESTRA RESULTADOS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Function PRECIO_ELD(Fecha_Liquidación As Date, Fecha_Vencimiento As Date, Tasa As Variant, Rtdo As Variant, Amortización As Variant, Base As Variant) As Variant
'Esta Funcion valora un titulo con periodo mes vencido
Dim Cupon_Fecha_Anterior_MES As Date
Dim Residuo, Precio_Calculado As Variant
Dim n, j As Integer
'Calcula Fecha del Cupón anterior
Cupon_Fecha_Anterior_MES = DateSerial(Year(Application.EoMonth(Fecha_Liquidación, -1)), Month(Application.EoMonth(Fecha_Liquidación, -1)), Day(Fecha_Vencimiento))
'Cuenta el numero de periodos del titulo para la matriz dinamica que contiene los flujos con todos los calculos
n = DateDiff("M", Cupon_Fecha_Anterior_MES, Fecha_Vencimiento)
'Define la matriz dinamica donde se realizaran todos los calculos para llegar al precio sucio
ReDim Matriz_Flujos(n, 6) As Variant
'Diligencia encabezados dentro de la matriz Dinamica
Matriz_Flujos(0, 0) = Fecha_Flujos
Matriz_Flujos(0, 1) = Biciestos_VF
Matriz_Flujos(0, 2) = Días_Entre_Flujos
Matriz_Flujos(0, 3) = Cupón
Matriz_Flujos(0, 4) = Biciestos_VPN
Matriz_Flujos(0, 5) = Días_VPN
Matriz_Flujos(0, 6) = VPN
'Realiza los calculos dentro de la matriz dinamica
Matriz_Flujos(0, 0) = Cupon_Fecha_Anterior_MES
j = 0
For j = 0 To n - 1
'Columna Fechas
Matriz_Flujos(j + 1, 0) = DateSerial(Year(Application.EoMonth(Matriz_Flujos(j, 0), 1)), Month(Application.EoMonth(Matriz_Flujos(j, 0), 1)), Day(Fecha_Vencimiento))
'Culumna Biciestos en VF
Residuo = Year(Matriz_Flujos(j + 1, 0)) Mod 4
If Residuo = 0 And Month(Matriz_Flujos(j + 1, 0)) = 2 Then Matriz_Flujos(j + 1, 1) = 1 Else Matriz_Flujos(j + 1, 1) = 0
'Culumna Días_Entre_Flujos
If Base = 360 Then Matriz_Flujos(j + 1, 2) = 30 Else Matriz_Flujos(j + 1, 2) = Matriz_Flujos(j + 1, 0) - Matriz_Flujos(j, 0) - Matriz_Flujos(j + 1, 1)
'Culumna Cupón calcula la tasa periodica asumiendo que la tasa es nominal
If Matriz_Flujos(j + 1, 0) <> Fecha_Vencimiento Then Matriz_Flujos(j + 1, 3) = Tasa / (Base / Matriz_Flujos(j + 1, 2)) Else Matriz_Flujos(j + 1, 3) = (Tasa / (Base / Matriz_Flujos(j + 1, 2))) + Amortización
'Culumna Biciestos_VPN
Matriz_Flujos(1, 4) = Matriz_Flujos(1, 1)
If Matriz_Flujos(j + 1, 1) = 0 Then Matriz_Flujos(j + 1, 4) = Matriz_Flujos(j, 4) Else Matriz_Flujos(j + 1, 4) = Matriz_Flujos(j + 1, 1) + Matriz_Flujos(j, 4)
'Culumna Días_VPN
Matriz_Flujos(j + 1, 5) = Matriz_Flujos(j + 1, 0) - Fecha_Liquidación - Matriz_Flujos(j + 1, 4)
'Culumna VPN
If Matriz_Flujos(j + 1, 5) <> 0 Then Matriz_Flujos(j + 1, 6) = (Matriz_Flujos(j + 1, 3)) / (1 + (Rtdo / 100)) ^ (Matriz_Flujos(j + 1, 5) / Base) Else Matriz_Flujos(j + 1, 6) = 0
Precio_Calculado = Matriz_Flujos(j + 1, 6) + Precio_Calculado
Next j
'Resultado
PRECIO_ELD = Precio_Calculado
End Function
Valora esta pregunta


0