Sunteți pe pagina 1din 5

Proyecto 2: VaR y CVar del IPyC

Métodos Cuantitativos en Finanzas


18 de marzo de 2019

1. Denición del proyecto


Se utilizarán los conocimientos obtenidos en Python (o en cualquier otro lenguaje de programación de
su preferencia) para:

• Obtener un código que graque el VaR (Value at Risk) y CVaR (Conditional Value at Risk)
[o ES (Expected Shortfall)] con un portafolio de acciones del IPyC (Índice de Precios y Cotiza-
ciones).

• El método para calcular estas medidas de riesgo deberá ser elegido por el alumno: simulación
histórica, paramétrico (varianzas y covarianzas) o Monte Carlo.

• Se utilizarán los precios desde diciembre de 2007 para las 26 acciones que se les proporcionaron,
así como los pesos de cada una en el portafolio, igualmente ya proporcionados en un archivo con
formato csv.

• Se deberán considerar ventanas móviles de 100 días, es decir, se deberán calcular el VaR y CVaR
con los primeros 100 cambios logarítmicos del 2008, y estos se deberán comparar con la ganancia
real que se tuvo el día 101. Después, con los rendimientos del segundo día del 2008 y los siguientes
99, calcular VaR y CVaR y comparar con ganancia del día 102, y así sucesivamente. Grácando
al nal todos estos resultados.

• El nivel de conanza (α) deberá ser un parámetro que se pueda cambiar de manera fácil para
obtener un gráco diferente.

El resultado deberá ser parecido al siguiente:

Fecha de entrega: Sábado 30 de marzo de 2019, mismo día que se presentará el examen del primer
tema.
El proyecto se entregará de manera individual.

1
El nombre del archivo que envíen deberá tener el siguiente formato:  [3 o 4 iniciales de
su nombre completo empezando por apellidos]_Proyecto2.[extensión]. Es decir, si se
llaman Ubaldo José López Escobar y realizan un código en Jupyter Notebook, el archivo
se deberá llamar LEUJ_Proyecto2.ipynb.
Cabe destacar que si el proyecto no se entrega a más tardar las 23:59 horas del día establecido, se
recibirá únicamente dentro de las siguientes 24 horas con solo derecho a la mitad de la calicación.

2. Denición de VaR y CVaR


Sea X la distribución de ganancias de un portafolio, así, el VaR, la peor pérdida esperada en un
horizonte de tiempo dado un nivel de conanza α se dene como:

−1
V aRα (X) = −FX (1 − α)
−1
Donde FX es la función de distribución inversa de X.
Mientras que el CVaR se dene como:

CV aRα (X) = −E [X |X <= V aRα (X) ]


Así, vemos que realmente estos valores dependen de las hipótesis que se realicen acerca de la función
de distribución de X.

3. Simulación histórica
Supongamos se tiene un portafolio P con m activos, y los precios de estos para n días, sean:
S
k i : precio del activo k a tiempo i ∈ {1, . . . , n}, k ∈ {1, . . . , m}.
S
P i : valor del portafolio P a tiempo i.
k ri : rendimiento logarítmico del activo k a tiempo i.
P ri : redimiento del portafolio P a tiempo i.
percY (β) : percentil β de la distribución empírica de observaciones de Y .
k w : peso del activo k en el portafolio.
Así para i ∈ {2, . . . , n}, los rendimientos logarítmicos del activo k son:
 
k Si
r
k i = ln
k Si−1

Luego:

m
X
P Si = kw · k Si
k=1

m
X
P ri = kw · k ri
k=1

2
Si R es la variable aleatoria de los rendimientos logarítmicos de P , de la cuál tenemos las observaciones
P r1 , . . . , P rn , entonces denimos el VaR de simulación histórica de un solo activo con distrtibución de
ganancias X como:

V aRα (X) = P Sn − P Sn · epercR (1−α)

En el caso particular de un bono las observaciones para R se calculan como las diferencias simples de
las tasas, y entonces el VaR se puede aproximar como

M acD · P (y) · percR (1 − α)


V aRα (X) =
1 + ky


Para calcular el CVaR solo se debe considerar

z = promedio ({P ri |P ri ≤ percR (1 − α) })

Y así:

CV aRα (X) = P Sn − P Sn · ez

4. Varianzas y covarianzas
Para este método la hipótesis importante es que X tiene distribución normal, así:

V aRα (X) = −P Sn · Z1−α · σ

Donde Z1−α = FN−1 (1 − a) con FN la función de distribución de una normal estándar. Y también:

Z2
1−α
e− 2
CV aRα (X) = P Sn · √ ·σ
(1 − α) 2π
Entonces el cálculo de esto valores ya solo dependen de la forma de calcular la desviación estándar σ de
X. En este caso se utilizará la matriz de varianzas y covarianzas (V ) de los rendimientos logarítmicos
de cada uno de los activos del portafolio:

1/2
σ = wT · V · w

Con w el vector de pesos de cada uno de los activos del portafolio (k w ).

5. Funciones en Python
Biblioteca pandas
Es una biblioteca útil para el manejo de data frames y realizar operaciones iterativas dentro de ellos.

pandas.read_csv("C:/Users/usuario/Documents/Precios.csv")
Permite acceder a un archivo en formato csv especicando ruta y nombre para obetener un data frame.

data_frame.drop(labels,axis)
Permite borrar las o columnas (axis = 0 o axis = 1) de un data frame con labels como un vector de
identicadores.

data_frame.pct_change()

3
Calcula los cambios porcentuales de las columnas de un data frame.

data_frame.apply(function,axis)
Calcula el resultado de aplicar una función denida anteriormente (por ejemplo function = lambda x:
sum(x) calcula la suma de las entradas de x) sobre las o columnas (axis = 0 o axis = 1).

data_frame.dtypes
Últil para saber el tipo de variables dentro de un data frame.

data_frame.loc[a,b]
Devuelve un dataframe con las las a y las columnas b, donde a y b son vectores de índices.

Biblioteca numpy
Es una biblioteca útil para el manejo de arrays, incluyendo matrices, y operaciones que se pueden
realizar con ellos.

numpy.asarray(x)
Convierte un objeto no array (como un data frame) a un array.

numpy.log(array)
Calcula el logaritmo natural a todoas las entradas de un array.

numpy.sort(array)
Ordena los elementos de un array.

numpy.percentile(array,alfa)
Calcula el percentil alfa (entre 0 y 100) de los elementos en el array.

numpy.average(array)
Obtiene el promedio de los elementos dentro de un array.

numpy.cov(matrix,rowvar)
Calcula la matriz de varianzas y covarianzas de otra matriz o data frame, rowvar es un booleano que
Veradero implica que cada una de las las es la serie de una variable, Falso serían las columnas.

numpy.dot(array1,array2)
Da como resultado el producto matricial de array1 y array2.

numpy.transpose(array)
Obtiene el transpuesto de un array.

Biblioteca math
math.exp(x)

Da como resultado la constante de Euler elevada al número x.

numpy.pi

4
Otros
from scipy.stats import norm
norm.ppf(beta)

Calcula la función de distribución inversa de una normal estándar para un valor beta.

array[a,b]
Obtiene el valor a en las las, b en las columnas de un array (los índices empiezan en 0). Se puede
utilizar en una sola dimensión omitiendo la segunda entrada.

import matplotlib.pyplot as plt


plt.plot(x,y)
Se obtiene una gráca de línea con x como el eje horizontal, y yel eje vertical.

S-ar putea să vă placă și