viernes, 11 de octubre de 2019

Obtener la ficha Programador en el Excel de un Mac

Queremos instalar o habilitar la pestaña o ficha PROGRAMADOR en el Excel de nuestro Mac. Existen algunas diferencias entre el Excel de Windows y el Excel que utilizamos en Apple.

Para obtener la ficha Programador en el Excel de MacOS sigue estos pasos:

Paso 1

Excel / Preferencias






Paso 2


Barra de herramientas y cinta de opciones.




Paso 3


Marcar la casilla correspondiente a Programador que estará inicialmente desmarcada.



Paso 4

Comprobar que ahora ya dispondremos de la pestaña Programador.



Versión utilizada

Las imágenes anteriores corresponden a la versión 16.29.1 del Microsoft Office a fecha octubre 2019.


jueves, 2 de mayo de 2019

VAN a tipo variable

Puede descargar el archivo VanTir.xlsm

El Valor Actual Neto (VAN) habitualmente se calcula utilizando un tipo de interés fijo. En esta ocasión vamos a calcular el VAN utilizando una tasa de descuento variable. Lo haremos montando en Excel una tabla con los factores de descuento y usando la función SUMAPRODUCTO para calcular el valor actual. También afrontaremos la resolución utilizando una función programada por el usuario denominada VANvariable. Veamos los dos métodos.

Método 1 (resolución manual)

Como datos manejamos la columna C con los flujos de caja y la columna D con la tasa de descuento k. Se ha de cumplir que si los flujos de caja comienzan en t=0 con el desembolso inicial y terminan en t=n con el último flujo de caja, podamos disponer de n tasas de descuento, uno por cada periodo, salvo el instante t=0 donde no se requiere ninguna tasa de descuento. 


La columna D contiene la tasa de descuento k.



La función SUMAPRODUCTO multiplica por parejas los flujos de caja por el factor de descuento.

Método 2 (programando una función)

La función programada VANvariable no incluye el desembolso inicial que se ha de sumar fuera de la función. En nuestro ejemplo sumamos los -4.000 € que al ser negativo minoran el valor obtenido.


Veamos el código.

Function VANvariable(flujos As Range, tasas As Range) As Double
'tasas es el rango donde se encuentran las tasas de descuento
'Los flujos de caja son todos menos el desembolso inicial
Dim n As Long
Dim fDto As Double 'factor de capitalización
Dim VA As Double 'Valor Actual
'n = nº de celdas que contienen los flujos de caja, NO incluido el desembolso inicial
n = flujos.Rows.Count
VA = 0 'inicializamos el VA a cero
If n = tasas.Rows.Count Then
  fDto = 1 'inicialmente el factor de descuento es 1
  For i = 1 To n
    fDto = fDto / (1 + tasas(i)) 'el factor de descuento es acumulativo
    VA = VA + flujos(i) * fDto
  Next i
Else
  'mensaje que sale si el nº de filas de los rangos tasas y flujos no coincide
  VANvariable = "rangos no coinciden"
End If
VANvariable = VA
End Function

martes, 16 de abril de 2019

TIR modificada a tipo variable

Puede descargar el archivo VanTir.xlsm

Disponemos de una inversión a 20 años con flujos de caja unos positivos y otros negativos. En este caso si calculamos la TIR obtenemos un caso de TIR múltiple con tres puntos de corte en el eje de abcisas. Vea la hoja denominada 'TIR MULTIPLE'.



Podemos resolver la incoherencia que haber obtenido tres valores para la TIR utilizando la denominada TIR modificada o corregida. Consiste en descontar los flujos de caja negativos hasta el instante t=0 a cierta tasa de descuento y capitalizar los flujos de caja positivos hasta su valor final en t=n a cierta tasa de capitalización también conocida. De esta forma habremos conseguido tener únicamente dos capitales, uno inicial Co y otro final Cn. Para calcular la TIR modificada únicamente tendremos que aplicar la ley de la capitalización compuesta a esos capitales durane el número de peridos n y despejar el tipo de interés i necesario para que la ecuación se cumpla.

Esto lo podemos ver en la hoja denominada 'TIRM'.



Si deseamos calcular la TIR modificada o corregida a tipo variable tanto para la tasa de descuento como para la de capitalización seguiremos los siguientes pasos que se pueden ver en la hoja denominada 'TIRM variable'.


Pasos a seguir.
  1. En las columnas D y E separamos los flujos de caja positivos y negativos
  2. En las columnas F y G escribimos la tasa de descuento k1 y la tasa de capitalización k2 que son datos que debemos obtener.
  3. En las columnas H e I calculamos los factores 1/(1+k1) para el descuento de un periodo y (1+k2) para la capitalización de un periodo.
  4. En las columnas J y K calculamos el factor de descuento y el factor de capitalización para multiples periodos. Por ejemplo, para la cuantía que vence el sexto año, en t=6, que es de -200 € tendremos que descontarla multiplicando por el producto siguiente  =PRODUCTO($H$7:H13)
  5. Calculamos la TIRM variable en la celda K2 con la fórmula TASA siguiente   =TASA(20;;SUMAPRODUCTO(D7:D27;J7:J27);SUMAPRODUCTO(E7:E27;K7:K27))

Programación de una función

También disponemos de una función programada en código de Excel VBA que nos permite calcular la TIR modificada  usando tipos de interés variables.

Podemos verla trabajando en la celda K3.

=TIRMvariable(C7:C27;F8:F27;G8:G27)


Los argumentos son los siguientes.

=TIRMvariable(flujos de caja;rango de tasas de descuento;rango de tasas de capitalización)

Los flujos de caja son un rango que incluye el desembolso inicial. En nuestro ejemplo, es el rango C7:C27 que está compuesto por 21 celdas. La macros de la fórmula usa la variable n para calcular el número de esas celdas. En este ejemplo n será igual a 21.

n=21

Los rangos k1 y k2 son los que contienen las tasas de descuento y de capitalización respectivamente y en el ejemplo son los siguientes.


  • k1 → Rango F8:F27 → número de celdas = 20
  • k2 → Rango G8:G27 → número de celdas = 20

Observe que el número de tasas de capitalización o descuento son 20 cuando n hemos visto que es 21. Por tanto, siempre se ha de cumplir que el número de tasas de descuento o capitalización han de ser iguales a n-1.

Existe un caso de error, cuando al  indicar los argumentos de la función no se cumple que las filas del rango de k1 han de ser las mismas que las filas del rango k2 y ambas han de ser iguales al número de filas del rango que indica los flujos de caja menos uno. Cuando se produce el error la función responde con el texto "rangos no coinciden".

El código de la macro que contiene la función es la siguiente.

Function TIRMvariable(flujos As Range, k1 As Range, k2 As Range)
'k1 es el rango donde se encuentran las tasas de descuento
'k2 es el rango donde se encuentran las tasas de capitalización
Dim n As Long
Dim fDto As Double 'factor de capitalización
Dim fCap As Double 'factor de descuento
Dim VA As Double 'Valor Actual
Dim VF As Double 'Valor Final
'n = nº de celdas que contienen los flujos de caja incluido el desembolso inicial
n = flujos.Rows.Count
VA = flujos(1) 'inicializamos el VA con el desembolso inicial
VF = 0 'inicializamos el VF a cero
'pedimos que el rango de los flujos de caja tenga una celda más que
'los rangos de las tasas de descuento y capitalización
If n = k1.Rows.Count + 1 And n = k2.Rows.Count + 1 Then
    fDto = 1 'inicialmente el factor de descuento es 1
    For i = 2 To n 'comienza en 2 porque i=1 ya se recogió con el desembolso inicial
        fDto = fDto / (1 + k1(i - 1)) 'el factor de descuento es acumulativo
        'Si el flujo de caja es negativo se calcula el VA acumulando
        If flujos(i) < 0 Then VA = VA + flujos(i) * fDto
    Next i
    'Al finalizar del bucle anterior ya tenemos calculado el VA de los flujos negativos
    fCap = 1 'inicialmente el factor de capitalización es 1. Se comienza por el final
    For j = n To 1 Step -1 'Los calculos comienzan por el final
        fCap = fCap * (1 + k2(j)) 'el factor de capitalización es acumulativo
        'Si el flujo de caja es positivo se calcula el VF acumulando
        If flujos(j) > 0 Then VF = VF + flujos(j) * fCap
    Next j
    'Al finalizar del bucle anterior ya tenemos calculado el VF de los flujos positivos
    'Llamamos a la función TASA que en inglés es RATE
    TIRMvariable = WorksheetFunction.Rate(n - 1, 0, VA, VF)
    'Nper es n-1 ya que los flujos de caja comienzan en 0 con el desembolso inicial
Else
   'mensaje que sale si los rangos de k1 y k2 no son de longitud n-1
    TIRMvariable = "rangos no coinciden"
End If
End Function

También disponemos de una macro de prueba que lanza la instrucción Debug.Print.

Sub prueba()
Debug.Print TIRMvariable(Range("C7:C27"), Range("F8:F27"), Range("G8:G27"))
End Sub

Esto permite ejecutar la función que mostrará en la ventana Inmediato el resultado de la TIR.

lunes, 15 de abril de 2019

Valor Actual en Excel y en Python

Puede descargar el archivo ValorActual.xlsx

Veamos cómo calcular el valor actual de un capital y de una renta en varios casos.
  1. un capital
  2. una renta pospagable
  3. una renta pospagable con un valor final adicional
  4. una renta prepagable con un valor final adicional
Se calculará usando los recursos siguientes.
  1. La función VA de Excel
  2. La función VNA de Excel que calcula el VAN
  3. Programando en Python usando la librería NumPy
  4. Programando en Python una función def


El código en Python se encuentra en los siguientes enlaces.

lunes, 11 de febrero de 2019

La diversificación reduce el riesgo financiero

Puede descargar el archivo de Excel: reaseguro.xlsx

En finanzas representamos el riesgo por la varianza σ2 o su raíz cuadrada, la desviación estándar σ.

Supongamos dos carteras A y B que proporcionan una cierta rentabilidad en términos esperados del 10% cada una de ellas, y donde ambas tienen el mismo riesgo expresado por una desviación estándar de 0,4 o lo que es lo mismo expresado en porcentaje, del 40%. Vamos a simular mediante una distribución normal inversa las posibles rentabilidades. En principio vamos a generar 5.000 valores para cada cartera. Lo ideal sería generar muchos más si lo soportan la memoria RAM y la capacidad de cálculo de nuestro computador.


La celda B5 tiene la siguiente fórmula que usa la distribución normal inversa.

=INV.NORM(ALEATORIO();$H$7;$H$9)

Suponemos que las rentabilidades de las carteras A y B no están correlacionadas por pertenecer a activos y mercados muy diferentes. Observe que en la celda H11 se obtiene una correlación cercana a cero, ya que la función usada en Excel para generar las rentabilidades esta arrojando valores aleatorios que siguen una distribución normal, siendo la campana de Gauss de la cartera A y B independientes entre si.

Vamos a realizar un intercambio de carteras de forma que la cartera A pasará a convertirse en la cartera A', y la cartera B se convertirá en la cartera B'.

Tanto la cartera A' como B' se forman realizando una mezcla al 50% de las carteras anteriores A y B. De esta forma, la cartera A' estará formada por un 50% de sus propios activos A, más otro 50% de los activos de la cartera B. Sucediendo lo mismo en la formación de la cartera B' que también estará formada por 0,5A+0,5B.

Veamos que la esperanza matemática o media de rentabilidades esperadas μ se comporta de forma lineal ya que la media es una magnitud lineal, proporcional. De esta forma podemos expresar la esperanza de las nuevas carteras A' y B' con las siguientes ecuaciones.

El valor 1/2 hace referencia al 50%, que en tanto por uno es 0,5, ya que estamos suponiendo que las nuevas carteras A' y B' participan en un 50% de las viejas carteras A y B.

Otra forma de interpretarlo sería suponer carteras de dos compañías de seguros con la misma esperanza de rentabilidad (10%), la misma desviación estándar (40%) y totalmente incorrelacionadas. Estas compañías de seguros deciden efectuar un reaseguro mutuo intercambiando el 50% de sus carteras con la otra compañía. De forma que las nuevas carteras que se alcanzan son A' y B'.

Veamos ahora que el riesgo expresado por la desviación estándar no se comporta de forma lineal ya que la varianza es una medida cuadrática. Justo esta propiedad es la que justifica que el reaseguro o la diversificación hacen que el riesgo disminuya.

En el caso de la varianza:


Supongamos que hacemos que coincidan las dos desviaciones. En nuestro caso ambas σ serían 0,4.


De aquí, operando, se siguen estas expresiones:



Esta es la justificación formal de que es posible reducir el riesgo de una cartera mediante la diversificación o mediante el reaseguro con otra cartera con la que mantenga una reducida correlación.

Veamos el ejemplo numérico que hemos creado en Excel donde se obtiene precisamente que el nuevo riesgo de la cartera diversificada es igual al anterior dividido entre raíz de dos.