LABORATORIO #1
A continuacion se mostrara el codigo de ejecucion en R-Studio y el analisis correspondiente a cada calculo.
library(quantmod)
library(zoo)
library(TTR)
library(xts)
library(knitr)
library(tidyverse)
library(ggplot2)
library(dplyr)
library(timetk)
datos = read.table("trm.txt", head = T)
class(datos[,"Fecha"])
## [1] "character"
#Se convierte a formato de fecha la columna "Fecha"
datos[,"Fecha"]<-as.Date(datos[,"Fecha"],format = "%d/%m/%Y")
class(datos[,"Fecha"])
## [1] "Date"
Analizamos la serie diaria de la TRM desde 2000-02-21, hasta 2024-02-21.
Calculamos los rendimientos diarios continuos:
#Rendimientos diarios
Rtos_TRM<-diff(log(datos[,"TRM"]))
Graficos
Precio de la TRM
plot(datos, col="blue", type = "l", main = "Serie Historica TRM")
Rendimientos diarios de la TRM
plot(datos[-1,"Fecha"],diff(log(datos[,"TRM"])), type = "l", main = "Serie Historica rendimientos diarios TRM")
Histograma de precios
hist(datos[,"TRM"], breaks = 30, col = "gray", main = "Histograma de precios", freq = FALSE)
Histograma de rendimientos
hist(Rtos_TRM, breaks = 50, col = "gray", main = "Histograma de rendimientos", freq = FALSE, xlim = c(-0.02,0.02))
Histograma con la distribucion normal
hist(Rtos_TRM, breaks = 50, col = "gray", main = "Histograma de rendimientos", freq = FALSE, xlim = c(-0.02,0.02))
curve(dnorm(x,mean=mean(Rtos_TRM),sd=sd(Rtos_TRM)),-0.02,0.02,add = T,col="blue")
Aqui podemos ver como la distribucion tiende a ser mesocurtica con respecto a la normal.
Estadistica basica
Sobre el precio
library(fBasics)
max(datos[,"TRM"])
## [1] 5061.21
min(datos[,"TRM"])
## [1] 1652.41
mean(datos[,"TRM"])
## [1] 2665.341
sd(datos[,"TRM"])
## [1] 762.6734
skewness(datos[,"TRM"])
## [1] 0.8888884
## attr(,"method")
## [1] "moment"
kurtosis(datos[,"TRM"])
## [1] 0.02819978
## attr(,"method")
## [1] "excess"
estadistica_precios=cbind(c("Max", "Min", "Mean", "Desv", "Sesgo", "Kurtosis"), precios=c(max(datos[,"TRM"]),min(datos[,"TRM"]),mean(datos[,"TRM"]),sd(datos[,"TRM"]),skewness(datos[,"TRM"]),kurtosis(datos[,"TRM"])))
estadistica_precios
## precios
## [1,] "Max" "5061.21"
## [2,] "Min" "1652.41"
## [3,] "Mean" "2665.34054066385"
## [4,] "Desv" "762.673362792541"
## [5,] "Sesgo" "0.888888384719638"
## [6,] "Kurtosis" "0.0281997844014694"
#Percentiles
quantile(datos[,"TRM"],c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90% 95% 99%
## 1762.278 1791.610 1836.340 2393.580 3058.525 3860.472 4095.444 4802.480
Sobre los rendimientos
basicStats(Rtos_TRM)
## Rtos_TRM
## nobs 8766.000000
## NAs 0.000000
## Minimum -0.056219
## Maximum 0.059307
## 1. Quartile -0.001429
## 3. Quartile 0.001299
## Mean 0.000080
## Median 0.000000
## Sum 0.697796
## SE Mean 0.000063
## LCL Mean -0.000045
## UCL Mean 0.000204
## Variance 0.000035
## Stdev 0.005933
## Skewness 0.269912
## Kurtosis 9.794342
mean(Rtos_TRM)
## [1] 7.96026e-05
sd(Rtos_TRM)
## [1] 0.005933046
quantile(Rtos_TRM,c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90%
## -0.016772987 -0.008995564 -0.005731670 0.000000000 0.001298514 0.005973884
## 95% 99%
## 0.009576499 0.019049738
Analisis tecnico y estadistico
Los calculos estadisticos que hemos realizado nos ofrecen un panorama mas detallado sobre el comportamiento de la TRM a lo largo del periodo.
. El sesgo en los rendimientos fue de 0.2699 lo que nos indica que existe una leve asimetria dentro de la distribucion normal.Indicando que la distribucion tiene unas colas levemente mas pesadas a la derecha. Dentro del supuesto de la normalidad.
· La curtosis es mayor es de 9.7943, es decir, es mayor a 3 y nos indica que hay un exceso de curtosis dentro de la distribucion.Si una distribucion tiene una curtosis positiva, significa que tiene un pico mas pronunciado en comparacion con la distribucion normal. Esto nos indica que los valores de los datos estan mas concentrados alrededor de la media y hay menos valores atipicos.
· Aqui la distribución ya tiende a ser mesocurtica.
Media y Desviación estándar
mean(Rtos_TRM)
## [1] 7.96026e-05
sd(Rtos_TRM)
## [1] 0.005933046
La media arroja un valor bajo, muy cerca a cero, lo cual nos puede estar indicando varias razones:
Estabilidad de precios: Una media cercana a cero sugiere que, en promedio, los precios no estan cambiando significativamente con el tiempo.
Falta de variabilidad: Una baja desviacion estándar nos puede indicar que los precios tienden a estar cerca de la media, lo que sugiere que hay poca variabilidad en los datos. En otras palabras, los precios tienden a permanecer cerca del promedio, lo que podria indicar poca volatilidad.
Periodo de estancamiento: Tambien nos puede indicar una media cercana a cero y una baja desviacion estandar podrian indicar periodos de estancamiento economico.
Comparacion de cuantiles
qqnorm(Rtos_TRM)
qqline(Rtos_TRM)
cuantiles<-c(0.01,0.025,0.05,0.1,0.25,0.40,0.45,0.5,0.75,0.9,0.95,0.975,0.99)
qnorm(cuantiles,mean = mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] -0.0137227254 -0.0115489530 -0.0096793889 -0.0075239012 -0.0039221758
## [6] -0.0014235173 -0.0006659519 0.0000796026 0.0040813810 0.0076831064
## [11] 0.0098385941 0.0117081582 0.0138819306
quantile(Rtos_TRM, cuantiles)
## 1% 2.5% 5% 10% 25% 40%
## -0.016772987 -0.012667605 -0.008995564 -0.005731670 -0.001428904 0.000000000
## 45% 50% 75% 90% 95% 97.5%
## 0.000000000 0.000000000 0.001298514 0.005973884 0.009576499 0.013224682
## 99%
## 0.019049738
Simulacion MONTECARLO
Realice una simulacion con 10.0000 iteraciones para el valor de la TRM para el viernes 17 de febrero de 2017 (dos dias adelante de la ultima fecha de la muestra).
Numero_iteraciones=10000
TRM_SIMULADA=matrix(,3,Numero_iteraciones)
TRM_Inicial=datos[length(datos[,"TRM"]), "TRM"]
TRM_SIMULADA[1,]=TRM_Inicial
for(j in 1:Numero_iteraciones){
for(i in 2:3){
TRM_SIMULADA[i,j]=TRM_Inicial*exp(rnorm(1,mean = mean(Rtos_TRM),sd=sd(Rtos_TRM)))
}
}
matplot(TRM_SIMULADA,type = "l", col = "gray", main="TRM SIMULADA")
#Histograma TRM SIMULADA
hist(TRM_SIMULADA[2,],15, main = "HISTOGRAMA SIMULACIoN TRM", col ="gray")
base=t(TRM_SIMULADA)
#Posiciones
posicion=(base[,3]-base[,1])
#Largo
posicion_largo=sum(posicion>0)
posicion_largo
## [1] 5034
#Corto
posicion_corto=sum(posicion<0)
posicion_corto
## [1] 4966
#Probabilidad de las posiciones
prob_largo = posicion_largo/(posicion_largo+posicion_corto)
prob_largo
## [1] 0.5034
prob_corto = posicion_corto/(posicion_largo+posicion_corto)
prob_corto
## [1] 0.4966
#Calculamos los promedios de los cortos y los largos
posicion_largo= posicion[posicion > 0]
prom_largo=mean(posicion_largo)
prom_largo
## [1] 18.73507
posicion_corto= posicion[posicion < 0]
prom_corto= abs(mean(posicion_corto)) #Valor absoluto
prom_corto
## [1] 18.00449
#Payoffs = Compensacion
payoff_corto<-(prom_corto*10000)
payoff_corto
## [1] 180044.9
payoff_largo<-(prom_largo*10000)
payoff_largo
## [1] 187350.7
SOLUCIoN DE PREGUNTAS DEL EJERCICIO - PARTE 1
1.¿Como se analiza estadisticamente el precio de la TRM en este lapso de informacion?
R/: Para analizar estadisticamente el precio de la (TRM) en Colombia en un lapso de tiempo desde el año 2000 hasta la fecha, asignando probabilidades basadas en frecuencia y bajo el supuesto de que los rendimientos siguen una distribucion normal, hacemos lo siguiente:
Descargamos los datos historicos de la TRM para el periodo de tiempo desde la pagina del Banco de la Republica.
Luego calculamos los rendimientos de los precios teniendo en cuenta que los rendimientos van a seguir una distribucion log-normal.
Calculamos los parametros de la distribucion normal como la media y desviacion estandar basados en los rendimientos.
Luego realiamos el analisis estadistico basico donde tenemos en cuenta la media, desvicion, sesgo y curtosis principalmente para analizar si la distribucion de los precios es mesocurtica o leptocurtica y si los valores estan o no muy alejados de la media.
Luego hacemos un analisis grafico donde hacemos histograma de frecuencias, grafico de precios y rendimientos.
Podemos utilizar los parametros anteriores para asignar probabilidades a pronosticos que queremos hacer.
2.¿Como se analiza estadisticamente el precio de la TRM en este lapso de informacion?
R/: No es estrictamente necesario acortar la informacion cuando se analiza un periodo de 20 años de variacion en la (TRM), especialmente si el objetivo es comprender la evolucion a largo plazo de esta variable y su comportamiento estadistico a lo largo del tiempo. Sin embargo, la nececesidad de acortar la informacion puede depender de varios factores, incluyendo la volatilidad de la TRM y la relevancia de los datos para la toma de decisiones.
Por otro lado, si la TRM ha experimentado una alta volatilidad en los Ultimos 20 años, puede ser beneficioso acortar la informacion para centrarnos en periodos mas recientes donde los datos son mas relevantes y representativos de las condiciones actuales del mercado.
3.Sabiendo que el valor del activo es al dia de hoy, estime un intervalo de confianza del 95% para el valor en pesos de una importacion de 500.000 USD. ¿Cual es la probabilidad de obtener una perdida de hasta un 3% en un dia? y la probabilidad de ganar hasta un 5% en un dia?
qnorm(c(0.05,0.95),mean = mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] -0.009679389 0.009838594
Probabilidad de obtener una perdida de hasta un 3% en un dia.
pnorm(-0.03,mean =mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] 1.990732e-07
Probabilidad de ganar hasta un 5% en un dia.
pnorm(0.05,mean =mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] 1
4.¿Si usted invierte 10.000.000 COP cual es la probabilidad de obtener perdidas entre -500.000 Y 500.000 COP en un dia?
inversion=10000000
perdida=-500000
ganancia=500000
#Suponiendo una distribucion normal.
media=mean(Rtos_TRM)
sd=sd(Rtos_TRM)
#Probabilidades
prob_perdida=pnorm(perdida, mean=media,sd=sd)
prob_ganancia=pnorm(ganancia, mean=media,sd=sd)
probabilidad_perdida = prob_ganancia - prob_perdida
De acuerdo a los calculos, la probabilidad es de 1.
SIMULACIoN DE MONTECARLO- EJERCICIO DE FUTUROS
Usted toma una posicion corta en 10 contratos de futuros de la TRM (TRMH24F) y que tienen un precio actual de4198 COP por cada USD. Sabiendo que cada contrato es de 50.000 USD y que usted deposita 150.000.000 de COP en la cuenta de margen, realice una simulacion de Montecarlo con 10.000 iteraciones bajo el supuesto de que los rendimientos continuos mensuales del futuro, siguen una distribucion normal con media de 1% y desviacion estandar del 3%, para determinar:
datos1 = read.table("TRMH.BD.txt", head = T)
head(datos1)
## Fecha TRMH
## 1 1/08/2023 4230.00
## 2 15/08/2023 4328.39
## 3 29/08/2023 4293.11
## 4 5/09/2023 4269.00
## 5 6/09/2023 4269.95
## 6 7/09/2023 4228.60
class(datos1[,"Fecha"])
## [1] "character"
#Se convierte a formato de fecha la columna "Fecha"
datos1[,"Fecha"]<-as.Date(datos1[,"Fecha"],format = "%d/%m/%Y")
class(datos1[,"Fecha"])
## [1] "Date"
Analizamos la serie futura TRMH24F desde 2023-08-01, hasta 2024-02-01.
Calculamos los rendimientos diarios continuos, la media y desviacon estandar.
Rtos_TRMH<-diff(log(datos1[,"TRMH"]))
media_futuro=mean(Rtos_TRMH)
desviacion_futuro=sd(Rtos_TRMH)
Simulacion del futuro TRMH24F
Numero_iteraciones=10000
TRM_Inicial1=4198
TRM_SIMULADA1=matrix(,3,Numero_iteraciones)
TRM_SIMULADA1[1,]=TRM_Inicial1
for(j in 1:Numero_iteraciones){
for(i in 2:3){
TRM_SIMULADA1[i,j]=TRM_Inicial1*exp(rnorm(1,mean = media_futuro,sd=desviacion_futuro))
}
}
matplot(TRM_SIMULADA1,type = "l", col = "blue", main="TRM FUTURO SIMULADO")
#Histograma TRM SIMULADA
hist(TRM_SIMULADA1[2,],20, main = "HISTOGRAMA SIMULACION FUTURO", col="brown")
base1=t(TRM_SIMULADA1)
Posicion en futuro TRMH24F
posicion1=(base1[,3]-base1[,1])
#Largo
posicion_largo1=sum(posicion1>0)
posicion_largo1
## [1] 4845
#Corto
posicion_corto1=sum(posicion1<0)
posicion_corto1
## [1] 5155
Probabilidades para cada posicion
prob_largo1 = posicion_largo1/(posicion_largo1+posicion_corto1)
prob_largo1
## [1] 0.4845
prob_corto1 = posicion_corto1/(posicion_largo1+posicion_corto1)
prob_corto1
## [1] 0.5155
Calculamos los promedios de los cortos y los largos
posicion_largo1= posicion1[posicion1 > 0]
prom_largo1=mean(posicion_largo1)
prom_largo1
## [1] 41.71588
posicion_corto1= posicion1[posicion1 < 0]
prom_corto1= abs(mean(posicion_corto1)) #Valor absoluto
prom_corto1
## [1] 43.79129
payoff_corto1<-(prom_corto1*50000)
payoff_corto1
## [1] 2189564
payoff_largo1<-(prom_largo1*50000)
payoff_largo1
## [1] 2085794
Calculo margen y Liquidacion del contrato
Numero_de_contratos = 10
Precio_inicial = 4198
Nominal_contrato = 50000
Exposicion_Total = Numero_de_contratos*Nominal_contrato*Precio_inicial
Exposicion_Contrato = Exposicion_Total/Numero_de_contratos
Valor_garantia_minima = 130000000
Valor_cuenta_de_margen=150000000
Solucion a las preguntas sobre futuros
1.Un intervalo de prediccion del 90% del valor de la cuenta de margen para dentro de un mes.
media1=0.01
desvest=0.03
cuenta_margen <- numeric(Numero_iteraciones)
for (j in 1:Numero_iteraciones) {
precio_futuro = TRM_SIMULADA1[3, j]
valor_contratos = Numero_de_contratos * Nominal_contrato * precio_futuro
cuenta_margen[j] = Valor_cuenta_de_margen + valor_contratos - (Numero_de_contratos * Nominal_contrato * Precio_inicial)
}
#Intervalo de predicci?n
qnorm(c(0.10,0.90),mean = media1,sd=desvest)
## [1] -0.02844655 0.04844655
2.La probabilidad de perder mas de 10.000.000 COP en un mes..
prob_perdida <- 10000000/150000000
pnorm(-prob_perdida,mean =media1,sd=desvest)
## [1] 0.005300922
3.Si el margen minimo es de 130.000.000 COP ?Cu?l es la probabilidad de ser llamado al margen?
prob_margen_call <- mean(cuenta_margen < Valor_garantia_minima)
prob_margen_call*100
## [1] 24.26
La probabilidad de ser llamado al margen es aproximadamente del 25%
LABORATORIO #2
A continuacion, realizaremos una practica de simulaciones con MBG y precios futuros, se mostrara el codigo de ejecucion en R-Studio y el analisis correspondiente a cada calculo.
datos_trm = read.table("trm_cm.txt", head = T)
# Tamaño de la muestra
n <- nrow(datos_trm)
#Vector de precios
precios = datos_trm[,-1]
precios = ts(precios)
#Precio actual de la TRM
s = tail(precios,1)
s = as.numeric(s)
s
## [1] 4435.84
# Verificar que el formato de la fecha sea correcto.
datos_trm[,"Fecha"]<-as.Date(datos_trm[,"Fecha"],format = "%d/%m/%Y")
datos_trm <- datos_trm %>% arrange(Fecha)
mean_precios <- mean(precios)
sd_precios <- sd(precios)
Rtos_diarios = diff(log(precios))
#Vector rendimientos anuales
Rtos_anuales = (Rtos_diarios) * 252
# MEDIA de rendimientos diaria
media_diaria = mean(Rtos_diarios)
media_diaria
## [1] 9.985647e-05
volatilidad_diaria = sd(Rtos_diarios)
volatilidad_diaria
## [1] 0.005793936
#Volatilidad anual
Volatilidad_Anual = sd(Rtos_diarios) * 252
media_Anual = mean(Rtos_diarios) * 252
media_Anual
## [1] 0.02516383
plot(datos_trm[,"Fecha"],datos_trm[,"TRM"], type = "l", col = "blue", main = "Serie Historica TRM")
Estadistica basica
Sobre Precios:
max(datos_trm[,"TRM"])
## [1] 4627.46
min(datos_trm[,"TRM"])
## [1] 1652.41
mean(datos_trm[,"TRM"])
## [1] 2557.236
sd(datos_trm[,"TRM"])
## [1] 643.4042
skewness(datos_trm[,"TRM"])
## [1] 0.7396229
## attr(,"method")
## [1] "moment"
kurtosis(datos_trm[,"TRM"])
## [1] -0.3242297
## attr(,"method")
## [1] "excess"
estad_precios=cbind(Estadistica=c("Max", "Min", "Mean", "Desv", "Sesgo", "Kurtosis"), Precios=c(max(datos_trm[,"TRM"]),min(datos_trm[,"TRM"]),mean(datos_trm[,"TRM"]),sd(datos_trm[,"TRM"]),skewness(datos_trm[,"TRM"]),kurtosis(datos_trm[,"TRM"])))
kable(estad_precios)
| Estadistica | Precios |
|---|---|
| Max | 4627.46 |
| Min | 1652.41 |
| Mean | 2557.23567738023 |
| Desv | 643.404192995458 |
| Sesgo | 0.739622931866897 |
| Kurtosis | -0.324229650715073 |
#Cuantiles precios
quantile(datos_trm[,"TRM"],c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90% 95% 99%
## 1761.332 1789.422 1829.806 2348.690 2956.060 3585.096 3830.822 4129.870
Sobre Rendimientos:
max(Rtos_diarios)
## [1] 0.05930667
min(Rtos_diarios)
## [1] -0.05621935
mean(Rtos_diarios)
## [1] 9.985647e-05
sd(Rtos_diarios)
## [1] 0.005793936
skewness(Rtos_diarios)
## [1] 0.2648758
## attr(,"method")
## [1] "moment"
kurtosis(Rtos_diarios)
## [1] 10.86486
## attr(,"method")
## [1] "excess"
estad_rendimientos=cbind(Estadistica=c("Max", "Min", "Mean", "Desv", "Sesgo", "Kurtosis"), Rendimientos=c(max(Rtos_diarios),min(Rtos_diarios),mean(Rtos_diarios),sd(Rtos_diarios),skewness(Rtos_diarios),kurtosis(Rtos_diarios)))
kable(estad_rendimientos)
| Estadistica | Rendimientos |
|---|---|
| Max | 0.0593066743064448 |
| Min | -0.0562193503314647 |
| Mean | 9.98564672132738e-05 |
| Desv | 0.00579393554029575 |
| Sesgo | 0.264875847430311 |
| Kurtosis | 10.8648621122529 |
#Comparacion de cuantiles
qqnorm(Rtos_diarios)
qqline(Rtos_diarios)
#Cuantiles rendimientos
quantile(Rtos_diarios,c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90%
## -0.016423437 -0.008573411 -0.005472213 0.000000000 0.001321027 0.005783864
## 95% 99%
## 0.009335290 0.018358968
#Para los precios
qnorm(c(0.05,0.95),mean = mean(precios),sd=sd(precios))
## [1] 1498.930 3615.541
#Para los rendimientos
qnorm(c(0.05,0.95),mean = mean(Rtos_diarios),sd=sd(Rtos_diarios))
## [1] -0.009430319 0.009630032
Simulacion MBG
# Definir los parametros
S =s # Precio de la TRM del 17 de septiembre de 2022
t <- 180 # Tiempo en dias
volatilidad <- volatilidad_diaria # Volatilidad historica de la serie
mu <- media_diaria # Tasa de crecimiento/rendimiento historica de la serie
iteraciones <- 10000 # Numero de iteraciones
# Crear una funcion para simular el MBG
set.seed(123) #Establecer una semilla
simular_MB <- function(S, t, volatilidad, mu, iteraciones) {
precios_futuros <- numeric(iteraciones)
for (i in 1:iteraciones) {
W_t <- rnorm(1, mean = 0, sd = sqrt(t)) # Generar un valor del proceso Browniano
S_t <- S * exp((mu - 0.5 * volatilidad^2) * t + volatilidad * W_t) # Calcular el precio futuro
precios_futuros[i] <- S_t
}
return(precios_futuros)
}
precios_simulados = simular_MB(S, t, volatilidad, mu, iteraciones)
# Ver los primeros 5 precios simulados
head(precios_simulados, 5)
## [1] 4310.707 4422.819 5082.657 4527.413 4548.147
Grafico del histograma y densidad
hist(precios_simulados, breaks = 30, prob = TRUE, col = "skyblue", main = "Distribucion Empirica de Precios Futuros", xlab = "Precio Futuro", ylab = "Densidad")
# Curva de densidad
densidad <- density(precios_simulados)
lines(densidad, col = "red", lwd = 2)
La grafica nos muestra la distribucion empirica de los precios futuros simulados.Esta tiende a ser mesocurtica. La curva de densidad (en rojo) nos da una idea de la forma de la distribucion.
cuantil_2_5 <- quantile(precios_simulados, 0.025)
cuantil_97_5 <- quantile(precios_simulados, 0.975)
hist(precios_simulados, breaks = 30, prob = TRUE, col = "skyblue", main = "Distribución Empirica de Precios Futuros", xlab = "Precio Futuro", ylab = "Densidad")
# Curva de densidad
densidad <- density(precios_simulados)
lines(densidad, col = "red", lwd = 2)
abline(v = cuantil_2_5, col = "blue", lty = 2)
abline(v = cuantil_97_5, col = "blue", lty = 2)
# Mostrar los cuantiles en la leyenda
legend("topright", legend = c("Distribucion Empirica", "Densidad", "Cuantiles al 2.5% y 97.5%"), fill = c("skyblue", "red", NA), lty = c(0, 1, 2), col = c(NA, "red", "blue"), lwd = c(0, 2, 1), bty = "n", title = "Datos")
# Imprimir los cuantiles
cat("Cuantil al 2.5%:", cuantil_2_5, "\n")
## Cuantil al 2.5%: 3861.165
cat("Cuantil al 97.5%:", cuantil_97_5, "\n")
## Cuantil al 97.5%: 5240.09
Existe una probabilidad del 95% de que el precio futuro esta dentro del rango de 3865.042 y 5242.569 pesos.
Cuantil al 2.5%: 3,865.042: Podemos decir que el 2.5% de los precios futuros simulados son inferiores o iguales a $3,865.042. En otras palabras, hay un 2.5% de probabilidad de que el precio futuro sea igual o inferior a este valor.
Cuantil al 97.5%: 5242.569: Esto nos indica que el 97.5% de los precios futuros simulados son inferiores o iguales a $5,242.569. Por lo tanto, hay un 97.5% de probabilidad de que el precio futuro sea igual o inferior a este valor.
Precio actual de la TRM:
s
## [1] 4435.84
Dado que el ultimo precio conocido (s) es de 4,435.84, y los cuantiles al 2.5% y 97.5% son 3,865.042 y $5,242.569 respectivamente, podemos inferir lo siguiente:
-El rango entre estos cuantiles nos proporciona una estimacionn de la incertidumbre asociada con los posibles precios futuros. Cuanto mas amplio sea este rango, mayor sera la incertidumbre.
-Dado que el precio actual es $4435.84 y cae dentro de este rango, podemos concluir que, en general, es recomendable que el precio futuro esta en linea con el precio actual, pero hay una cierta variabilidad y riesgo asociados con el pronostico debido a la volatilidad de los precios y otros factores inherentes.
-Basandonos en este analisis, concluimos que los precios futuros de la TRM estan sujetos a una considerable incertidumbre y variabilidad, lo que es un reflejo de las fluctuaciones historicas y de la naturaleza impredecible de los mercados financieros. Aunque las simulaciones proporcionan una guia sobre lo que podria esperarse en terminos de movimientos de precios, la realidad del mercado podria desviarse significativamente de estos rangos proyectados debido a eventos inesperados o cambios en las condiciones economicas.
S <- 4066 # Tasa de cambio actual en COP
t <- 180/252 # Proyeccion a futuro en terminos anuales (para 180 dias)
mu <- mean(Rtos_diarios, na.rm = TRUE) * 252 # Rendimiento anual estimado
sigma <- sd(Rtos_diarios, na.rm = TRUE) * sqrt(252) # Volatilidad anual estimada
iteraciones <- 1000 # Numero de iteraciones para la nueva simulacion
precios_simulados_TRM <- numeric(iteraciones)
set.seed(123) # Garantiza la reproducibilidad
for(i in 1:iteraciones) {
Z <- rnorm(1) # Generar un valor aleatorio de una distribucion normal estandar
precios_simulados_TRM[i] <- S * exp((mu - 0.5 * sigma^2) * t + sigma * sqrt(t) * Z)
}
CI_inferior <- quantile(precios_simulados_TRM, probs = 0.025)
CI_superior <- quantile(precios_simulados_TRM, probs = 0.975)
cat("El intervalo de confianza del 95% para el precio futuro de la TRM es de:", CI_inferior, "a", CI_superior, "\n")
## El intervalo de confianza del 95% para el precio futuro de la TRM es de: 3549.079 a 4835.697
pagos_usd <- c(91738, 90992, 90246, 89500, 88754)
fechas <- as.Date(c("2022-10-17", "2022-11-17", "2022-12-17", "2023-01-17", "2023-02-17"))
S <- 4066 # Tasa de cambio actual en COP
mu <- 0.0001039 # Media de rendimientos
sigma <- 0.091816 # Desviacion estandar de los rendimientos
dias <- as.numeric(difftime(fechas, as.Date("2022-09-17"), units = "days")) # Dias hasta cada pago
iteraciones <- 1000 # Numero de iteraciones para la simulacion
set.seed(123)
flujo_caja_total <- numeric(iteraciones)
for (i in 1:iteraciones) {
flujo_caja <- 0
for (j in 1:length(pagos_usd)) {
t <- dias[j] / 365
TRM_futura <- S * exp((mu - 0.5 * sigma^2) * t + sigma * sqrt(t) * rnorm(1))
flujo_caja <- flujo_caja + pagos_usd[j] * TRM_futura
}
flujo_caja_total[i] <- flujo_caja
}
media_flujo_caja <- mean(flujo_caja_total)
CI_inferior <- quantile(flujo_caja_total, probs = 0.025)
CI_superior <- quantile(flujo_caja_total, probs = 0.975)
cat("El flujo de caja total esperado promedio es:", media_flujo_caja, "COP\n")
## El flujo de caja total esperado promedio es: 1834672565 COP
cat("El intervalo de confianza del 95% para el flujo de caja total esperado es de:", CI_inferior, "a", CI_superior, "COP\n")
## El intervalo de confianza del 95% para el flujo de caja total esperado es de: 1766560152 a 1903628808 COP
pagos_usd <- c(91738, 90992, 90246, 89500, 88754)
fechas <- as.Date(c("2022-10-17", "2022-11-17", "2022-12-17", "2023-01-17", "2023-02-17"))
S <- 4066
cobertura <- 0.70
exposicion <- 1 - cobertura
mu <- 0.0001039
sigma <- 0.091816
dias <- as.numeric(difftime(fechas, as.Date("2022-09-17"), units = "days"))
iteraciones <- 1000
set.seed(123)
flujo_caja_total_con_cobertura <- numeric(iteraciones)
for (i in 1:iteraciones) {
flujo_caja_con_cobertura <- 0
for (j in 1:length(pagos_usd)) {
t <- dias[j] / 365
TRM_futura <- S * exp((mu - 0.5 * sigma^2) * t + sigma * sqrt(t) * rnorm(1))
pago_cubierto <- pagos_usd[j] * cobertura * S
pago_no_cubierto <- pagos_usd[j] * exposicion * TRM_futura
flujo_caja_con_cobertura <- flujo_caja_con_cobertura + pago_cubierto + pago_no_cubierto
}
flujo_caja_total_con_cobertura[i] <- flujo_caja_con_cobertura
}
media_flujo_caja_con_cobertura <- mean(flujo_caja_total_con_cobertura)
CI_inferior_con_cobertura <- quantile(flujo_caja_total_con_cobertura, probs = 0.025)
CI_superior_con_cobertura <- quantile(flujo_caja_total_con_cobertura, probs = 0.975)
cat("El flujo de caja total esperado promedio con cobertura es:", media_flujo_caja_con_cobertura, "COP\n")
## El flujo de caja total esperado promedio con cobertura es: 1834692595 COP
cat("El intervalo de confianza del 95% para el flujo de caja total esperado con cobertura es de:", CI_inferior_con_cobertura, "a", CI_superior_con_cobertura, "COP\n")
## El intervalo de confianza del 95% para el flujo de caja total esperado con cobertura es de: 1814258872 a 1855379468 COP
media_flujo_caja_sin_cobertura <- mean(flujo_caja_total)
media_flujo_caja_con_cobertura <- mean(flujo_caja_total_con_cobertura)
beneficio_real <- media_flujo_caja_con_cobertura - media_flujo_caja_sin_cobertura
cat("El beneficio real obtenido de aplicar la cobertura es:", beneficio_real, "COP\n")
## El beneficio real obtenido de aplicar la cobertura es: 20030.65 COP
CI_inferior_sin_cobertura <- quantile(flujo_caja_total, probs = 0.025)
CI_superior_sin_cobertura <- quantile(flujo_caja_total, probs = 0.975)
CI_inferior_con_cobertura <- quantile(flujo_caja_total_con_cobertura, probs = 0.025)
CI_superior_con_cobertura <- quantile(flujo_caja_total_con_cobertura, probs = 0.975)
cat("El intervalo de confianza del 95% para el flujo de caja total esperado sin cobertura es de:", CI_inferior_sin_cobertura, "a", CI_superior_sin_cobertura, "COP\n")
## El intervalo de confianza del 95% para el flujo de caja total esperado sin cobertura es de: 1766560152 a 1903628808 COP
cat("El intervalo de confianza del 95% para el flujo de caja total esperado con cobertura es de:", CI_inferior_con_cobertura, "a", CI_superior_con_cobertura, "COP\n")
## El intervalo de confianza del 95% para el flujo de caja total esperado con cobertura es de: 1814258872 a 1855379468 COP
diferencia_flujo_caja <- flujo_caja_total_con_cobertura - flujo_caja_total
media_diferencia_flujo_caja <- mean(diferencia_flujo_caja)
porcentaje_margen <- 0.10
requerimiento_margen <- porcentaje_margen * media_diferencia_flujo_caja
cat("La diferencia promedio del flujo de caja debido a la cobertura es:", media_diferencia_flujo_caja, "COP\n")
## La diferencia promedio del flujo de caja debido a la cobertura es: 20030.65 COP
cat("El requerimiento de margen, asumiendo un 10% de la diferencia promedio, es:", requerimiento_margen, "COP\n")
## El requerimiento de margen, asumiendo un 10% de la diferencia promedio, es: 2003.065 COP
margen_inicial <- 0.10 * media_flujo_caja_sin_cobertura
veces_bajo_margen <- sum(flujo_caja_total_con_cobertura < margen_inicial)
probabilidad_llamado_margen <- veces_bajo_margen / iteraciones
cat("La probabilidad de ser llamado al margen si solo se deposita el margen inicial es:", probabilidad_llamado_margen * 100, "%\n")
## La probabilidad de ser llamado al margen si solo se deposita el margen inicial es: 0 %
calcular_probabilidad_llamado_margen <- function(margen_inicial, flujo_caja_total_con_cobertura) {
veces_bajo_margen <- sum(flujo_caja_total_con_cobertura < margen_inicial)
probabilidad_llamado_margen <- veces_bajo_margen / length(flujo_caja_total_con_cobertura)
return(probabilidad_llamado_margen)
}
margen_inicial <- 0
probabilidad_objetivo <- 0.01
while (TRUE) {
probabilidad <- calcular_probabilidad_llamado_margen(margen_inicial, flujo_caja_total_con_cobertura)
if (probabilidad < probabilidad_objetivo) {
break
}
margen_inicial <- margen_inicial + 10000
}
cat("El margen inicial necesario para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1% es:", margen_inicial, "COP\n")
## El margen inicial necesario para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1% es: 0 COP
r0 <- 0.05
k <- 0.3
theta <- 0.08
sigma <- 0.03
dt <- 1/252
iteraciones <- 10
periodos <- 10
t <- seq(0, periodos*dt, by = dt)
tasas_simuladas <- matrix(NA, nrow = iteraciones, ncol = length(t))
set.seed(123)
for (i in 1:iteraciones) {
tasas_simuladas[i, 1] <- r0
for (j in 2:length(t)) {
dW <- rnorm(1, mean = 0, sd = sqrt(dt))
dR <- k * (theta - tasas_simuladas[i, j-1]) * dt + sigma * dW
tasas_simuladas[i, j] <- tasas_simuladas[i, j-1] + dR
}
}
print(tasas_simuladas)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 0.05 0.04897651 0.04857845 0.05156154 0.05172865 0.05200663 0.05528113
## [2,] 0.05 0.05234901 0.05306191 0.05385137 0.05409167 0.05307207 0.05648108
## [3,] 0.05 0.04801772 0.04764386 0.04574341 0.04440672 0.04326788 0.04012405
## [4,] 0.05 0.05084166 0.05031874 0.05204570 0.05373849 0.05532240 0.05665319
## [5,] 0.05 0.04872284 0.04836715 0.04601343 0.05015284 0.05247120 0.05038150
## [6,] 0.05 0.05051444 0.05049559 0.05044970 0.05307130 0.05267669 0.05557507
## [7,] 0.05 0.05075317 0.04983868 0.04924488 0.04735657 0.04536994 0.04598478
## [8,] 0.05 0.04910775 0.04478061 0.04672321 0.04542256 0.04416351 0.04614432
## [9,] 0.05 0.05004661 0.05081038 0.05014465 0.05139795 0.05101531 0.05167683
## [10,] 0.05 0.05191326 0.05298307 0.05346639 0.05231135 0.05491570 0.05381118
## [,8] [,9] [,10] [,11]
## [1,] 0.05618160 0.05381922 0.05255235 0.05174281
## [2,] 0.05744992 0.05376021 0.05511689 0.05425302
## [3,] 0.04175480 0.04209017 0.03998443 0.04240155
## [4,] 0.05772779 0.05763730 0.05708571 0.05639396
## [5,] 0.04965538 0.04880961 0.05032073 0.05019851
## [6,] 0.05267728 0.05381463 0.05407986 0.05451881
## [7,] 0.04687231 0.04701192 0.04879411 0.05270556
## [8,] 0.04564645 0.04338041 0.04376663 0.04354729
## [9,] 0.05378338 0.05463700 0.05405125 0.05625318
## [10,] 0.05797603 0.06089861 0.06047592 0.05855941
rendimientos <- apply(tasas_simuladas, 2, function(x) c(0, diff(x) / x[-length(x)]))
periodos_secuencia <- seq(0, periodos*dt, by = dt)[-1]
plot(periodos_secuencia, rendimientos[,1], type = "l", col = "blue", ylim = c(min(rendimientos), max(rendimientos)),
xlab = "Tiempo", ylab = "Rendimiento", main = "Curvas de Rendimiento de Tasas Simuladas")
for (i in 2:iteraciones) {
lines(periodos_secuencia, rendimientos[,i], col = "blue")
}
LABORATORIO #3
A continuacion, mostraremos la ejecucion correspondiente en R-Studio para establecer el uso adecuado de una inversion 10.000 dolares, ademas de la cobertura en opciones de acciones financieras.
PARTE 1: Creacion del portafolio Optimo.
library(timetk)
library(tidyquant)
tick <- c('TXN', 'FTNT', 'DLTR')
price_data <- tq_get(tick,
from = '2013-01-01',
to = '2023-06-01',
get = 'stock.prices')
log_ret_tidy <- price_data %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = 'daily',
col_rename = 'ret',
type = 'log')
#Miramos las primeras filas
head(log_ret_tidy)
## # A tibble: 6 × 3
## # Groups: symbol [1]
## symbol date ret
## <chr> <date> <dbl>
## 1 TXN 2013-01-02 0
## 2 TXN 2013-01-03 -0.0131
## 3 TXN 2013-01-04 -0.00220
## 4 TXN 2013-01-07 0.00314
## 5 TXN 2013-01-08 -0.0117
## 6 TXN 2013-01-09 0.0142
library(timetk)
log_ret_xts <- log_ret_tidy %>%
spread(symbol, value = ret) %>%
tk_xts()
head(log_ret_xts)
## DLTR FTNT TXN
## 2013-01-02 0.000000000 0.000000000 0.000000000
## 2013-01-03 -0.010582159 -0.091871076 -0.013084532
## 2013-01-04 0.003539811 -0.001035183 -0.002197429
## 2013-01-07 0.008544917 -0.013031186 0.003137755
## 2013-01-08 -0.024060950 0.001572750 -0.011659171
## 2013-01-09 -0.021506154 0.004703402 0.014162420
mean_ret <- colMeans(log_ret_xts)
print(round(mean_ret, 5))
## DLTR FTNT TXN
## 0.00046 0.00106 0.00075
cov_mat <- cov(log_ret_xts) * 252
print(round(cov_mat,4))
## DLTR FTNT TXN
## DLTR 0.1024 0.0296 0.0264
## FTNT 0.0296 0.1526 0.0482
## TXN 0.0264 0.0482 0.0736
wts <- runif(n = length(tick))
print(wts)
## [1] 0.2387260 0.9623589 0.6013657
print(sum(wts))
## [1] 1.802451
#Ajustamos a que sumen el 100%
wts <- wts/sum(wts)
print(wts)
## [1] 0.1324452 0.5339169 0.3336378
sum(wts)
## [1] 1
port_returns <- (sum(wts * mean_ret) + 1)^252 - 1
port_returns
## [1] 0.2474924
port_risk <- sqrt(t(wts) %*% (cov_mat %*% wts))
print(port_risk)
## [,1]
## [1,] 0.2777969
sharpe_ratio <- port_returns/port_risk
print(sharpe_ratio)
## [,1]
## [1,] 0.8909114
wts <- runif(n = length(tick))
wts <- wts/sum(wts)
port_returns <- (sum(wts * mean_ret) + 1)^252 - 1
port_risk <- sqrt(t(wts) %*% (cov_mat %*% wts))
sharpe_ratio <- port_returns/port_risk
print(wts)
## [1] 0.2864699 0.2239194 0.4896108
print(port_returns)
## [1] 0.2041661
print(port_risk)
## [,1]
## [1,] 0.2355217
print(sharpe_ratio)
## [,1]
## [1,] 0.8668674
SIMULACION PARA LA OPTIMIZACION.
num_port <- 5000
#Creamos una matriz para almacenar los pesos aleatorios
all_wts <- matrix(nrow = num_port,
ncol = length(tick))
#Creamos el vector para almacenar la rentabilidad de la cartera
port_returns <- vector('numeric', length = num_port)
#Creamos el vector para almacenar la Desviacion Estandar
port_risk <- vector('numeric', length = num_port)
#Creamos el vector para almacenar el indice de Sharpe
sharpe_ratio <- vector('numeric', length = num_port)
#Ejecutamos el bucle 5000 veces
for (i in seq_along(port_returns)) {
wts <- runif(length(tick))
wts <- wts/sum(wts)
#Almacenamiento de peso en la matriz
all_wts[i,] <- wts
#Rentabilidad de la cartera
port_ret <- sum(wts * mean_ret)
port_ret <- ((port_ret + 1)^252) - 1
#Almacenamiento rentabilidad de la cartera
port_returns[i] <- port_ret
#Crear y almacenar el riesgo de la cartera
port_sd <- sqrt(t(wts) %*% (cov_mat %*% wts))
port_risk[i] <- port_sd
#Creacion y almacenamiento de Ratios Sharpe de
#cartera asumiendo una tasa libre de riesgo del 0%
sr <- port_ret/port_sd
sharpe_ratio[i] <- sr
}
portfolio_values <- tibble(Return = port_returns,
Risk = port_risk,
SharpeRatio = sharpe_ratio)
#Convertir una matriz en un tibble y cambiar los nombres de las columnas
all_wts <- tk_tbl(all_wts)
colnames(all_wts) <- colnames(log_ret_xts)
#Combinando todos los valores juntos
portfolio_values <- tk_tbl(cbind(all_wts, portfolio_values))
head(portfolio_values)
## # A tibble: 6 × 6
## DLTR FTNT TXN Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.442 0.350 0.207 0.203 0.251 0.808
## 2 0.190 0.531 0.279 0.242 0.275 0.881
## 3 0.230 0.719 0.0508 0.257 0.314 0.819
## 4 0.479 0.241 0.280 0.189 0.242 0.782
## 5 0.406 0.454 0.140 0.216 0.264 0.816
## 6 0.405 0.307 0.289 0.202 0.244 0.829
View(portfolio_values)
min_var <- portfolio_values[which.min(portfolio_values$Risk),]
min_var
## # A tibble: 1 × 6
## DLTR FTNT TXN Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.356 0.120 0.524 0.188 0.232 0.812
max_sr <- portfolio_values[which.max(portfolio_values$SharpeRatio),]
max_sr
## # A tibble: 1 × 6
## DLTR FTNT TXN Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.0886 0.391 0.520 0.238 0.261 0.910
p <- min_var %>%
gather(DLTR:TXN, key = Asset,
value = Weights) %>%
mutate(Asset = as.factor(Asset)) %>%
ggplot(aes(x = fct_reorder(Asset,Weights), y = Weights, fill = Asset)) +
geom_bar(stat = 'identity') +
theme_minimal() +
labs(x = 'Assets', y = 'Pesos', title = "Pesos del portafolio de varianza minima") +
scale_y_continuous(labels = scales::percent)
#veamos la cartera de tangencia o la cartera con el indice de
#nitidez mas alto
p <- max_sr %>%
gather(DLTR:TXN, key = Asset,
value = Weights) %>%
mutate(Asset = as.factor(Asset)) %>%
ggplot(aes(x = fct_reorder(Asset,Weights), y = Weights, fill = Asset)) +
geom_bar(stat = 'identity') +
theme_minimal() +
labs(x = 'Accion', y = 'Pesos optimos', title = "Distribucion Optima del Portafolio") +
scale_y_continuous(labels = scales::percent) +
# Agregar etiquetas de texto para los pesos
geom_text(aes(label = paste("Peso:", scales::percent(Weights,2))),
position = position_stack(vjust = 0.5), color = "white")
p
p <- portfolio_values %>%
ggplot(aes(x = Risk, y = Return, color = SharpeRatio)) +
geom_point() +
theme_classic() +
scale_y_continuous(labels = scales::percent) +
scale_x_continuous(labels = scales::percent) +
labs(x = 'Annualized Risk',
y = 'Annualized Returns',
title = "Optimizacion del portafolio y Frontera Eficiente") +
geom_point(aes(x = Risk,
y = Return), data = min_var, color = 'red') +
geom_point(aes(x = Risk,
y = Return), data = max_sr, color = 'red') +
annotate('text', x = 0.20, y = 0.42, label = "Portafolio de Tangencia") +
annotate('text', x = 0.18, y = 0.01, label = "Portafolio de varianza minima") +
annotate(geom = 'segment', x = 0.14, xend = 0.135, y = 0.01,
yend = 0.06, color = 'red', arrow = arrow(type = "open")) +
annotate(geom = 'segment', x = 0.22, xend = 0.2275, y = 0.405,
yend = 0.365, color = 'red', arrow = arrow(type = "open"))
p
PREGUNTAS PARTE 1.
El valor del riesgo del portafolio es 0.2753271.Este valor representa la volatilidad del portafolio, es decir, cuanto fluctua el valor del portafolio en relacion con su media. Un valor mas alto indica un mayor nivel de riesgo, lo que significa que el portafolio experimenta fluctuaciones mas amplias en su valor. Para interpretar este valor, es importante considerar la tolerancia del inversionistaal riesgo. Si es mas conservador, es posible que desee un riesgo mas bajo, mientras que si es más tolerante al riesgo, podria aceptar un riesgo mas alto en busca de mayores rendimientos.
El valor del indice de Sharpe es 0.8289797.El indice de Sharpe mide la relacion entre el rendimiento adicional obtenido por unidad de riesgo asumido. Un valor más alto indica un mejor rendimiento ajustado por riesgo. Este valor te proporciona una medida de la eficiencia del portafolio en terminos de como esta generando rendimientos en relacion con el nivel de riesgo asumido. Un Sharpe Ratio por encima de 1 es considerado bueno, mientras que por encima de 2 es excelente.
Para invertir los 10.000 USD, podriamos ajustar la asignacion de fondos entre los activos para equilibrar el rendimiento potencial con el nivel de riesgo que se esta dispuesto a asumir como inversionista.
El rendimiento del portafolio es de 0.2282406 y la volatilidad de 0.2753271, por lo tanto, para obtener este portafolio los pesos se tienen que distribuir de la siguiente forma: 8% aproximadamente en DLTR, 40% en FTNT, 0% en ISA y 52% en TXN.
El Sharpe optimo de la cartera de inversion es 0.8189793. Este valor indica que por cada unidad de riesgo asumida en el portafolio, se esta obteniendo un rendimiento de aproximadamente 0.8189793 unidades.Este Sharpe Ratio de 0.8189793 puede considerarse “optimo” en relacion con el nivel de riesgo asumido en el portafolio y las condiciones del mercado. El valor de varianza historica de cada activo es el siguiente: TXN=0.523: los rendimientos de TXN han experimentado una mayor dispersion en el pasado en comparacion con los otros dos activos. FTNT=0.394: tiene una varianza historica de 0.394, que es menor que la de TXN pero mayor que la de DLTR. Esto sugiere que FTNT ha experimentado una dispersion moderada en sus rendimientos en el pasado. DLTR=0.0826:DLTR tiene la varianza historica mas baja de 0.0826, lo que indica que los rendimientos de DLTR han sido relativamente menos volatiles en comparacion con TXN y FTNT.
PARTE 2: Creacion de Arboles binomiales a traves del modelo Cox-Ross-Rubinstein (CRR).
library(ggplot2)
library(derivmkts)
library(options)
library(Deriv)
library(quantmod)
library(OptionPricing)
# Especificacion de los simbolos bursátiles y el periodo de tiempo
symbols <- c('TXN', 'FTNT', 'DLTR')
start_date <- "2023-06-01"
end_date <- "2024-04-17"
# Obtenemos los precios historicos de acciones
getSymbols(symbols, src = "yahoo", from = "2023-06-01", to = "2024-04-17")
## [1] "TXN" "FTNT" "DLTR"
# Ver las filas mas recientes de los datos descargados
tail(TXN)
## TXN.Open TXN.High TXN.Low TXN.Close TXN.Volume TXN.Adjusted
## 2024-04-09 171.00 173.52 170.13 173.46 4830700 172.2188
## 2024-04-10 169.87 170.41 167.90 168.92 5662800 167.7112
## 2024-04-11 169.90 171.85 168.13 171.20 4352100 169.9749
## 2024-04-12 168.42 169.43 165.77 166.33 5472400 165.1398
## 2024-04-15 168.29 169.34 165.32 166.35 4739500 165.1596
## 2024-04-16 167.48 168.52 166.82 167.59 3389000 166.3907
tail(FTNT)
## FTNT.Open FTNT.High FTNT.Low FTNT.Close FTNT.Volume FTNT.Adjusted
## 2024-04-09 69.14 69.14 67.80 68.22 2799600 68.22
## 2024-04-10 67.08 68.50 67.08 68.13 3641300 68.13
## 2024-04-11 68.61 68.86 67.44 68.22 2917900 68.22
## 2024-04-12 67.47 67.72 65.93 66.45 5132600 66.45
## 2024-04-15 67.08 67.19 64.58 64.73 4911100 64.73
## 2024-04-16 64.62 65.57 64.26 64.48 3015000 64.48
tail(DLTR)
## DLTR.Open DLTR.High DLTR.Low DLTR.Close DLTR.Volume DLTR.Adjusted
## 2024-04-09 128.01 128.93 126.58 127.33 2093600 127.33
## 2024-04-10 125.46 129.26 124.91 128.73 2436800 128.73
## 2024-04-11 130.00 131.42 128.72 130.25 2005600 130.25
## 2024-04-12 129.15 129.63 124.98 125.19 3462800 125.19
## 2024-04-15 127.19 128.00 125.32 125.36 2201900 125.36
## 2024-04-16 124.81 125.72 123.34 124.06 1936700 124.06
#Crear la columna de precio de cierre ajustado
TXN= Ad(TXN)
FTNT= Ad(FTNT)
DLTR= Ad(DLTR)
s_txn = tail(TXN,1)
s_ftnt = tail(FTNT,1)
s_dltr = tail(DLTR,1)
s_txn = as.numeric(s_txn)
s_ftnt = as.numeric(s_ftnt)
s_dltr = as.numeric(s_dltr)
s_txn
## [1] 166.3907
s_ftnt
## [1] 64.48
s_dltr
## [1] 124.06
media_precios_txn <- mean(TXN)
media_precios_ftnt <- mean(FTNT)
media_precios_dltr <- mean(DLTR)
v_hist=0.2496516
bs_option_price_quantmod <- function(type, underlying, strike, expire, rate, volatility, div = 0) {
T <- expire
S <- underlying
K <- strike
r <- rate
sigma <- v_hist
D <- div
d1 <- (log(S / K) + (r - D + 0.5 * sigma^2) * T) / (sigma * sqrt(T))
d2 <- d1 - sigma * sqrt(T)
if (type == "call") {
option_price <- S * exp(-D * T) * pnorm(d1) - K * exp(-r * T) * pnorm(d2)
} else if (type == "put") {
option_price <- K * exp(-r * T) * pnorm(-d2) - S * exp(-D * T) * pnorm(-d1)
} else {
stop("Invalid option type. Use 'call' or 'put'.")
}
return(option_price)
}
underlying_price <- s_txn # Precio actual de la accion
strike_price <- 175 # Precio strike
time_to_expiry <- 0.25 # Tiempo vencimiento en años (son 90 dias)
risk_free_rate <- 0.0112584 # Tasa libre de riesgo
dividend_yield <- 0.0293 # Dividendos de la accion (2.93%)Los dividendos de TXN se pagan trimestralmente.
volatility <- v_hist # Volatilidad Historica
# Calculamos el precio de la opcion de compra de Black-Scholes para TXN
txn_bs_call_price <- bs_option_price_quantmod(type = "call",
underlying = underlying_price,
strike = strike_price,
expire = time_to_expiry,
rate = risk_free_rate,
volatility = v_hist,
div = dividend_yield)
# Imprimimos el resultado
print(paste("TXN Precio de opción de compra (con quantmod):", txn_bs_call_price))
## [1] "TXN Precio de opción de compra (con quantmod): 4.59141696444379"
black_scholes_with_rate_change <- function(S, K, T, r, r_new, sigma, type = "call") {
d1 <- (log(S / K) + ((r_new + (sigma^2) / 2) * T)) / (sigma * sqrt(T))
d2 <- d1 - sigma * sqrt(T)
if (type == "call") {
option_price <- S * pnorm(d1) - K * exp(-r_new * T) * pnorm(d2)
} else {
option_price <- K * exp(-r_new * T) * pnorm(-d2) - S * pnorm(-d1)
}
return(option_price)
}
# Establecer parametros
S <- s_txn # Precio actual de TXN
K <- 175 # Precio Strike
r <- 0.0112584 # Tasa libre de riesgo inicial
sigma <- v_hist #Volatilidad Historica
# Definir un rango de puntos de tiempo (por ejemplo, de 0 a 1 con incrementos de 0,1)
T <- seq(0, 1, 0.1)
# Calcule los precios de las opciones en diferentes momentos con la tasa de interess inicial
option_prices_initial_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r, sigma))
# Nueva tasa de interes (caida de 25 puntos basicos)
r_new <- r - 0.0025 # Ajuste por caida de 25 puntos basicos
# Calcular los precios de las opciones en diferentes momentos con la nueva tasa de interes
option_prices_new_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r_new, sigma))
# Crear un nuevo data frames para trazar
df_initial_rate <- data.frame(Time = T, OptionPrice = option_prices_initial_rate, RateType = "Initial Rate")
df_new_rate <- data.frame(Time = T, OptionPrice = option_prices_new_rate, RateType = "New Rate")
# Combinar los data frames
df_combined <- rbind(df_initial_rate, df_new_rate)
ggplot(df_combined, aes(x = Time, y = OptionPrice, color = RateType)) +
geom_line() +
labs(title = "Evolucion del precio de la opcion TXN a lo largo del tiempo con cambio de tasa de interes.",
x = "Tiempo hasta el vencimiento (anos)",
y = "Precio de la opcion") +
theme_minimal() +
scale_color_manual(values = c("blue", "red"))
underlying_price <- s_ftnt # Precio actual de la accion
strike_price <- 64 # Precio strike
time_to_expiry <- 0.25 # Tiempo vencimiento en años (son 90 dias)
risk_free_rate <- 0.0112584 # Tasa libre de riesgo
dividend_yield <- 0 # Dividendos de la accion - NO PAGA DIVIDENDOS A SUS ACCIONISTAS
volatility <- v_hist # Volatilidad Historica
# Calculamos el precio de la opcion de compra de Black-Scholes para FTNT
ftnt_bs_call_price <- bs_option_price_quantmod(type = "call",
underlying = underlying_price,
strike = strike_price,
expire = time_to_expiry,
rate = risk_free_rate,
volatility = v_hist,
div = dividend_yield)
# Imprimimos el resultado
print(paste("FTNT Precio de opcion de compra (con quantmod):", ftnt_bs_call_price))
## [1] "FTNT Precio de opcion de compra (con quantmod): 3.53325272180764"
black_scholes_with_rate_change <- function(S, K, T, r, r_new, sigma, type = "call") {
d1 <- (log(S / K) + ((r_new + (sigma^2) / 2) * T)) / (sigma * sqrt(T))
d2 <- d1 - sigma * sqrt(T)
if (type == "call") {
option_price <- S * pnorm(d1) - K * exp(-r_new * T) * pnorm(d2)
} else {
option_price <- K * exp(-r_new * T) * pnorm(-d2) - S * pnorm(-d1)
}
return(option_price)
}
# Establecer parametros
S <- s_ftnt # Precio actual de FTNT
K <- 64 # Precio Strike
r <- 0.0112584 # Tasa libre de riesgo inicial
sigma <- v_hist #Volatilidad Historica
# Definir un rango de puntos de tiempo (por ejemplo, de 0 a 1 con incrementos de 0,1)
T <- seq(0, 1, 0.1)
# Calcule los precios de las opciones en diferentes momentos con la tasa de interes inicial
option_prices_initial_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r, sigma))
# Nueva tasa de interes (caida de 25 puntos basicos)
r_new <- r - 0.0025 # Ajuste por caida de 25 puntos basicos
# Calcular los precios de las opciones en diferentes momentos con la nueva tasa de interes
option_prices_new_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r_new, sigma))
# Crear un nuevo data frames para trazar
df_initial_rate <- data.frame(Time = T, OptionPrice = option_prices_initial_rate, RateType = "Initial Rate")
df_new_rate <- data.frame(Time = T, OptionPrice = option_prices_new_rate, RateType = "New Rate")
# Combinar los data frames
df_combined <- rbind(df_initial_rate, df_new_rate)
ggplot(df_combined, aes(x = Time, y = OptionPrice, color = RateType)) +
geom_line() +
labs(title = "Evolucion del precio de la opcion FTNT a lo largo del tiempo con cambio de tasa de interes.",
x = "Tiempo hasta el vencimiento (anos)",
y = "Precio de la opcion") +
theme_minimal() +
scale_color_manual(values = c("blue", "red"))
underlying_price <- s_dltr # Precio actual de la accion
strike_price <- 120 # Precio strike
time_to_expiry <- 0.25 # Tiempo vencimiento en años (son 90 dias)
risk_free_rate <- 0.0112584 # Tasa libre de riesgo
dividend_yield <- 0 # Dividendos de la accion - NO PAGA DIVIDENDOS A SUS ACCIONISTAS
volatility <- v_hist # Volatilidad Historica
# Calculamos el precio de la opcion de compra de Black-Scholes para DLTR
dltr_bs_call_price <- bs_option_price_quantmod(type = "call",
underlying = underlying_price,
strike = strike_price,
expire = time_to_expiry,
rate = risk_free_rate,
volatility = v_hist,
div = dividend_yield)
# Imprimimos el resultado
print(paste("DLTR Precio de opcion de compra:", dltr_bs_call_price))
## [1] "DLTR Precio de opcion de compra: 8.51452389650376"
# Funcion para calcular el precio de la opcion Black-Scholes con tasa de interes variable
black_scholes_with_rate_change <- function(S, K, T, r, r_new, sigma, type = "call") {
d1 <- (log(S / K) + ((r_new + (sigma^2) / 2) * T)) / (sigma * sqrt(T))
d2 <- d1 - sigma * sqrt(T)
if (type == "call") {
option_price <- S * pnorm(d1) - K * exp(-r_new * T) * pnorm(d2)
} else {
option_price <- K * exp(-r_new * T) * pnorm(-d2) - S * pnorm(-d1)
}
return(option_price)
}
# Establecer parametros
S <- s_dltr # Precio actual de DLTR
K <- 120 # Precio Strike
r <- 0.0112584 # Tasa libre de riesgo inicial
sigma <- v_hist #Volatilidad Historica
# Definir un rango de puntos de tiempo (por ejemplo, de 0 a 1 con incrementos de 0,1)
T <- seq(0, 1, 0.1)
# Calcule los precios de las opciones en diferentes momentos con la tasa de interes inicial
option_prices_initial_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r, sigma))
# Nueva tasa de interes (caida de 25 puntos basicos)
r_new <- r - 0.0025 # Ajuste por caida de 25 puntos basicos
# Calcular los precios de las opciones en diferentes momentos con la nueva tasa de interes
option_prices_new_rate <- sapply(T, function(t) black_scholes_with_rate_change(S, K, t, r, r_new, sigma))
# Crear un nuevo data frames para trazar
df_initial_rate <- data.frame(Time = T, OptionPrice = option_prices_initial_rate, RateType = "Initial Rate")
df_new_rate <- data.frame(Time = T, OptionPrice = option_prices_new_rate, RateType = "New Rate")
# Combinar los data frames
df_combined <- rbind(df_initial_rate, df_new_rate)
ggplot(df_combined, aes(x = Time, y = OptionPrice, color = RateType)) +
geom_line() +
labs(title = "Evolucion del precio de la opcion DLTR a lo largo del tiempo con cambio de tasa de interes.",
x = "Tiempo hasta el vencimiento (anos)",
y = "Precio de la opcion") +
theme_minimal() +
scale_color_manual(values = c("blue", "red"))
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_txn <- s_txn
strike_price_txn <- 175
time_to_expiry_txn <- 0.25
risk_free_rate_txn <- 0.0112584
dividend_yield_txn <- 0.0293/0.25
volatility_txn <- v_hist
n_txn <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de TXN utilizando un modelo similar al CRR
txn_crr_price <- crr_option_price(underlying_price_txn,
strike_price_txn, time_to_expiry_txn,
risk_free_rate_txn, volatility_txn, n_txn)
# Imprimir el resultado
print(txn_crr_price)
## [1] 5.672842
s <- s_txn # Precio actual de las acciones
k <- 175 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.25239 0.4920126 0.9591363
## [2,] 0.00000 0.0000000 0.0000000
## [3,] 0.00000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 2.920046
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 3.523129
# Creando un modelo de arbol binomial opcion PUT CRR para TXN
s <- s_txn # Precio actual de las acciones
k <- 177.5 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.2282623 0.4449777 0.8674458
## [2,] 0.0000000 0.0000000 0.0000000
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -35.33984 -73.38939 -152.406
## [2,] 0.00000 0.00000 0.000
## [3,] 0.00000 0.00000 0.000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 18.05578
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 17.98426
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_ftnt <- s_ftnt
strike_price_ftnt <- 64
time_to_expiry_ftnt <- 0.25
risk_free_rate_ftnt <- 0.0112584
dividend_yield_ftnt <- 0
volatility_ftnt <- v_hist
n_ftnt <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de FTNT utilizando un modelo similar al CRR
ftnt_crr_price <- crr_option_price(underlying_price_txn,
strike_price_ftnt, time_to_expiry_ftnt,
risk_free_rate_ftnt, volatility_ftnt, n_ftnt)
# Imprimir el resultado
print(ftnt_crr_price)
## [1] 104.2312
s <- s_ftnt # Precio actual de las acciones
k <- 64 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.5624264 0.8018775 1.0000000
## [2,] 0.0000000 0.3050813 0.5889496
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 3.794328
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='FTNT CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 3.799584
s <- s_ftnt # Precio actual de las acciones
k <- 65 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.5088949 0.7502071 1.0000000
## [2,] 0.0000000 0.2495497 0.4817476
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -29.49088 -46.25684 -64.93905
## [2,] 0.00000 -13.94415 -28.95747
## [3,] 0.00000 0.00000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 3.659965
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='FTNT CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 3.655497
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_dltr <- s_dltr
strike_price_dltr <- 120
time_to_expiry_dltr <- 0.25
risk_free_rate_dltr <- 0.0112584
dividend_yield_dltr <- 0
volatility_dltr <- v_hist
n_dltr <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de FTNT utilizando un modelo similar al CRR
dltr_crr_price <- crr_option_price(underlying_price_dltr,
strike_price_dltr, time_to_expiry_dltr,
risk_free_rate_dltr, volatility_dltr, n_dltr)
# Imprimir el resultado
print(dltr_crr_price)
## [1] 9.634682
s <- s_dltr # Precio actual de las acciones
k <- 120 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.649692 0.8861093 1.0000000
## [2,] 0.000000 0.3956076 0.7637076
## [3,] 0.000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 8.779688
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 8.820299
# Creando un modelo de arbol binomial opcion PUT CRR para DLTR
s <- s_dltr # Precio actual de las acciones
k <- 122 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- v_hist # Volatilidad
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.5940462 0.8323980 1.0000000
## [2,] 0.0000000 0.3378826 0.6522714
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -65.86102 -97.73232 -121.88559
## [2,] 0.00000 -36.32515 -75.43557
## [3,] 0.00000 0.00000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 5.433456
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 5.454619
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_txn <- s_txn
strike_price_txn <- 175
time_to_expiry_txn <- 0.25
risk_free_rate_txn <- 0.0112584
dividend_yield_txn <- 0.0293/0.25
volatility_txn <- 0.2697/0.25
n_txn <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de TXN utilizando un modelo similar al CRR
txn_crr_price <- crr_option_price(underlying_price_txn,
strike_price_txn, time_to_expiry_txn,
risk_free_rate_txn, volatility_txn, n_txn)
# Imprimir el resultado
print(txn_crr_price)
## [1] 69.25294
s <- s_txn # Precio actual de las acciones
k <- 175 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- 0.2697/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.5372886 0.7530015 0.9902809
## [2,] 0.0000000 0.2552346 0.4465091
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 32.16549
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 32.36876
# Creando un modelo de arbol binomial opcion PUT CRR para TXN
s <- s_txn # Precio actual de las acciones
k <- 177.5 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- 0.2621/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.5204509 0.7389192 0.9902809
## [2,] 0.0000000 0.2367893 0.4157844
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -56.45585 -104.13510 -177.33355
## [2,] 0.00000 -21.31971 -50.22167
## [3,] 0.00000 0.00000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 45.55725
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 45.81891
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_ftnt <- s_ftnt
strike_price_ftnt <- 64
time_to_expiry_ftnt <- 0.25
risk_free_rate_ftnt <- 0.0112584
dividend_yield_ftnt <- 0
volatility_ftnt <- 0.9990/0.25
n_ftnt <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de FTNT utilizando un modelo similar al CRR
ftnt_crr_price <- crr_option_price(underlying_price_txn,
strike_price_ftnt, time_to_expiry_ftnt,
risk_free_rate_ftnt, volatility_ftnt, n_ftnt)
# Imprimir el resultado
print(ftnt_crr_price)
## [1] 2481.554
s <- s_ftnt # Precio actual de las acciones
k <- 64 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- 0.9990/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.8563284 0.9433359 1.0000000
## [2,] 0.0000000 0.5805661 0.7637439
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 45.87916
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 45.87936
# Creando un modelo de arbol binomial opcion PUT CRR para FTNT
s <- s_ftnt # Precio actual de las acciones
k <- 65 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- 1.0010/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.8548152 0.9422399 1.0000000
## [2,] 0.0000000 0.5770899 0.7587509
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -9.324416 -27.257708 -64.93905
## [2,] 0.000000 -3.690735 -15.42971
## [3,] 0.000000 0.000000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 46.13138
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='FTNT CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 46.13121
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_dltr <- s_dltr
strike_price_dltr <- 120
time_to_expiry_dltr <- 0.25
risk_free_rate_dltr <- 0.0112584
dividend_yield_dltr <- 0
volatility_dltr <- 0.2788/0.25
n_dltr <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de FTNT utilizando un modelo similar al CRR
dltr_crr_price <- crr_option_price(underlying_price_dltr,
strike_price_dltr, time_to_expiry_dltr,
risk_free_rate_dltr, volatility_dltr, n_dltr)
# Imprimir el resultado
print(dltr_crr_price)
## [1] 61.31284
s <- s_dltr # Precio actual de las acciones
k <- 120 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- 0.2788/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.6450422 0.8461651 1.0000000
## [2,] 0.0000000 0.3675350 0.6339054
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 31.12264
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 31.13137
# Creando un modelo de arbol binomial opcion PUT CRR para DLTR
s <- s_dltr # Precio actual de las acciones
k <- 122 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- 0.2578/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parámetros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.6256859 0.8320784 1.0000000
## [2,] 0.0000000 0.3477302 0.6059329
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -49.39049 -83.95240 -121.8856
## [2,] 0.00000 -23.80776 -55.9229
## [3,] 0.00000 0.00000 0.0000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 25.8292
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 25.83415
Se evidencia que la valuacion con volatilidad implicita para CALL y PUT es mucho mayor que la valuacion con volatilidad historica de la serie.
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_txn <- s_txn
strike_price_txn <- 150
time_to_expiry_txn <- 0.25
risk_free_rate_txn <- 0.0112584
dividend_yield_txn <- 0.0293/0.25
volatility_txn <- 1.0210/0.25
n_txn <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de TXN utilizando un modelo similar al CRR
txn_crr_price <- crr_option_price(underlying_price_txn,
strike_price_txn, time_to_expiry_txn,
risk_free_rate_txn, volatility_txn, n_txn)
# Imprimir el resultado
print(txn_crr_price)
## [1] 2640.822
s <- s_txn # Precio actual de las acciones
k <- 150 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- 1.0210/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.8440094 0.9322126 0.9902809
## [2,] 0.0000000 0.5924774 0.7823281
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 118.0296
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 117.9818
# Creando un modelo de arbol binomial opcion PUT CRR para TXN
s <- s_txn # Precio actual de las acciones
k <- 115 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0.0293/0.25 # Tasa yield
v <- 1.3164/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.9075977 0.9608097 0.9902809
## [2,] 0.0000000 0.7139262 0.8786021
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -12.92676 -46.349926 -114.89216
## [2,] 0.00000 -5.631857 -31.41266
## [3,] 0.00000 0.000000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 91.17965
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 91.09124
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_ftnt <- s_ftnt
strike_price_ftnt <- 45
time_to_expiry_ftnt <- 0.25
risk_free_rate_ftnt <- 0.0112584
dividend_yield_ftnt <- 0
volatility_ftnt <- 1.9766/0.25
n_ftnt <- 3 # Numero de periodos
# Calcular el precio de la opcion de compra de FTNT utilizando un modelo similar al CRR
ftnt_crr_price <- crr_option_price(underlying_price_txn,
strike_price_ftnt, time_to_expiry_ftnt,
risk_free_rate_ftnt, volatility_ftnt, n_ftnt)
# Imprimir el resultado
print(ftnt_crr_price)
## [1] 116969.4
s <- s_ftnt # Precio actual de las acciones
k <- 45 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- 1.9766/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.9811361 0.9943298 1.0000000
## [2,] 0.0000000 0.8518390 0.9387614
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 61.84102
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='TXN CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 61.84197
# Creando un modelo de arbol binomial opcion PUT CRR para FTNT
s <- s_ftnt # Precio actual de las acciones
k <- 35 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- 1.5938/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcon y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.9664966 0.9914645 1.0000000
## [2,] 0.0000000 0.8092281 0.9377012
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -2.925092 -13.078027 -34.96718
## [2,] 0.000000 -1.316393 -9.61713
## [3,] 0.000000 0.000000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 29.81624
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='FTNT CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 29.81943
crr_option_price <- function(S0, X, T, r, sigma, n, type = "call") {
delta_t <- T / n
u <- exp(sigma * sqrt(delta_t))
d <- 1 / u
p <- (exp(r * delta_t) - d) / (u - d)
# Generar precios de acciones al vencimiento
ST <- S0 * u^(n:0) * d^(0:n)
# Calcular los pagos de las opciones al vencimiento
payoff <- pmax(ST - X, 0) # Para una opcion call
# Induccion hacia atras para calcular el precio de la opcion en t=0
for (i in (n - 1):0) {
payoff <- exp(-r * delta_t) * (p * payoff[2:(i + 2)] + (1 - p) * payoff[1:(i + 1)])
}
return(payoff[1])
}
underlying_price_dltr <- s_dltr
strike_price_dltr <- 100
time_to_expiry_dltr <- 0.25
risk_free_rate_dltr <- 0.0112584
dividend_yield_dltr <- 0
volatility_dltr <- 0.9131/0.25
n_dltr <- 3 # Numero de periodos
# Calcular el precio de la opcon de compra de FTNT utilizando un modelo similar al CRR
dltr_crr_price <- crr_option_price(underlying_price_dltr,
strike_price_dltr, time_to_expiry_dltr,
risk_free_rate_dltr, volatility_dltr, n_dltr)
# Imprimir el resultado
print(dltr_crr_price)
## [1] 1259.507
s <- s_dltr # Precio actual de las acciones
k <- 100 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa de riesgo
d <- 0 # Tasa yield
v <- 0.9131/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)
# Calcular el precio de la opcion de compra Europea
europea_call_option_price <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE, putopt = FALSE, returntrees = TRUE, returnparams = TRUE)[[1]]
# Acceder a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Imprima o use estos parametros segun sea necesario (tiempo de retorno 0 delta, gamma y theta en los vectores griegos)
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.8640266 0.9533392 1.0000000
## [2,] 0.0000000 0.6076881 0.8194165
## [3,] 0.0000000 0.0000000 0.0000000
# Imprimir precios de opciones
cat("Precio opcion Call Europea", europea_call_option_price, "\n")
## Precio opcion Call Europea 86.95916
binomplot(s, k, v, r, tt, d, nstep, putopt = FALSE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 86.96948
# Creando un modelo de arbol binomial opcion PUT CRR para DLTR
s <- s_dltr # Precio actual de las acciones
k <- 105 # Precio Strike
tt <- 0.25 # Tiempo de vencimiento (Años)
r <- 0.0112584 # Tasa libre de riesgo
d <- 0 # Tasa yield
v <- 0.8398/0.25 # Volatilidad implicita
nstep <- 3 # Numero de pasos en el arbol binomial
# Calcular el precio de la opcion y la informacion asociada.
result <- binomopt(s, k, v, r, tt, d, nstep, american = FALSE,
putopt = FALSE, returntrees = TRUE,
returnparams = TRUE)
# Calcular el precio de la opcion de venta Europea
europea_put_option_price <- binomopt(s, k, v, r, tt, d, nstep,
american = FALSE, putopt = TRUE,
returntrees = TRUE, returnparams = TRUE)[[1]]
# Accediendo a los parametros devueltos
oppricretree <- result$oppricretree
delta <- result$delta
bond <- result$bond
# Parametros segun sea necesario
print(oppricretree)
## NULL
print(delta)
## [,1] [,2] [,3]
## [1,] 0.8423415 0.9434061 1.0000000
## [2,] 0.0000000 0.5758139 0.7941569
## [3,] 0.0000000 0.0000000 0.0000000
print(bond)
## [,1] [,2] [,3]
## [1,] -22.80944 -55.9273 -104.90154
## [2,] 0.00000 -10.2810 -37.42915
## [3,] 0.00000 0.0000 0.00000
# Imprimir precios de opciones
cat("Precio opcion PUT Europea:", europea_put_option_price, "\n")
## Precio opcion PUT Europea: 62.33633
binomplot(s, k, v, r, tt, d, nstep, putopt = TRUE, american = FALSE,
plotvalues= TRUE, plotarrows= TRUE, drawstrike= TRUE, pointsize= 3, ylimval=c(0,0),
saveplot= FALSE, saveplotfn='DLTR CRR Plots.png',
crr= TRUE, jarrowrudd= FALSE, titles = TRUE, specifyupdn = FALSE,
returnprice = TRUE, logy = FALSE)
## [1] 62.34584
PARTE 3: Creacion de coberturas.
prices_txn <- seq(150,215,1) # Vector de precios
strike_txn <- 175 # Precio strike
premium_call_txn <- 3.8 # Precio opcion call
premium_put_txn <- 4.05 # Precio opcion put
# payoff al vencimiento opcion call
intrinsicValuesCall_txn <- prices_txn - strike_txn - premium_call_txn
payoffLongCall_txn <- pmax(-premium_call_txn,intrinsicValuesCall_txn)
# payoff al vencimiento opcion put
intrinsicValuesPut_txn <- strike_txn - prices_txn - premium_put_txn
payoffLongPut_txn <- pmax(-premium_put_txn,intrinsicValuesPut_txn)
# El payoff de la estrategia es la suma de las opciones call y put
# Se necesita la suma elemento por elemento
payoff_txn <- rowSums(cbind(payoffLongCall_txn,payoffLongPut_txn))
results_txn <- data.frame(cbind(prices_txn,payoffLongCall_txn,payoffLongPut_txn,payoff_txn))
ggplot(results_txn, aes(x=prices_txn)) +
geom_line(aes(y = payoffLongCall_txn, color = "LongCall")) +
geom_line(aes(y = payoffLongPut_txn, color="LongPut"))+
geom_line(aes(y=payoff_txn, color = 'Payoff')) +
scale_colour_manual("",
breaks = c("LongCall", "LongPut", "Payoff"),
values = c("darkred", "darkblue", "darkgreen")) + ylab("Payoff")+
ggtitle("Long Straddle Payoff TXN")
prices_ftnt <- seq(35,95,1) # Vector de precios
strike_ftnt <- 64 # Precio strike
premium_call_ftnt <- 3.55 # Precio opcion call
premium_put_ftnt <- 3.7 # Precio opcion put
# payoff al vencimiento opcion call
intrinsicValuesCall_ftnt <- prices_ftnt - strike_ftnt - premium_call_ftnt
payoffLongCall_ftnt <- pmax(-premium_call_ftnt,intrinsicValuesCall_ftnt)
# payoff al vencimiento opcion put
intrinsicValuesPut_ftnt <- strike_ftnt - prices_ftnt - premium_put_ftnt
payoffLongPut_ftnt <- pmax(-premium_put_ftnt,intrinsicValuesPut_ftnt)
# El payoff de la estrategia es la suma de las opciones call y put
# Se necesita la suma elemento por elemento
payoff_ftnt <- rowSums(cbind(payoffLongCall_ftnt,payoffLongPut_ftnt))
results_ftnt <- data.frame(cbind(prices_ftnt,payoffLongCall_ftnt,payoffLongPut_ftnt,payoff_ftnt))
ggplot(results_ftnt, aes(x=prices_ftnt)) +
geom_line(aes(y = payoffLongCall_ftnt, color = "LongCall")) +
geom_line(aes(y = payoffLongPut_ftnt, color="LongPut"))+
geom_line(aes(y=payoff_ftnt, color = 'Payoff')) +
scale_colour_manual("",
breaks = c("LongCall", "LongPut", "Payoff"),
values = c("darkred", "darkblue", "darkgreen")) + ylab("Payoff")+
ggtitle("Long Straddle Payoff FTNT")
prices_dltr <- seq(100,165,1) # Vector de precios
strike_dltr <- 120 # Precio strike
premium_call_dltr <- 2.62 # Precio opcion call
premium_put_dltr <- 2.86 # Precio opcion put
# payoff al vencimiento opcion call
intrinsicValuesCall_dltr <- prices_dltr - strike_dltr - premium_call_dltr
payoffLongCall_dltr <- pmax(-premium_call_dltr,intrinsicValuesCall_dltr)
# payoff al vencimiento opcion put
intrinsicValuesPut_dltr <- strike_dltr - prices_dltr - premium_put_dltr
payoffLongPut_dltr <- pmax(-premium_put_dltr,intrinsicValuesPut_dltr)
# El payoff de la estrategia es la suma de las opciones call y put
# Se necesita la suma elemento por elemento
payoff_dltr <- rowSums(cbind(payoffLongCall_dltr,payoffLongPut_dltr))
payoff_dltr
## [1] 14.52 13.52 12.52 11.52 10.52 9.52 8.52 7.52 6.52 5.52 4.52 3.52
## [13] 2.52 1.52 0.52 -0.48 -1.48 -2.48 -3.48 -4.48 -5.48 -4.48 -3.48 -2.48
## [25] -1.48 -0.48 0.52 1.52 2.52 3.52 4.52 5.52 6.52 7.52 8.52 9.52
## [37] 10.52 11.52 12.52 13.52 14.52 15.52 16.52 17.52 18.52 19.52 20.52 21.52
## [49] 22.52 23.52 24.52 25.52 26.52 27.52 28.52 29.52 30.52 31.52 32.52 33.52
## [61] 34.52 35.52 36.52 37.52 38.52 39.52
results_dltr <- data.frame(cbind(prices_dltr,payoffLongCall_dltr,payoffLongPut_dltr,payoff_dltr))
ggplot(results_dltr, aes(x=prices_dltr)) +
geom_line(aes(y = payoffLongCall_dltr, color = "LongCall")) +
geom_line(aes(y = payoffLongPut_dltr, color="LongPut"))+
geom_line(aes(y=payoff_dltr, color = 'Payoff')) +
scale_colour_manual("",
breaks = c("LongCall", "LongPut", "Payoff"),
values = c("darkred", "darkblue", "darkgreen")) + ylab("Payoff")+
ggtitle("Long Straddle Payoff DLTR")
Los beneficios que nos brinda esta estrategia de cobertura es que es neutral en cuanto a la direccion del movimiento del precio del activo subyacente. Esto significa que podemos obtener ganancias independientemente de si el precio del activo subyacente aumenta o disminuye, siempre y cuando el movimiento sea lo suficientemente significativo para superar el costo de ambas opciones.
La estrategia de Straddle ofrece flexibilidad en cuanto a la duracion de la posicion.
La estrategia de Straddle se beneficia de un aumento en la volatilidad del activo subyacente y es por esta razon, ante unas volatilidades extremas, podemos cubrirnos mejor.
LABORATORIO #4
En este capitulo valoraremos opciones CALL y PUT de la base de datos de 2 acciones. Adicional, se realizará una estrategia de inversión con SWAPS para una inversión de 100 millones de dólares.
Valore los precios de las opciones mediante el modelo de Black, Scholes y Merton. Calcule y analice las griegas.
library(tidyquant)
library(xts)
#Descargamos los datos
getSymbols("TXN", from=as.Date("2019-05-27"), to=as.Date("2024-05-28"), src="yahoo", interval="daily")
## [1] "TXN"
getSymbols("FTNT", from=as.Date("2019-05-27"), to=as.Date("2024-05-28"), src="yahoo", interval="daily")
## [1] "FTNT"
#Crear la columna de precio de cierre
txn= Ad(TXN)
ftnt= Ad(FTNT)
mean(txn)
## [1] 148.8528
#Calcular el retorno de la accion
r_txn= diff(log(txn))
r_ftnt= diff(log(ftnt))
plot(r_txn, type="l")
plot(r_ftnt, type="l")
mu_txn=mean(txn)
sigma_txn=sd(txn)
mu_ftnt=mean(ftnt)
sigma_ftnt=sd(ftnt)
set.seed(123) #Establecer una semilla
t=1 #Periodo de tiempo
n=360 #Numero de pasos de tiempo (dias de negociacion)
dt=t/n # Tamaño del paso del tiempo
time=seq(0,t,by=dt) # Vector de tiempo
N=10000
W=c(0, cumsum(sqrt(dt)*rnorm(n)))
S_txn=exp((mu_txn-0.5*sigma_txn^2)*dt+sigma_txn*W*sqrt(dt))
plot(time,S_txn, type="l", col="blue", xlab="Tiempo", ylab="Precio", main="Movimiento Brawniano")
p_inicial_txn=as.double(last(txn))
pron_txn=p_inicial_txn*S_txn
plot(time, pron_txn, type="l", col="blue", xlab="Tiempo", ylab="Precio", main="Simulacion Proceso MBG")
strike_txn=last(pron_txn) #1año
strike_txn=pron_txn[30] #1 mes
strike_txn
## [1] 90.20805
Formula: Call=S0(Nd1)-kexp(-rT)N(d2)
s0_txn=as.double(last(txn))
vencimiento=30
v=vencimiento/n
r= 0.004368 #TES de USA a 1 mes
k_pte_txn=strike_txn*exp(-sigma_txn*v)
# Calcular ND1 y ND2 de txn (Cantidad)
nd1_txn=(log(s0_txn/strike_txn)+(mu_txn+sigma_txn^2/2)*v)/(sigma_txn*sqrt(v))
nd2_txn=nd1_txn-sigma_txn*sqrt(v)
C_txn=s0_txn*nd1_txn-strike_txn*exp(-r*v)*nd2_txn
C_txn
## [1] 1309.26
#Definicion de parametros
t=1
n=360 # #de dias en un año (Iteraciones)
dt=t/n
r= 0.004368 #TES de USA a 1 mes
time=seq(0,t,by=dt)
mu_txn
## [1] 148.8528
sigma_txn
## [1] 26.91555
s0_txn<-as.double(last(txn))
set.seed(123) #Establecer una semilla
simul_txn=200 # #de simulaciones
simulaciones_txn=matrix(0,nrow=n+1,ncol=simul_txn)
#Crear vector que contenga los valores promedio (valores mas probables)
most_probable_values_txn=numeric(simul_txn)
for(i in 1:simul_txn) {
W_txn=c(0, cumsum(sqrt(dt)*rnorm(n)))
S_txn=exp((mu_txn-0.5*sigma_txn^2)*time+sigma_txn*W*sqrt(time))
simulaciones_txn[,i]=S_txn*s0_txn
most_probable_values_txn[i]=mean(simulaciones_txn[,i])
}
confidence_interval_txn=quantile(most_probable_values_txn, c(0.05,0.95))
plot.new()
matplot(simulaciones_txn, type="l",xlab="Tiempo",ylab="Valor", main="Simulaciones de proceso MBG accion txn")
cat("95% Confidence Interval:",confidence_interval_txn, "\n")
## 95% Confidence Interval: 1.252025 1.252025
most_probable_txn=mean(most_probable_values_txn)
cat("Most Probable Value action TXN:",most_probable_txn, "\n")
## Most Probable Value action TXN: 1.252025
coef_variacion_txn=sd(txn)/mean(txn)*100
W=c(0, cumsum(sqrt(dt)*rnorm(n)))
S_ftnt=exp((mu_ftnt-0.5*sigma_ftnt^2)*dt+sigma_ftnt*W*sqrt(dt))
plot(time,S_ftnt, type="l", col="blue", xlab="Tiempo", ylab="Precio", main="Movimiento Brawniano")
p_inicial_ftnt=as.double(last(ftnt))
#Calcular el pronostico
pron_ftnt=p_inicial_ftnt*S_ftnt
plot(time, pron_ftnt, type="l", col="blue", xlab="Tiempo", ylab="Precio", main="Simulacion Proceso MBG")
strike_ftnt=last(pron_ftnt) # 1año
strike_ftnt=pron_ftnt[30] # 1 mes
strike_ftnt
## [1] 32.31254
Formula: Call=S0(Nd1)-kexp(-rT)*N(d2)
s0_ftnt=as.double(last(ftnt))
vencimiento=30
v=vencimiento/n
r= 0.004368 #TES de USA a 1 mes
k_pte_ftnt=strike_ftnt*exp(-sigma_ftnt*v)
nd1_ftnt=(log(s0_ftnt/strike_ftnt)+(mu_ftnt+sigma_ftnt^2/2)*v)/(sigma_ftnt*sqrt(v))
nd2_ftnt=nd1_ftnt-sigma_ftnt*sqrt(v)
C_ftnt=s0_ftnt*nd1_ftnt-strike_ftnt*exp(-r*v)*nd2_ftnt
C_ftnt
## [1] 279.5544
t=1
n=360 # #de dias en un año (Iteraciones)
dt=t/n
r= 0.004368 #TES de USA a 1 mes
time=seq(0,t,by=dt)
mu_ftnt
## [1] 45.81298
sigma_ftnt
## [1] 18.92744
s0_ftnt<-as.double(last(ftnt))
#Proceso de simulacton
set.seed(123) #Establecer una semilla
simul_ftnt=200 # #de simulaciones
simulaciones_ftnt=matrix(0,nrow=n+1,ncol=simul_ftnt)
most_probable_values_ftnt=numeric(simul_ftnt)
for(i in 1:simul_ftnt) {
W_ftnt=c(0, cumsum(sqrt(dt)*rnorm(n)))
S_ftnt=exp((mu_ftnt-0.5*sigma_ftnt^2)*time+sigma_ftnt*W*sqrt(time))
simulaciones_ftnt[,i]=S_ftnt*s0_ftnt
most_probable_values_ftnt[i]=mean(simulaciones_ftnt[,i])
}
confidence_interval_ftnt=quantile(most_probable_values_ftnt, c(0.05,0.95))
plot.new()
matplot(simulaciones_ftnt, type="l",xlab="Tiempo",ylab="Valor", main="Simulaciones de proceso MBG accion ftnt")
cat("95% Confidence Interval:",confidence_interval_ftnt, "\n")
## 95% Confidence Interval: 0.5007883 0.5007883
most_probable_ftnt=mean(most_probable_values_ftnt)
cat("Most Probable Value action FTNT:",most_probable_ftnt, "\n")
## Most Probable Value action FTNT: 0.5007883
coef_variacion_ftnt=sd(ftnt)/mean(ftnt)*100
P_txn=strike_txn*exp(-mu_txn*v)*(-nd2_txn)-s0_txn*(-nd1_txn)
P_txn
## [1] 1112.092
P_ftnt=strike_ftnt*exp(-mu_ftnt*v)*(-nd2_ftnt)-s0_txn*(-nd1_ftnt)
P_ftnt
## [1] 708.0525
nd1_txn <- (log(s0_txn/strike_txn) + (r*sigma_txn^2)*v)/(sigma_txn*sqrt(v))
delta_txn <- pnorm(nd1_txn)
gamma_txn <- dnorm(nd1_txn)/(s0_txn*sigma_txn*sqrt(v))
theta_txn <- -(s0_txn*dnorm(nd1_txn)*sigma_txn/(2*sqrt(v))+r*strike_txn*exp(-r*v)*pnorm(nd2_txn))
vega_txn <- s0_txn*dnorm(nd1_txn)*sqrt(v)
print(paste("Delta:", delta_txn))
## [1] "Delta: 0.55404302572819"
print(paste("Gamma:", gamma_txn))
## [1] "Gamma: 0.000255412551522219"
print(paste("Theta:", theta_txn))
## [1] "Theta: -3670.37930307621"
print(paste("Vega:", vega_txn))
## [1] "Vega: 22.7277121310585"
nd1_ftnt <- (log(s0_ftnt/strike_ftnt) + (r*sigma_ftnt^2)*v)/(sigma_ftnt*sqrt(v))
delta_ftnt <- pnorm(nd1_ftnt)
gamma_ftnt <- dnorm(nd1_ftnt)/(s0_ftnt*sigma_ftnt*sqrt(v))
theta_ftnt <- -(s0_ftnt*dnorm(nd1_ftnt)*sigma_ftnt/(2*sqrt(v))+r*strike_ftnt*exp(-r*v)*pnorm(nd2_ftnt))
vega_ftnt <- s0_ftnt*dnorm(nd1_ftnt)*sqrt(v)
print(paste("Delta:", delta_ftnt))
## [1] "Delta: 0.556147064579532"
print(paste("Gamma:", gamma_ftnt))
## [1] "Gamma: 0.00117832320570355"
print(paste("Theta:", theta_ftnt))
## [1] "Theta: -794.418636322641"
print(paste("Vega:", vega_ftnt))
## [1] "Vega: 6.99526493466747"
#Definimos los precios de las opciones con vencimiento a 30 dias
Stcall_txn = 212.5
Stput_txn = 187.5
black_scholes_merton <- function(So, K, r, VencimientoDias, sigma, Stcall_txn, Stput_txn) {
Ano <- 360
#Definir los vencimientos a partir de un número de días establecido
vencimiento = seq(from = vencimiento, by = 30, length.out = 6)
#Definir un conjunto de Volatilidad a partir de un valor sigma inicial
sigma_txn = seq(from = sigma_txn, by = 0.05, length.out = 6)
## Cálculo del vencimiento
T <- vencimiento / Ano
#Definir d1 y d2
d1_txn <- (log(s0_txn/strike_txn) + (r + ((sigma_txn^2)/2)) * T) / (sigma_txn * sqrt(T))
d2_txn <- (log(s0_txn/strike_txn) + (r - ((sigma_txn^2)/2)) * T) / (sigma_txn * sqrt(T))
# Definir N1 y N2 para la posición Call y Put
Nd1_txn <- pnorm(d1_txn)
Nd2_txn <- pnorm(d2_txn)
Nd1P_txn <- pnorm(-d1_txn)
Nd2P_txn <- pnorm(-d2_txn)
#Valoración Call
Call_txn <- s0_txn * Nd1_txn - (strike_txn * exp(-r * T) * Nd2_txn)
#Valoración Put
Put_txn <- (strike_txn * exp(-r * T) * Nd2P_txn) - s0_txn * Nd1P_txn
##Crear vector de varios precios st a partir de un stc dado
st_txn <- seq(from = Stcall_txn, by = 10, length.out = 21)
num_filas <- length(st_txn)
num_columnas <- length(sigma_txn)
## Matriz resultados de la Valoración Call
resultadosCall_txn <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (st_txn[i] * pnorm((log(st_txn[i]/strike_txn) + (r + ((sigma_txn[j]^2)/2)) * T[j]) / (sigma_txn[j] * sqrt(T[j]))) - strike_txn * exp(-r * T[j]) * pnorm((log(st_txn[i]/strike_txn) + (r - ((sigma_txn[j]^2)/2)) * T[j]) / (sigma_txn[j] * sqrt(T[j])))) /
Call_txn[j]
resultadosCall_txn[i, j] <- resultado
}
}
#Definir el nombre de las columnas
colnames(resultadosCall_txn) <- paste("Vto a", vencimiento, "dias")
##Crear vector de varios precios st a partir de un stp dado
stp_txn <- seq(from = Stput_txn, by = 10, length.out = 21)
#matriz de resultados de la valoración Put
resultadosPut_txn <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (strike_txn * exp(-r * T[j]) * pnorm(-(log(stp_txn[i]/strike_txn) + (r - ((sigma_txn[j]^2)/2)) * T[j]) / (sigma_txn[j] * sqrt(T[j])))
- stp_txn[i] * pnorm(-(log(stp_txn[i]/strike_txn) + (r + ((sigma_txn[j]^2)/2)) * T[j]) / (sigma_txn[j] * sqrt(T[j])))) /
Put_txn[j]
resultadosPut_txn[i, j] <- resultado
}
}
colnames(resultadosPut_txn) <- paste("Vto a", vencimiento, "dias")
#incluir columna de los valores de St para la posición Call en la matriz de resultados
CallTable_txn <- cbind(st_txn, resultadosCall_txn)
# definir la tabla como un dataframe para evitar error en el tipo de datos
CallTable_txn <- as.data.frame(CallTable_txn)
#Proceso similar al anterior realizado ahora para la posición Put
PutTable_txn <- cbind(stp_txn, resultadosPut_txn)
PutTable_txn <- as.data.frame(PutTable_txn)
# Graficar Call
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosCall_txn, type = "l", col = colores, lty = 1, xlab = "Indice", ylab = "Valor", main = "Grafico de Lineas de Resultados Call")
legend("topleft", legend = colnames(resultadosCall_txn), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "CallPlot.png")
dev.off()
# Graficar Put
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosPut_txn, type = "l", col = colores, lty = 1, xlab = "Indice", ylab = "Valor", main = "Grafico de Lineas de Resultados Put")
legend("topright", legend = colnames(resultadosPut_txn), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "PutPlot.png")
dev.off()
return(list(CallTable_txn = CallTable_txn, PutTable_txn = PutTable_txn))
}
# Llamada a la función con valores específicos y gráficas
resultado <- black_scholes_merton(So = 165.31, K = 165, r = 0.05160, VencimientoDias = 60, sigma = 0.2, Stcall = 21.19, Stput = 65.31)
print(resultado$CallTable)
## st_txn Vto a 30 dias Vto a 60 dias Vto a 90 dias Vto a 120 dias
## 1 21.19 0.1063714 0.1063862 0.1063862 0.1063862
## 2 31.19 0.1565758 0.1565920 0.1565920 0.1565920
## 3 41.19 0.2067809 0.2067979 0.2067979 0.2067979
## 4 51.19 0.2569865 0.2570037 0.2570037 0.2570037
## 5 61.19 0.3071925 0.3072096 0.3072096 0.3072096
## 6 71.19 0.3573988 0.3574154 0.3574154 0.3574154
## 7 81.19 0.4076053 0.4076213 0.4076213 0.4076213
## 8 91.19 0.4578119 0.4578271 0.4578271 0.4578271
## 9 101.19 0.5080187 0.5080329 0.5080330 0.5080330
## 10 111.19 0.5582256 0.5582388 0.5582388 0.5582388
## 11 121.19 0.6084327 0.6084446 0.6084446 0.6084446
## 12 131.19 0.6586398 0.6586505 0.6586505 0.6586505
## 13 141.19 0.7088470 0.7088563 0.7088563 0.7088563
## 14 151.19 0.7590543 0.7590622 0.7590622 0.7590622
## 15 161.19 0.8092617 0.8092680 0.8092680 0.8092680
## 16 171.19 0.8594691 0.8594739 0.8594739 0.8594739
## 17 181.19 0.9096766 0.9096797 0.9096797 0.9096797
## 18 191.19 0.9598842 0.9598856 0.9598856 0.9598856
## 19 201.19 1.0100918 1.0100914 1.0100914 1.0100914
## 20 211.19 1.0602994 1.0602973 1.0602973 1.0602973
## 21 221.19 1.1105071 1.1105031 1.1105031 1.1105031
## Vto a 150 dias Vto a 180 dias
## 1 0.1063862 0.1063862
## 2 0.1565920 0.1565920
## 3 0.2067979 0.2067979
## 4 0.2570037 0.2570037
## 5 0.3072096 0.3072096
## 6 0.3574154 0.3574154
## 7 0.4076213 0.4076213
## 8 0.4578271 0.4578271
## 9 0.5080330 0.5080330
## 10 0.5582388 0.5582388
## 11 0.6084446 0.6084446
## 12 0.6586505 0.6586505
## 13 0.7088563 0.7088563
## 14 0.7590622 0.7590622
## 15 0.8092680 0.8092680
## 16 0.8594739 0.8594739
## 17 0.9096797 0.9096797
## 18 0.9598856 0.9598856
## 19 1.0100914 1.0100914
## 20 1.0602973 1.0602973
## 21 1.1105031 1.1105031
print(resultado$PutTable)
## stp_txn Vto a 30 dias Vto a 60 dias Vto a 90 dias Vto a 120 dias
## 1 65.31 1.0000645 1 1 1
## 2 75.31 1.0000580 1 1 1
## 3 85.31 1.0000520 1 1 1
## 4 95.31 1.0000463 1 1 1
## 5 105.31 1.0000409 1 1 1
## 6 115.31 1.0000358 1 1 1
## 7 125.31 1.0000309 1 1 1
## 8 135.31 1.0000262 1 1 1
## 9 145.31 1.0000217 1 1 1
## 10 155.31 1.0000174 1 1 1
## 11 165.31 1.0000132 1 1 1
## 12 175.31 1.0000092 1 1 1
## 13 185.31 1.0000053 1 1 1
## 14 195.31 1.0000014 1 1 1
## 15 205.31 0.9999977 1 1 1
## 16 215.31 0.9999941 1 1 1
## 17 225.31 0.9999906 1 1 1
## 18 235.31 0.9999872 1 1 1
## 19 245.31 0.9999838 1 1 1
## 20 255.31 0.9999805 1 1 1
## 21 265.31 0.9999773 1 1 1
## Vto a 150 dias Vto a 180 dias
## 1 1 1
## 2 1 1
## 3 1 1
## 4 1 1
## 5 1 1
## 6 1 1
## 7 1 1
## 8 1 1
## 9 1 1
## 10 1 1
## 11 1 1
## 12 1 1
## 13 1 1
## 14 1 1
## 15 1 1
## 16 1 1
## 17 1 1
## 18 1 1
## 19 1 1
## 20 1 1
## 21 1 1
#OPCIONES BLACK SCHOLES MERTON MODIFICANDO TASA DE INTERES FTNT
# Función con parámetros iniciales
#Definimos los precios de las opciones con vencimiento a 30 dias
Stcall_ftnt = 65
Stput_ftnt = 55
black_scholes_merton <- function(So, K, r, VencimientoDias, sigma, Stcall_ftnt, Stput_ftnt) {
Ano <- 360
#Definir los vencimientos a partir de un número de días establecido
vencimiento = seq(from = vencimiento, by = 30, length.out = 6)
#Definir un conjunto de Volatilidad a partir de un valor sigma inicial
sigma_ftnt = seq(from = sigma_ftnt, by = 0.05, length.out = 6)
## Cálculo del vencimiento
T <- vencimiento / Ano
#Definir d1 y d2
d1_ftnt <- (log(s0_ftnt/strike_ftnt) + (r + ((sigma_ftnt^2)/2)) * T) / (sigma_ftnt * sqrt(T))
d2_ftnt <- (log(s0_ftnt/strike_ftnt) + (r - ((sigma_ftnt^2)/2)) * T) / (sigma_ftnt * sqrt(T))
# Definir N1 y N2 para la posición Call y Put
Nd1_ftnt <- pnorm(d1_ftnt)
Nd2_ftnt <- pnorm(d2_ftnt)
Nd1P_ftnt <- pnorm(-d1_ftnt)
Nd2P_ftnt <- pnorm(-d2_ftnt)
#Valoración Call
Call_ftnt <- s0_ftnt * Nd1_ftnt - (strike_ftnt * exp(-r * T) * Nd2_ftnt)
#Valoración Put
Put_ftnt <- (strike_ftnt * exp(-r * T) * Nd2P_ftnt) - s0_ftnt * Nd1P_ftnt
##Crear vector de varios precios st a partir de un stc dado
st_ftnt <- seq(from = Stcall_ftnt, by = 10, length.out = 21)
num_filas <- length(st_ftnt)
num_columnas <- length(sigma_ftnt)
## Matriz resultados de la Valoración Call
resultadosCall_ftnt <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (st_ftnt[i] * pnorm((log(st_ftnt[i]/strike_ftnt) + (r + ((sigma_ftnt[j]^2)/2)) * T[j]) / (sigma_ftnt[j] * sqrt(T[j]))) -
strike_ftnt * exp(-r * T[j]) * pnorm((log(st_ftnt[i]/strike_ftnt) + (r - ((sigma_ftnt[j]^2)/2)) * T[j]) / (sigma_ftnt[j] * sqrt(T[j])))) /
Call_ftnt[j]
resultadosCall_ftnt[i, j] <- resultado
}
}
#Definir el nombre de las columnas
colnames(resultadosCall_ftnt) <- paste("Vto a", vencimiento, "dias")
##Crear vector de varios precios st a partir de un stp dado
stp_ftnt <- seq(from = Stput_ftnt, by = 10, length.out = 21)
#matriz de resultados de la valoración Put
resultadosPut_ftnt <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (strike_ftnt * exp(-r * T[j]) * pnorm(-(log(stp_ftnt[i]/strike_ftnt) + (r - ((sigma_ftnt[j]^2)/2)) * T[j]) / (sigma_ftnt[j] * sqrt(T[j])))
- stp_ftnt[i] * pnorm(-(log(stp_ftnt[i]/strike_ftnt) + (r + ((sigma_ftnt[j]^2)/2)) * T[j]) / (sigma_ftnt[j] * sqrt(T[j])))) /
Put_ftnt[j]
resultadosPut_ftnt[i, j] <- resultado
}
}
colnames(resultadosPut_ftnt) <- paste("Vto a", vencimiento, "dias")
#incluir columna de los valores de St para la posición Call en la matriz de resultados
CallTable_ftnt <- cbind(st_ftnt, resultadosCall_ftnt)
# definir la tabla como un dataframe para evitar error en el tipo de datos
CallTable_ftnt <- as.data.frame(CallTable_ftnt)
#Proceso similar al anterior realizado ahora para la posición Put
PutTable_ftnt <- cbind(stp_ftnt, resultadosPut_ftnt)
PutTable_ftnt <- as.data.frame(PutTable_ftnt)
# Graficar Call
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosCall_ftnt, type = "l", col = colores, lty = 1, xlab = "Indice", ylab = "Valor", main = "Grafico de Lineas de Resultados Call")
legend("topleft", legend = colnames(resultadosCall_ftnt), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "CallPlot.png")
dev.off()
# Graficar Put
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosPut_ftnt, type = "l", col = colores, lty = 1, xlab = "Indice", ylab = "Valor", main = "Grafico de Lineas de Resultados Put")
legend("topright", legend = colnames(resultadosPut_ftnt), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "PutPlot.png")
dev.off()
return(list(CallTable_ftnt = CallTable_ftnt, PutTable_ftnt = PutTable_ftnt))
}
# Llamada a la función con valores específicos y gráficas
resultado <- black_scholes_merton(So = 165.31, K = 165, r = 0.05160, VencimientoDias = 60, sigma = 0.2, Stcall = 21.19, Stput = 65.31)
print(resultado$CallTable)
## st_ftnt Vto a 30 dias Vto a 60 dias Vto a 90 dias Vto a 120 dias
## 1 21.19 0.3442828 0.3453765 0.3453949 0.3453953
## 2 31.19 0.5074438 0.5083785 0.5083942 0.5083945
## 3 41.19 0.6707013 0.6713821 0.6713934 0.6713937
## 4 51.19 0.8340212 0.8343866 0.8343927 0.8343928
## 5 61.19 0.9973859 0.9973919 0.9973920 0.9973920
## 6 71.19 1.1607846 1.1603978 1.1603913 1.1603912
## 7 81.19 1.3242102 1.3234041 1.3233907 1.3233904
## 8 91.19 1.4876577 1.4864107 1.4863900 1.4863896
## 9 101.19 1.6511237 1.6494176 1.6493893 1.6493888
## 10 111.19 1.8146054 1.8124248 1.8123887 1.8123880
## 11 121.19 1.9781005 1.9754323 1.9753880 1.9753872
## 12 131.19 2.1416075 2.1384399 2.1383873 2.1383864
## 13 141.19 2.3051250 2.3014477 2.3013867 2.3013856
## 14 151.19 2.4686519 2.4644556 2.4643860 2.4643848
## 15 161.19 2.6321871 2.6274637 2.6273854 2.6273840
## 16 171.19 2.7957300 2.7904719 2.7903847 2.7903831
## 17 181.19 2.9592798 2.9534802 2.9533841 2.9533823
## 18 191.19 3.1228359 3.1164886 3.1163834 3.1163815
## 19 201.19 3.2863979 3.2794971 3.2793828 3.2793807
## 20 211.19 3.4499652 3.4425057 3.4423822 3.4423799
## 21 221.19 3.6135375 3.6055144 3.6053815 3.6053791
## Vto a 150 dias Vto a 180 dias
## 1 0.3453953 0.3453953
## 2 0.5083945 0.5083945
## 3 0.6713937 0.6713937
## 4 0.8343928 0.8343928
## 5 0.9973920 0.9973920
## 6 1.1603912 1.1603912
## 7 1.3233904 1.3233904
## 8 1.4863896 1.4863896
## 9 1.6493888 1.6493888
## 10 1.8123880 1.8123880
## 11 1.9753872 1.9753872
## 12 2.1383864 2.1383864
## 13 2.3013856 2.3013856
## 14 2.4643847 2.4643847
## 15 2.6273839 2.6273839
## 16 2.7903831 2.7903831
## 17 2.9533823 2.9533823
## 18 3.1163815 3.1163815
## 19 3.2793807 3.2793807
## 20 3.4423799 3.4423799
## 21 3.6053791 3.6053791
print(resultado$PutTable)
## stp_ftnt Vto a 30 dias Vto a 60 dias Vto a 90 dias Vto a 120 dias
## 1 65.31 0.9997335 0.9999954 0.9999999 1.0000000
## 2 75.31 0.9990997 0.9999844 0.9999997 1.0000000
## 3 85.31 0.9985132 0.9999742 0.9999995 1.0000000
## 4 95.31 0.9979657 0.9999646 0.9999993 1.0000000
## 5 105.31 0.9974511 0.9999556 0.9999992 1.0000000
## 6 115.31 0.9969647 0.9999470 0.9999990 1.0000000
## 7 125.31 0.9965028 0.9999388 0.9999989 1.0000000
## 8 135.31 0.9960624 0.9999310 0.9999987 1.0000000
## 9 145.31 0.9956411 0.9999234 0.9999986 1.0000000
## 10 155.31 0.9952370 0.9999162 0.9999984 1.0000000
## 11 165.31 0.9948483 0.9999092 0.9999983 1.0000000
## 12 175.31 0.9944736 0.9999025 0.9999982 1.0000000
## 13 185.31 0.9941117 0.9998959 0.9999981 1.0000000
## 14 195.31 0.9937615 0.9998896 0.9999979 1.0000000
## 15 205.31 0.9934221 0.9998834 0.9999978 1.0000000
## 16 215.31 0.9930927 0.9998774 0.9999977 1.0000000
## 17 225.31 0.9927725 0.9998716 0.9999976 1.0000000
## 18 235.31 0.9924610 0.9998659 0.9999975 1.0000000
## 19 245.31 0.9921576 0.9998603 0.9999974 1.0000000
## 20 255.31 0.9918617 0.9998549 0.9999973 0.9999999
## 21 265.31 0.9915729 0.9998495 0.9999972 0.9999999
## Vto a 150 dias Vto a 180 dias
## 1 1 1
## 2 1 1
## 3 1 1
## 4 1 1
## 5 1 1
## 6 1 1
## 7 1 1
## 8 1 1
## 9 1 1
## 10 1 1
## 11 1 1
## 12 1 1
## 13 1 1
## 14 1 1
## 15 1 1
## 16 1 1
## 17 1 1
## 18 1 1
## 19 1 1
## 20 1 1
## 21 1 1
-Largo en la accion. -largo en la call. -Corto en la put. -Calcule el PyG diario en todo el periodo de la muestra, asumiendo que el precio de las opciones no cambia.
mu_txn=mean(txn)
k_txn=150
Preciostxn<- data.frame(txn$TXN.Adjusted)
# Inicializar el PyG diario
pyg_txn <- numeric(length(Preciostxn$TXN.Adjusted) - 1)
# Calcular el PyG diario
for (i in 1:(length(Preciostxn$TXN.Adjusted) - 1)) {
Sttxn <- Preciostxn$TXN.Adjusted[i]
St1txn <- Preciostxn$TXN.Adjusted[i + 1]
# Largo en la accion
largo_acciontxn <- (St1txn - Sttxn)
# Largo en la call
largo_calltxn <- max((St1txn - k_txn), 0) - max((Sttxn - k_txn), 0)
# Corto en la put
corto_puttxn <- -max((k_txn - St1txn), 0) + max((k_txn - Sttxn), 0)
# PyG diario de la estrategia
pyg_txn[i] <- largo_acciontxn + largo_calltxn + corto_puttxn
}
PYGtxn <- data.frame(Dia = 1:length(pyg_txn), PyG = pyg_txn)
knitr::kable(PYGtxn, caption = "PYG TXN")
| Dia | PyG |
|---|---|
| 1 | 1.6351471 |
| 2 | 2.2440491 |
| 3 | -1.9656677 |
| 4 | 1.4959717 |
| 5 | 6.8712311 |
| 6 | 0.6262054 |
| 7 | 1.2350769 |
| 8 | 1.7047577 |
| 9 | 2.5397034 |
| 10 | 0.5218506 |
| 11 | -4.5054016 |
| 12 | 1.4612274 |
| 13 | -6.7320099 |
| 14 | -1.0263214 |
| 15 | 7.5147552 |
| 16 | 0.4523621 |
| 17 | 2.4527283 |
| 18 | -0.6784058 |
| 19 | 0.7132111 |
| 20 | -2.1744690 |
| 21 | 5.1316528 |
| 22 | 2.4875488 |
| 23 | -1.9134979 |
| 24 | 4.2270813 |
| 25 | -1.9656982 |
| 26 | -0.2087250 |
| 27 | -0.3305054 |
| 28 | -1.4264221 |
| 29 | 1.4786377 |
| 30 | 1.4959717 |
| 31 | 0.1391449 |
| 32 | 2.7832642 |
| 33 | 2.6440887 |
| 34 | -2.0178680 |
| 35 | -2.6092834 |
| 36 | 2.4179535 |
| 37 | -2.2788086 |
| 38 | 1.6004028 |
| 39 | 3.2877197 |
| 40 | 15.5341492 |
| 41 | -2.8703003 |
| 42 | 1.4090271 |
| 43 | 3.1485748 |
| 44 | -1.1549683 |
| 45 | -6.1771240 |
| 46 | -2.7298584 |
| 47 | -2.8523560 |
| 48 | -8.5570679 |
| 49 | 3.6222992 |
| 50 | 3.0098724 |
| 51 | 6.2821655 |
| 52 | -6.4746552 |
| 53 | -0.9274597 |
| 54 | 5.7046967 |
| 55 | -4.7947693 |
| 56 | -1.3124237 |
| 57 | 5.1972809 |
| 58 | 3.1147919 |
| 59 | -0.5074615 |
| 60 | 3.0273285 |
| 61 | -1.4524078 |
| 62 | -8.6095428 |
| 63 | 2.4148560 |
| 64 | 0.8924561 |
| 65 | 0.9799500 |
| 66 | 1.4524078 |
| 67 | 0.3150024 |
| 68 | -3.5173187 |
| 69 | 4.9872589 |
| 70 | 3.8847656 |
| 71 | 0.4899597 |
| 72 | 0.0175018 |
| 73 | -0.1049805 |
| 74 | 2.6948242 |
| 75 | 2.8699188 |
| 76 | -1.0675049 |
| 77 | -2.1873932 |
| 78 | 2.0999146 |
| 79 | -0.4374695 |
| 80 | -0.8399811 |
| 81 | -3.7797699 |
| 82 | 1.9248657 |
| 83 | -3.4297791 |
| 84 | 3.3773193 |
| 85 | 0.6474762 |
| 86 | -1.6974182 |
| 87 | 3.6748047 |
| 88 | -1.1374664 |
| 89 | -3.0623779 |
| 90 | 3.2548676 |
| 91 | 2.5198669 |
| 92 | -2.2573395 |
| 93 | -6.7721710 |
| 94 | 4.3047333 |
| 95 | 0.5075073 |
| 96 | 4.1297913 |
| 97 | -0.5949554 |
| 98 | 3.3947906 |
| 99 | -3.8322754 |
| 100 | 1.1024170 |
| 101 | -1.1724396 |
| 102 | 2.5723419 |
| 103 | -4.1297302 |
| 104 | -16.8341217 |
| 105 | -0.9449310 |
| 106 | 3.6748047 |
| 107 | -0.8924561 |
| 108 | 0.5074768 |
| 109 | -2.8209686 |
| 110 | 0.3526154 |
| 111 | 0.0881348 |
| 112 | 5.1658936 |
| 113 | -1.9570312 |
| 114 | 0.8815308 |
| 115 | -0.7757416 |
| 116 | 0.3349609 |
| 117 | -3.5790405 |
| 118 | 1.6572571 |
| 119 | -1.0578156 |
| 120 | -1.4986725 |
| 121 | 0.7581177 |
| 122 | -0.1939392 |
| 123 | -0.0881653 |
| 124 | -2.8385162 |
| 125 | -0.2292175 |
| 126 | 1.6044312 |
| 127 | 3.5261841 |
| 128 | 0.2115631 |
| 129 | 4.5840454 |
| 130 | -2.6799011 |
| 131 | -2.5036011 |
| 132 | -1.8336639 |
| 133 | 4.4606628 |
| 134 | 0.8110504 |
| 135 | 2.8738556 |
| 136 | -0.6523438 |
| 137 | -1.1107178 |
| 138 | 4.1432495 |
| 139 | 4.1432648 |
| 140 | 1.0049744 |
| 141 | 0.7581024 |
| 142 | 0.0352631 |
| 143 | -1.3046722 |
| 144 | 0.0881500 |
| 145 | 4.4959259 |
| 146 | -0.7052307 |
| 147 | -0.0353088 |
| 148 | -0.0881348 |
| 149 | 0.1586761 |
| 150 | -1.6044464 |
| 151 | 1.1107788 |
| 152 | 2.2567749 |
| 153 | -3.0325317 |
| 154 | -1.5691528 |
| 155 | 4.3196106 |
| 156 | 0.6170654 |
| 157 | 2.7680664 |
| 158 | -2.3449249 |
| 159 | -0.0881805 |
| 160 | 1.2694550 |
| 161 | -2.6446533 |
| 162 | 1.7454987 |
| 163 | 2.7151794 |
| 164 | -1.4810333 |
| 165 | 4.3724670 |
| 166 | 1.6044312 |
| 167 | -6.5763702 |
| 168 | -7.4226379 |
| 169 | 3.0501556 |
| 170 | -4.4958954 |
| 171 | -0.3019104 |
| 172 | -6.6948700 |
| 173 | 4.8835449 |
| 174 | 5.4518280 |
| 175 | 10.6017151 |
| 176 | 0.1420746 |
| 177 | -6.7837067 |
| 178 | 1.6870728 |
| 179 | 1.8645935 |
| 180 | 3.0544281 |
| 181 | 0.6925964 |
| 182 | -1.0654907 |
| 183 | -1.7225800 |
| 184 | 3.3563232 |
| 185 | -2.9478912 |
| 186 | -5.2386627 |
| 187 | -12.5729218 |
| 188 | -5.4340668 |
| 189 | 0.7280884 |
| 190 | -10.0512390 |
| 191 | 1.7935791 |
| 192 | 8.5773010 |
| 193 | -9.1633301 |
| 194 | 9.3054199 |
| 195 | -7.6893768 |
| 196 | -2.7703247 |
| 197 | -14.4197540 |
| 198 | 12.5729065 |
| 199 | -9.9801788 |
| 200 | -15.9292297 |
| 201 | 15.1123352 |
| 202 | -22.2689667 |
| 203 | 22.4642792 |
| 204 | -10.9213562 |
| 205 | 2.7880707 |
| 206 | -7.0501099 |
| 207 | 1.4917603 |
| 208 | 12.2887421 |
| 209 | -11.0101624 |
| 210 | 15.2721710 |
| 211 | -12.8925323 |
| 212 | 2.6992340 |
| 213 | -3.7114563 |
| 214 | -5.3985596 |
| 215 | 9.1100159 |
| 216 | -3.6226654 |
| 217 | 15.9469452 |
| 218 | -4.7947083 |
| 219 | 6.9434967 |
| 220 | -4.4040985 |
| 221 | -0.0354919 |
| 222 | 5.8247070 |
| 223 | -5.2741699 |
| 224 | 6.0555573 |
| 225 | 3.8358154 |
| 226 | -3.5872040 |
| 227 | -8.3286896 |
| 228 | 9.1278381 |
| 229 | -2.6992645 |
| 230 | 6.1621399 |
| 231 | 3.2852936 |
| 232 | -2.7348328 |
| 233 | 9.1633606 |
| 234 | -5.9135437 |
| 235 | -9.7718506 |
| 236 | 1.4138947 |
| 237 | 1.8613129 |
| 238 | 1.5749512 |
| 239 | 2.2013550 |
| 240 | 2.4160614 |
| 241 | -0.2147217 |
| 242 | -5.7091675 |
| 243 | -4.6890564 |
| 244 | 2.2908020 |
| 245 | -3.7762756 |
| 246 | 11.0603943 |
| 247 | -3.1140747 |
| 248 | 8.5906525 |
| 249 | -7.1947021 |
| 250 | -0.0536499 |
| 251 | 4.1163025 |
| 252 | 3.7405090 |
| 253 | -3.4899445 |
| 254 | 5.1364899 |
| 255 | -1.5749512 |
| 256 | 8.6084900 |
| 257 | 8.1252899 |
| 258 | 2.4519501 |
| 259 | 5.1185303 |
| 260 | 2.5414124 |
| 261 | -1.3244019 |
| 262 | -1.2885742 |
| 263 | -12.1521759 |
| 264 | -1.1453705 |
| 265 | 0.4653778 |
| 266 | 3.3645935 |
| 267 | 0.1968842 |
| 268 | -0.4295654 |
| 269 | -1.9507599 |
| 270 | 0.6085205 |
| 271 | 2.4877167 |
| 272 | -4.7069702 |
| 273 | 1.9149628 |
| 274 | -3.0246124 |
| 275 | 2.5055847 |
| 276 | 3.9373779 |
| 277 | -3.8836365 |
| 278 | 1.8075562 |
| 279 | 6.6577606 |
| 280 | -1.6644440 |
| 281 | 1.1812134 |
| 282 | 2.0939484 |
| 283 | 0.1789703 |
| 284 | -3.0603638 |
| 285 | 5.4944000 |
| 286 | 0.4653168 |
| 287 | 0.0536957 |
| 288 | 3.0603943 |
| 289 | 4.8143005 |
| 290 | -1.9686584 |
| 291 | -5.2796478 |
| 292 | -6.2461090 |
| 293 | 1.0559845 |
| 294 | 4.4563293 |
| 295 | -3.5615082 |
| 296 | 2.7024994 |
| 297 | -3.3337708 |
| 298 | -2.4147339 |
| 299 | 3.1895905 |
| 300 | 5.2438965 |
| 301 | 0.8469543 |
| 302 | 1.8741608 |
| 303 | -0.3244019 |
| 304 | 3.3338165 |
| 305 | 1.1352081 |
| 306 | 4.6853180 |
| 307 | -2.6850891 |
| 308 | 0.3604736 |
| 309 | 1.6759033 |
| 310 | 1.8560486 |
| 311 | -1.4956665 |
| 312 | 0.1621704 |
| 313 | 3.1715546 |
| 314 | 1.2434387 |
| 315 | 1.1532593 |
| 316 | 1.4236755 |
| 317 | -1.7300110 |
| 318 | 3.6040649 |
| 319 | -2.4146729 |
| 320 | 5.0636292 |
| 321 | 4.8294983 |
| 322 | -10.7581635 |
| 323 | -2.1624451 |
| 324 | -7.9829865 |
| 325 | 6.5594025 |
| 326 | -4.4870148 |
| 327 | -1.4776611 |
| 328 | 3.8923645 |
| 329 | 3.8022461 |
| 330 | -1.7299347 |
| 331 | 1.2974854 |
| 332 | -3.1354980 |
| 333 | -3.0274963 |
| 334 | 3.0094299 |
| 335 | -6.2890778 |
| 336 | 2.7570801 |
| 337 | 2.9373627 |
| 338 | 6.5232849 |
| 339 | -0.7929382 |
| 340 | 2.3246918 |
| 341 | 3.8203430 |
| 342 | -6.8838043 |
| 343 | 5.3880768 |
| 344 | -0.4144592 |
| 345 | 5.2259521 |
| 346 | 2.3605957 |
| 347 | 5.1358032 |
| 348 | 7.1900940 |
| 349 | -0.7387695 |
| 350 | -3.0995178 |
| 351 | -0.3963928 |
| 352 | 1.0270386 |
| 353 | -4.2527771 |
| 354 | 0.1261292 |
| 355 | -8.4695129 |
| 356 | 3.7662354 |
| 357 | 3.1355896 |
| 358 | -7.2261658 |
| 359 | 2.1083374 |
| 360 | -7.4243164 |
| 361 | 7.6410217 |
| 362 | -2.9039917 |
| 363 | 1.8331604 |
| 364 | 3.0854492 |
| 365 | 8.5848694 |
| 366 | 6.4068298 |
| 367 | 3.9566956 |
| 368 | -2.7587891 |
| 369 | -8.5848389 |
| 370 | 7.6410828 |
| 371 | -2.1779785 |
| 372 | 3.9021606 |
| 373 | 3.0128479 |
| 374 | -5.1001282 |
| 375 | -3.5391235 |
| 376 | 6.7517395 |
| 377 | -0.8167419 |
| 378 | 1.0889587 |
| 379 | 3.5028992 |
| 380 | -3.1762390 |
| 381 | 2.5228882 |
| 382 | 4.1018066 |
| 383 | 4.0655518 |
| 384 | -1.3975525 |
| 385 | -1.3431091 |
| 386 | 8.2400818 |
| 387 | -0.4175415 |
| 388 | 0.7078552 |
| 389 | -7.1146545 |
| 390 | -1.3793945 |
| 391 | -2.5228271 |
| 392 | -0.8893433 |
| 393 | 4.1018677 |
| 394 | -0.4718933 |
| 395 | 1.0345459 |
| 396 | 2.5046692 |
| 397 | -2.9765930 |
| 398 | 0.1633606 |
| 399 | -2.7950134 |
| 400 | 1.1978455 |
| 401 | -0.3085327 |
| 402 | -0.5263367 |
| 403 | 2.7586975 |
| 404 | 2.5954285 |
| 405 | -3.4665833 |
| 406 | 2.1598206 |
| 407 | 1.4701538 |
| 408 | 6.7516785 |
| 409 | 5.8443298 |
| 410 | 0.2721558 |
| 411 | 1.7968750 |
| 412 | -1.6153870 |
| 413 | 0.5445251 |
| 414 | -4.5737610 |
| 415 | 9.0749512 |
| 416 | -1.5609436 |
| 417 | 3.2125244 |
| 418 | -4.1562500 |
| 419 | 0.1996460 |
| 420 | -2.6317444 |
| 421 | -15.4999390 |
| 422 | 11.4343872 |
| 423 | -4.6014709 |
| 424 | 12.3618774 |
| 425 | 4.1814880 |
| 426 | -11.2663269 |
| 427 | 6.2448425 |
| 428 | -3.7797241 |
| 429 | 9.4768372 |
| 430 | -2.6111755 |
| 431 | 1.2234802 |
| 432 | 8.8742371 |
| 433 | 0.7669067 |
| 434 | 2.0450745 |
| 435 | -4.0719604 |
| 436 | -3.6884766 |
| 437 | 3.3598328 |
| 438 | -9.6046753 |
| 439 | -0.4382324 |
| 440 | 11.9419250 |
| 441 | -16.1781921 |
| 442 | 3.1772156 |
| 443 | 9.8602600 |
| 444 | -5.0761414 |
| 445 | -7.8517761 |
| 446 | -13.4027405 |
| 447 | 8.5638428 |
| 448 | -10.6454163 |
| 449 | 15.0643921 |
| 450 | -1.7165222 |
| 451 | 10.0977173 |
| 452 | -2.5198975 |
| 453 | 2.4468994 |
| 454 | 4.0718689 |
| 455 | 4.0354919 |
| 456 | -9.1116333 |
| 457 | 2.9580383 |
| 458 | 7.5231018 |
| 459 | -2.4103088 |
| 460 | 0.2191162 |
| 461 | -0.7487183 |
| 462 | 17.7303162 |
| 463 | -3.6884766 |
| 464 | -0.4382629 |
| 465 | 5.5692749 |
| 466 | 5.6057739 |
| 467 | 8.8925171 |
| 468 | -4.2727966 |
| 469 | -2.7389221 |
| 470 | 3.8527527 |
| 471 | 0.4199829 |
| 472 | -5.4779968 |
| 473 | -2.1727905 |
| 474 | -1.6616821 |
| 475 | 5.1857910 |
| 476 | -2.2642517 |
| 477 | -8.8925476 |
| 478 | -3.2684631 |
| 479 | 6.6282654 |
| 480 | -5.6605530 |
| 481 | 5.5144958 |
| 482 | 4.6380615 |
| 483 | -2.0999451 |
| 484 | -15.3199768 |
| 485 | 7.3039246 |
| 486 | -7.8767090 |
| 487 | -3.1396790 |
| 488 | 0.4223022 |
| 489 | 4.8104553 |
| 490 | 4.8105469 |
| 491 | 6.4078064 |
| 492 | -10.4838867 |
| 493 | 2.1114502 |
| 494 | -12.1179810 |
| 495 | 4.3881531 |
| 496 | 7.8583069 |
| 497 | -4.4799500 |
| 498 | -3.5986938 |
| 499 | 5.2327881 |
| 500 | 6.5731506 |
| 501 | -0.5325317 |
| 502 | 6.7567444 |
| 503 | 0.0184021 |
| 504 | -0.6242676 |
| 505 | 1.4137878 |
| 506 | 1.2668762 |
| 507 | -1.5056152 |
| 508 | 3.2131348 |
| 509 | -8.7213440 |
| 510 | 7.4728088 |
| 511 | -2.7908325 |
| 512 | -2.9744568 |
| 513 | -0.8812561 |
| 514 | 2.8458862 |
| 515 | 1.2301941 |
| 516 | 2.9193115 |
| 517 | -3.0295105 |
| 518 | -1.6157532 |
| 519 | -0.1468506 |
| 520 | -8.4091492 |
| 521 | 5.5815735 |
| 522 | 1.7075195 |
| 523 | -1.7258606 |
| 524 | 4.6085205 |
| 525 | -0.8078003 |
| 526 | 6.1690979 |
| 527 | 2.4786987 |
| 528 | -1.0649414 |
| 529 | -2.6806641 |
| 530 | 2.5154114 |
| 531 | -1.8543701 |
| 532 | -2.6072693 |
| 533 | -2.8274841 |
| 534 | 3.7272034 |
| 535 | 3.0295105 |
| 536 | -1.3219604 |
| 537 | 0.1468201 |
| 538 | -5.5448608 |
| 539 | -3.9291992 |
| 540 | 0.2203674 |
| 541 | 2.8091431 |
| 542 | 11.8792725 |
| 543 | -18.9664612 |
| 544 | 7.3113403 |
| 545 | 2.6033325 |
| 546 | -5.7789307 |
| 547 | 3.1755981 |
| 548 | 5.5019836 |
| 549 | 1.4585571 |
| 550 | 0.1846924 |
| 551 | -2.5479126 |
| 552 | 5.6127625 |
| 553 | 1.4400940 |
| 554 | -0.3692627 |
| 555 | -4.6341858 |
| 556 | -1.4771118 |
| 557 | -0.2768860 |
| 558 | -3.0094910 |
| 559 | 1.5323792 |
| 560 | 2.1233215 |
| 561 | -6.5174561 |
| 562 | -4.6526794 |
| 563 | 2.2893982 |
| 564 | -0.1292419 |
| 565 | 5.3173523 |
| 566 | -0.0553894 |
| 567 | 0.4985352 |
| 568 | -0.2216187 |
| 569 | 4.7081299 |
| 570 | 1.6800537 |
| 571 | -0.9599915 |
| 572 | -4.7265320 |
| 573 | 1.9570923 |
| 574 | 0.8677063 |
| 575 | -0.7754822 |
| 576 | -1.2185059 |
| 577 | -0.6093140 |
| 578 | 4.0249634 |
| 579 | 6.1481628 |
| 580 | 2.0863342 |
| 581 | 4.4126282 |
| 582 | -1.2554016 |
| 583 | -1.0524292 |
| 584 | -6.7574463 |
| 585 | 0.6831055 |
| 586 | 5.4650879 |
| 587 | 5.0773010 |
| 588 | 3.6556702 |
| 589 | -0.5908203 |
| 590 | -10.0438538 |
| 591 | -3.3602905 |
| 592 | -1.5878296 |
| 593 | 2.9171448 |
| 594 | -6.2589111 |
| 595 | 6.4251099 |
| 596 | 0.9415894 |
| 597 | 1.6986694 |
| 598 | -0.1293030 |
| 599 | -3.4525757 |
| 600 | -9.0283813 |
| 601 | -2.5479431 |
| 602 | 9.9515991 |
| 603 | 3.6187744 |
| 604 | 0.8492737 |
| 605 | 6.1296997 |
| 606 | 2.1232910 |
| 607 | 3.5263672 |
| 608 | -4.0987549 |
| 609 | 2.0863342 |
| 610 | -5.9450989 |
| 611 | -18.2414856 |
| 612 | 1.4216614 |
| 613 | 1.4118042 |
| 614 | -0.0185547 |
| 615 | 3.4738159 |
| 616 | -0.2786255 |
| 617 | 3.5667419 |
| 618 | 4.2540894 |
| 619 | -1.9319763 |
| 620 | -2.9165649 |
| 621 | -7.0034180 |
| 622 | 2.9351196 |
| 623 | 2.7493591 |
| 624 | -1.5789795 |
| 625 | -1.3190002 |
| 626 | 1.9505920 |
| 627 | 7.2448730 |
| 628 | 3.1394958 |
| 629 | -4.9414368 |
| 630 | 0.2600708 |
| 631 | 1.7833557 |
| 632 | -9.9199219 |
| 633 | 11.3689270 |
| 634 | -3.7339478 |
| 635 | -1.1331177 |
| 636 | 3.3809204 |
| 637 | -0.3714600 |
| 638 | 2.2848816 |
| 639 | 8.2108765 |
| 640 | -4.9042053 |
| 641 | -5.5544434 |
| 642 | 4.8299255 |
| 643 | -5.1270752 |
| 644 | -5.5173645 |
| 645 | 5.8888245 |
| 646 | -9.6599426 |
| 647 | -3.6038513 |
| 648 | -3.8267822 |
| 649 | 3.9568481 |
| 650 | 1.0402222 |
| 651 | 0.8731079 |
| 652 | 8.2481079 |
| 653 | -1.3746948 |
| 654 | -0.5387268 |
| 655 | -2.6006470 |
| 656 | -1.7462769 |
| 657 | 3.9568787 |
| 658 | 0.3714905 |
| 659 | -7.3934937 |
| 660 | -0.1115112 |
| 661 | -13.5981750 |
| 662 | 6.5390320 |
| 663 | 3.1209106 |
| 664 | 2.5821533 |
| 665 | -3.4924316 |
| 666 | 5.3129578 |
| 667 | -8.7868042 |
| 668 | -7.3935242 |
| 669 | -9.0097656 |
| 670 | 4.0682983 |
| 671 | 5.0157166 |
| 672 | -8.1365356 |
| 673 | 8.1179810 |
| 674 | -6.5390320 |
| 675 | 6.7879944 |
| 676 | 4.1139832 |
| 677 | 3.3659668 |
| 678 | 12.2483215 |
| 679 | -22.9071655 |
| 680 | -7.7978210 |
| 681 | -2.7488403 |
| 682 | 5.0115356 |
| 683 | 7.6295166 |
| 684 | -11.3133850 |
| 685 | -11.7060547 |
| 686 | -3.6090088 |
| 687 | 6.9188538 |
| 688 | 3.8709106 |
| 689 | -6.7132263 |
| 690 | 3.9082031 |
| 691 | -0.0934753 |
| 692 | -1.9635010 |
| 693 | 7.3864136 |
| 694 | 2.3000488 |
| 695 | -1.5520020 |
| 696 | -5.0489807 |
| 697 | 5.2546387 |
| 698 | 1.6829224 |
| 699 | -1.9073486 |
| 700 | -9.5181274 |
| 701 | 4.5813904 |
| 702 | 9.5742493 |
| 703 | 0.5423279 |
| 704 | -4.4692383 |
| 705 | -6.8067017 |
| 706 | 10.4718933 |
| 707 | 7.4985962 |
| 708 | 4.0016785 |
| 709 | 3.0481262 |
| 710 | 0.6731567 |
| 711 | 3.5342712 |
| 712 | -6.1148071 |
| 713 | 9.5929871 |
| 714 | 1.2902222 |
| 715 | 1.4585876 |
| 716 | 9.9669800 |
| 717 | -6.6571045 |
| 718 | -7.4238281 |
| 719 | -2.6179199 |
| 720 | 1.1780701 |
| 721 | -10.3410034 |
| 722 | 0.1309509 |
| 723 | 0.6544800 |
| 724 | -6.5261841 |
| 725 | -4.0578613 |
| 726 | 1.9821472 |
| 727 | 3.9456177 |
| 728 | -2.7114258 |
| 729 | 5.4229126 |
| 730 | 4.6749573 |
| 731 | 0.6731262 |
| 732 | -4.0952148 |
| 733 | -7.3302612 |
| 734 | 1.1219482 |
| 735 | -10.2287598 |
| 736 | 1.7764893 |
| 737 | 12.0800476 |
| 738 | -10.4718628 |
| 739 | 7.0124207 |
| 740 | -2.7301636 |
| 741 | 6.9001160 |
| 742 | -11.1262817 |
| 743 | -3.1629028 |
| 744 | -4.7255859 |
| 745 | 6.2129517 |
| 746 | -6.6835938 |
| 747 | 2.2780151 |
| 748 | 7.2295227 |
| 749 | -2.3345032 |
| 750 | 12.1998291 |
| 751 | -8.8109741 |
| 752 | -5.0456848 |
| 753 | 4.1231689 |
| 754 | 0.2259216 |
| 755 | -3.8971558 |
| 756 | 4.0477295 |
| 757 | 7.7567444 |
| 758 | 7.2294617 |
| 759 | -2.2780762 |
| 760 | -4.4054565 |
| 761 | 4.3302002 |
| 762 | -8.2649536 |
| 763 | -8.6039734 |
| 764 | 3.9348755 |
| 765 | -8.4345093 |
| 766 | -7.1353455 |
| 767 | -7.1542358 |
| 768 | -8.0014343 |
| 769 | 1.0354919 |
| 770 | 3.4641724 |
| 771 | -8.5662842 |
| 772 | -2.2026978 |
| 773 | 6.1375122 |
| 774 | -1.6190491 |
| 775 | -2.7487793 |
| 776 | 9.0557556 |
| 777 | -0.6213074 |
| 778 | -2.7487183 |
| 779 | -2.5981140 |
| 780 | 1.6379089 |
| 781 | -9.6205444 |
| 782 | 1.0543518 |
| 783 | 3.2193909 |
| 784 | 7.3048401 |
| 785 | 1.5814514 |
| 786 | -3.7089539 |
| 787 | 1.6944885 |
| 788 | -0.3200684 |
| 789 | 6.7023926 |
| 790 | 5.0643921 |
| 791 | -1.6379089 |
| 792 | 9.3570251 |
| 793 | 1.2989807 |
| 794 | 2.2780457 |
| 795 | -4.9703064 |
| 796 | -1.3178711 |
| 797 | -4.4431763 |
| 798 | 20.1448059 |
| 799 | 7.9261780 |
| 800 | 8.1299133 |
| 801 | -0.1705627 |
| 802 | -2.9942322 |
| 803 | 11.8442993 |
| 804 | 2.7289429 |
| 805 | -1.1560059 |
| 806 | -2.8426208 |
| 807 | -9.6460266 |
| 808 | 10.2524719 |
| 809 | -2.0088501 |
| 810 | 6.2917175 |
| 811 | 0.0378723 |
| 812 | -3.8659668 |
| 813 | -12.6022949 |
| 814 | 3.3164062 |
| 815 | -3.8092346 |
| 816 | -9.4943237 |
| 817 | 2.0466919 |
| 818 | -0.6253662 |
| 819 | 9.7028503 |
| 820 | -14.8196106 |
| 821 | -2.9374390 |
| 822 | -2.2740784 |
| 823 | -2.8994751 |
| 824 | 1.8003540 |
| 825 | -5.9884949 |
| 826 | 0.1895447 |
| 827 | 5.1546326 |
| 828 | 4.9082947 |
| 829 | 4.4155273 |
| 830 | -0.3032227 |
| 831 | -15.0281067 |
| 832 | 4.9461975 |
| 833 | -4.9082642 |
| 834 | 4.9082642 |
| 835 | 1.8761597 |
| 836 | -0.3600464 |
| 837 | -5.2304688 |
| 838 | -1.2886963 |
| 839 | -2.5204468 |
| 840 | -1.5729065 |
| 841 | 0.4737549 |
| 842 | 3.9607849 |
| 843 | -8.2436829 |
| 844 | -6.9549561 |
| 845 | 9.5891418 |
| 846 | 10.0628967 |
| 847 | 5.0220337 |
| 848 | -2.3878479 |
| 849 | -13.7583313 |
| 850 | -4.7187805 |
| 851 | -6.3295593 |
| 852 | -3.6007080 |
| 853 | 5.2872925 |
| 854 | -11.3705444 |
| 855 | 5.0219727 |
| 856 | 0.9854431 |
| 857 | 2.1604614 |
| 858 | 2.0276489 |
| 859 | 11.3706055 |
| 860 | 3.6575317 |
| 861 | 0.9665222 |
| 862 | -8.1299744 |
| 863 | -2.1035156 |
| 864 | 11.1555176 |
| 865 | -1.3944092 |
| 866 | 4.3361511 |
| 867 | -8.4239502 |
| 868 | -3.7631531 |
| 869 | 11.7095642 |
| 870 | 5.8069458 |
| 871 | 4.6227417 |
| 872 | -5.9598083 |
| 873 | 18.5289001 |
| 874 | 9.1689758 |
| 875 | -3.9158936 |
| 876 | 0.2483215 |
| 877 | -7.8509827 |
| 878 | 3.6294250 |
| 879 | -0.3438721 |
| 880 | -5.3103333 |
| 881 | 9.2072144 |
| 882 | 3.3619080 |
| 883 | -3.6484680 |
| 884 | -7.7745056 |
| 885 | -0.0381775 |
| 886 | 14.2882385 |
| 887 | -5.6541443 |
| 888 | 0.3056030 |
| 889 | -0.5157471 |
| 890 | -5.8261108 |
| 891 | -1.1270447 |
| 892 | 4.9856262 |
| 893 | -4.0114136 |
| 894 | 6.1508484 |
| 895 | 0.0382385 |
| 896 | -3.2091370 |
| 897 | -11.0982666 |
| 898 | -0.8787231 |
| 899 | -3.7058105 |
| 900 | -2.9034729 |
| 901 | 5.0429382 |
| 902 | -7.6981506 |
| 903 | -0.6112366 |
| 904 | -1.1461182 |
| 905 | -4.9474182 |
| 906 | 7.3160400 |
| 907 | 0.3820801 |
| 908 | -3.8395386 |
| 909 | 11.3848267 |
| 910 | -4.2788696 |
| 911 | 15.7209473 |
| 912 | 2.9035034 |
| 913 | 3.2855530 |
| 914 | 0.8977966 |
| 915 | -1.4135132 |
| 916 | 1.6809082 |
| 917 | -6.8958130 |
| 918 | -3.1327515 |
| 919 | -5.4058228 |
| 920 | 3.9541321 |
| 921 | 9.8757019 |
| 922 | -2.1585083 |
| 923 | -3.8204041 |
| 924 | -1.7956238 |
| 925 | 2.1777039 |
| 926 | -1.6737366 |
| 927 | 7.8491516 |
| 928 | 9.4074402 |
| 929 | 5.0404053 |
| 930 | -4.6748962 |
| 931 | -2.4817200 |
| 932 | 4.7902832 |
| 933 | -13.4474182 |
| 934 | -2.9049377 |
| 935 | 1.5390320 |
| 936 | 1.7699280 |
| 937 | -0.7118835 |
| 938 | 4.1554871 |
| 939 | -4.6556091 |
| 940 | -1.4620972 |
| 941 | -8.7726440 |
| 942 | -1.8468018 |
| 943 | 3.8861084 |
| 944 | -5.1558533 |
| 945 | 3.0780945 |
| 946 | 1.3659363 |
| 947 | 1.3851013 |
| 948 | 3.6744995 |
| 949 | 3.0781250 |
| 950 | -5.0596008 |
| 951 | -1.9046631 |
| 952 | 8.0030823 |
| 953 | -5.3482056 |
| 954 | -3.4627991 |
| 955 | 4.3285217 |
| 956 | 3.5398560 |
| 957 | -2.5779419 |
| 958 | 5.2712708 |
| 959 | -2.7317810 |
| 960 | 6.6370850 |
| 961 | -1.4428406 |
| 962 | -4.0207520 |
| 963 | 7.6183167 |
| 964 | -1.4813843 |
| 965 | -4.7325439 |
| 966 | 0.8464966 |
| 967 | 6.8294983 |
| 968 | 6.1562195 |
| 969 | 3.4051208 |
| 970 | -3.5590210 |
| 971 | -7.2335510 |
| 972 | -6.1561890 |
| 973 | 1.7698975 |
| 974 | 2.5009460 |
| 975 | 0.8657227 |
| 976 | -4.4632874 |
| 977 | 3.0011902 |
| 978 | -0.2501221 |
| 979 | 2.0585022 |
| 980 | 0.5194702 |
| 981 | -6.2331848 |
| 982 | -0.8849792 |
| 983 | 0.7695618 |
| 984 | -2.1546936 |
| 985 | -12.5240173 |
| 986 | -9.4843750 |
| 987 | 1.5582886 |
| 988 | 3.7129211 |
| 989 | -1.0003662 |
| 990 | -5.2712402 |
| 991 | -1.1350403 |
| 992 | -2.0200195 |
| 993 | 9.2278442 |
| 994 | -3.1017761 |
| 995 | -2.3651428 |
| 996 | 0.0969238 |
| 997 | -3.6445923 |
| 998 | 1.3764038 |
| 999 | 6.5525513 |
| 1000 | -3.6445923 |
| 1001 | 3.7996826 |
| 1002 | 8.6656494 |
| 1003 | 0.5816345 |
| 1004 | 1.4539185 |
| 1005 | -2.1712646 |
| 1006 | -5.1761169 |
| 1007 | 4.9435120 |
| 1008 | 12.9306335 |
| 1009 | 0.5040588 |
| 1010 | -5.1761475 |
| 1011 | 3.7415466 |
| 1012 | -1.1244202 |
| 1013 | -9.6349792 |
| 1014 | 0.1938782 |
| 1015 | 3.1793213 |
| 1016 | 0.4458923 |
| 1017 | -3.1793518 |
| 1018 | 6.6882629 |
| 1019 | 6.5331726 |
| 1020 | -0.5621948 |
| 1021 | 1.8804626 |
| 1022 | -2.5783691 |
| 1023 | -4.6527100 |
| 1024 | -7.5218811 |
| 1025 | 4.1681213 |
| 1026 | -9.5962524 |
| 1027 | 2.0743408 |
| 1028 | 14.6560059 |
| 1029 | -2.6171265 |
| 1030 | 3.5476379 |
| 1031 | 6.2617493 |
| 1032 | -0.5040588 |
| 1033 | -6.2616882 |
| 1034 | -3.3150330 |
| 1035 | -2.1712952 |
| 1036 | 11.1277161 |
| 1037 | -1.2019348 |
| 1038 | 6.8821106 |
| 1039 | 1.4539490 |
| 1040 | -4.4006958 |
| 1041 | 4.9435120 |
| 1042 | 0.5428162 |
| 1043 | -0.0193787 |
| 1044 | -7.2698364 |
| 1045 | 8.5299683 |
| 1046 | -0.8336182 |
| 1047 | 4.2455750 |
| 1048 | -19.5413513 |
| 1049 | 3.3344727 |
| 1050 | 3.6897278 |
| 1051 | 3.1821289 |
| 1052 | -3.1821289 |
| 1053 | -11.5768127 |
| 1054 | -1.2494202 |
| 1055 | -6.5595703 |
| 1056 | 1.0151367 |
| 1057 | -4.3534851 |
| 1058 | 1.0541992 |
| 1059 | 0.5661621 |
| 1060 | -2.6550598 |
| 1061 | 8.3555908 |
| 1062 | -4.5291748 |
| 1063 | -4.7634888 |
| 1064 | 0.0780640 |
| 1065 | 1.4251709 |
| 1066 | 2.8502808 |
| 1067 | -1.6398926 |
| 1068 | 5.3100891 |
| 1069 | -8.2775574 |
| 1070 | 4.3340454 |
| 1071 | 1.7374878 |
| 1072 | 3.8849487 |
| 1073 | -2.8502502 |
| 1074 | -2.2841187 |
| 1075 | 3.4554443 |
| 1076 | -0.1756897 |
| 1077 | -3.2992859 |
| 1078 | -6.5205078 |
| 1079 | -0.0975952 |
| 1080 | 2.3036194 |
| 1081 | -4.5877686 |
| 1082 | 1.6984558 |
| 1083 | 3.2993164 |
| 1084 | -6.6962280 |
| 1085 | 0.4099731 |
| 1086 | 0.6051941 |
| 1087 | -2.0303345 |
| 1088 | -3.3188477 |
| 1089 | -0.1756897 |
| 1090 | 1.1518250 |
| 1091 | -5.7395935 |
| 1092 | 0.3514099 |
| 1093 | 1.8546448 |
| 1094 | -0.1562195 |
| 1095 | 1.8351440 |
| 1096 | -5.2710571 |
| 1097 | 1.4056091 |
| 1098 | -5.5834045 |
| 1099 | 3.6897278 |
| 1100 | -0.5466309 |
| 1101 | 1.8351440 |
| 1102 | -0.6442871 |
| 1103 | -4.5487366 |
| 1104 | -4.3925476 |
| 1105 | 3.0260010 |
| 1106 | -0.0780945 |
| 1107 | -4.7634888 |
| 1108 | -1.7179871 |
| 1109 | -6.1105347 |
| 1110 | -2.9088440 |
| 1111 | 1.1713562 |
| 1112 | -10.0150452 |
| 1113 | 4.3340149 |
| 1114 | -1.7375183 |
| 1115 | -2.6005859 |
| 1116 | 2.9749146 |
| 1117 | 2.2853699 |
| 1118 | 8.1564026 |
| 1119 | 5.7527771 |
| 1120 | -5.3784485 |
| 1121 | -1.7928467 |
| 1122 | -2.6990967 |
| 1123 | -3.8417664 |
| 1124 | 7.7229614 |
| 1125 | -2.6006165 |
| 1126 | 7.9987793 |
| 1127 | 3.8220825 |
| 1128 | 0.0394287 |
| 1129 | 5.3784790 |
| 1130 | 1.8125000 |
| 1131 | -4.1569824 |
| 1132 | 0.9850464 |
| 1133 | -0.6698303 |
| 1134 | -1.9504089 |
| 1135 | 0.5910034 |
| 1136 | 0.5910645 |
| 1137 | -0.9653625 |
| 1138 | 4.9253540 |
| 1139 | 4.3540039 |
| 1140 | -0.3349304 |
| 1141 | -2.3641663 |
| 1142 | 3.2113342 |
| 1143 | -1.2806091 |
| 1144 | 5.7922363 |
| 1145 | -4.0387878 |
| 1146 | 7.6638489 |
| 1147 | 13.7318726 |
| 1148 | -0.2758179 |
| 1149 | -2.4035645 |
| 1150 | 2.1277466 |
| 1151 | -6.5408936 |
| 1152 | 3.2113647 |
| 1153 | 2.8172913 |
| 1154 | 5.0632629 |
| 1155 | 0.8274536 |
| 1156 | 0.9653625 |
| 1157 | -2.4823608 |
| 1158 | -2.3641663 |
| 1159 | -4.9647522 |
| 1160 | -4.4722290 |
| 1161 | 1.2412109 |
| 1162 | 6.7772522 |
| 1163 | 0.1773376 |
| 1164 | -2.7187805 |
| 1165 | -3.2507629 |
| 1166 | -1.4382019 |
| 1167 | -1.9504395 |
| 1168 | -2.8764038 |
| 1169 | 8.8459473 |
| 1170 | 13.2787170 |
| 1171 | 2.3247986 |
| 1172 | -0.9653625 |
| 1173 | -8.4125061 |
| 1174 | -5.2208862 |
| 1175 | -6.5605774 |
| 1176 | 3.8417664 |
| 1177 | -5.3414917 |
| 1178 | -3.8323975 |
| 1179 | -0.8538208 |
| 1180 | -0.9729919 |
| 1181 | -0.5957336 |
| 1182 | -1.0523987 |
| 1183 | 0.7942810 |
| 1184 | 2.8594055 |
| 1185 | 4.3486328 |
| 1186 | -2.6210938 |
| 1187 | -8.3994446 |
| 1188 | 2.0253906 |
| 1189 | 5.6393738 |
| 1190 | -0.6553040 |
| 1191 | 4.6862488 |
| 1192 | 2.6607971 |
| 1193 | 2.6806641 |
| 1194 | -3.4550781 |
| 1195 | 1.2112732 |
| 1196 | 1.2708435 |
| 1197 | -3.7728271 |
| 1198 | 8.5186157 |
| 1199 | 7.3867798 |
| 1200 | 2.7601013 |
| 1201 | -3.5742493 |
| 1202 | 2.4423828 |
| 1203 | 6.7513733 |
| 1204 | -5.8975220 |
| 1205 | 3.7529602 |
| 1206 | 1.2112732 |
| 1207 | -4.2096863 |
| 1208 | -3.0579529 |
| 1209 | 2.7402649 |
| 1210 | -6.5726318 |
| 1211 | -4.8649597 |
| 1212 | 6.3939209 |
| 1213 | 5.1826477 |
| 1214 | -0.2184143 |
| 1215 | -3.2366638 |
| 1216 | -5.8379211 |
| 1217 | 9.8489990 |
| 1218 | 2.6608582 |
| 1219 | -2.0651550 |
| 1220 | -5.5797729 |
| 1221 | -0.0397034 |
| 1222 | -3.5941162 |
| 1223 | -2.0452576 |
| 1224 | 3.8919678 |
| 1225 | 7.9427490 |
| 1226 | -9.0150452 |
| 1227 | 4.5273743 |
| 1228 | -9.6702881 |
| 1229 | 0.0397339 |
| 1230 | 2.4622192 |
| 1231 | -3.7529297 |
| 1232 | -4.0309448 |
| 1233 | -7.9229126 |
| 1234 | 7.4463196 |
| 1235 | 4.0508118 |
| 1236 | 18.5463257 |
| 1237 | 0.8737183 |
| 1238 | 4.4280701 |
| 1239 | 3.5940857 |
| 1240 | -5.6989136 |
| 1241 | -2.4225464 |
| 1242 | 1.1914368 |
| 1243 | 6.1754761 |
| 1244 | 5.4804993 |
| 1245 | 4.6000061 |
| 1246 | 2.5599976 |
| 1247 | 2.7400208 |
| 1248 | 3.4599915 |
| 1249 | 1.5400085 |
| 1250 | 6.6199951 |
| 1251 | 8.7999878 |
| 1252 | -1.1199951 |
| 1253 | 0.1000061 |
| 1254 | 8.3599854 |
| 1255 | -0.3800049 |
| 1256 | 7.0599976 |
| 1257 | -10.5000000 |
| 1258 | 3.7799988 |
mu_ftnt=mean(ftnt)
k_ftnt=50
Preciosftnt<- data.frame(ftnt$FTNT.Adjusted)
# Inicializar el PyG diario
pyg_ftnt <- numeric(length(Preciosftnt$FTNT.Adjusted) - 1)
# Calcular el PyG diario
for (i in 1:(length(Preciosftnt$FTNT.Adjusted) - 1)) {
Stftnt <- Preciosftnt$FTNT.Adjusted[i]
St1ftnt <- Preciosftnt$FTNT.Adjusted[i + 1]
# Largo en la accion
largo_accionftnt <- (St1ftnt - Stftnt)
# Largo en la call
largo_callftnt <- max((St1ftnt - k_ftnt), 0) - max((Stftnt - k_ftnt), 0)
# Corto en la put
corto_putftnt <- -max((k_ftnt - St1ftnt), 0) + max((k_ftnt - Stftnt), 0)
# PyG diario de la estrategia
pyg_ftnt[i] <- largo_accionftnt + largo_callftnt + corto_putftnt
}
PYGftnt <- data.frame(Dia = 1:length(pyg_ftnt), PyG = pyg_ftnt)
knitr::kable(PYGftnt, caption = "PYG FTNT")
| Dia | PyG |
|---|---|
| 1 | -0.5680008 |
| 2 | 0.0920010 |
| 3 | -1.4279995 |
| 4 | -1.1320000 |
| 5 | 1.1280003 |
| 6 | 0.2719994 |
| 7 | 0.1760006 |
| 8 | 0.0919991 |
| 9 | 0.3439999 |
| 10 | 0.5200005 |
| 11 | 0.4039993 |
| 12 | -0.1520004 |
| 13 | -0.3599987 |
| 14 | -0.4720001 |
| 15 | 0.1679993 |
| 16 | 0.8040009 |
| 17 | -0.0080013 |
| 18 | -0.3239994 |
| 19 | -0.1159992 |
| 20 | -0.3880005 |
| 21 | 0.1520004 |
| 22 | 0.6000004 |
| 23 | 0.0319996 |
| 24 | 0.1439991 |
| 25 | 0.3680000 |
| 26 | 0.2919998 |
| 27 | 0.0200005 |
| 28 | -0.1359997 |
| 29 | 0.8000011 |
| 30 | 0.1999969 |
| 31 | 1.2040024 |
| 32 | 0.2599983 |
| 33 | 0.1240005 |
| 34 | -0.0999985 |
| 35 | 0.7119980 |
| 36 | -0.0399971 |
| 37 | 0.3639984 |
| 38 | 0.0760002 |
| 39 | 0.0239983 |
| 40 | -0.4119987 |
| 41 | -0.4959984 |
| 42 | 0.0079994 |
| 43 | -0.9600029 |
| 44 | -0.2079964 |
| 45 | -0.8520012 |
| 46 | -0.5160007 |
| 47 | 2.8119984 |
| 48 | -2.0759964 |
| 49 | 0.4799995 |
| 50 | -0.2400017 |
| 51 | 1.1640015 |
| 52 | -0.3360023 |
| 53 | -0.5359993 |
| 54 | 0.6879997 |
| 55 | -1.2799988 |
| 56 | -0.2439995 |
| 57 | 0.2239990 |
| 58 | 0.2000008 |
| 59 | -0.5960007 |
| 60 | 0.9199982 |
| 61 | -0.0879974 |
| 62 | -0.5600014 |
| 63 | 0.3120003 |
| 64 | -0.1079979 |
| 65 | -1.2040024 |
| 66 | 0.0480003 |
| 67 | 0.4840012 |
| 68 | -0.4600010 |
| 69 | 0.0760002 |
| 70 | 0.8679981 |
| 71 | -0.1159973 |
| 72 | -0.4360008 |
| 73 | 0.0799999 |
| 74 | 0.2560005 |
| 75 | -0.5920010 |
| 76 | -0.1040001 |
| 77 | 0.6240005 |
| 78 | -0.0879993 |
| 79 | -0.2320004 |
| 80 | -0.1800003 |
| 81 | -0.0760002 |
| 82 | 0.4120007 |
| 83 | 0.0079994 |
| 84 | 0.0039997 |
| 85 | -0.1719990 |
| 86 | -1.0559998 |
| 87 | 0.2159996 |
| 88 | 0.1159992 |
| 89 | -0.5599995 |
| 90 | 0.6879997 |
| 91 | 0.0480003 |
| 92 | 0.1280003 |
| 93 | -0.5920010 |
| 94 | 0.6240005 |
| 95 | -0.1159992 |
| 96 | 0.6239986 |
| 97 | 0.0600014 |
| 98 | -0.2520008 |
| 99 | -0.3640003 |
| 100 | 0.4559994 |
| 101 | -0.9399986 |
| 102 | -0.1120014 |
| 103 | 0.3040009 |
| 104 | 0.4080009 |
| 105 | 1.1599979 |
| 106 | -0.1919975 |
| 107 | -0.0680008 |
| 108 | 0.1759987 |
| 109 | 0.7480011 |
| 110 | -0.4239998 |
| 111 | 3.4279976 |
| 112 | 0.7040024 |
| 113 | -0.1000023 |
| 114 | 0.5880013 |
| 115 | 0.4239998 |
| 116 | 0.8240013 |
| 117 | -0.1119995 |
| 118 | 1.6159973 |
| 119 | -0.1279984 |
| 120 | 0.1800003 |
| 121 | 0.5680008 |
| 122 | 0.9199982 |
| 123 | 0.4920006 |
| 124 | -1.0480003 |
| 125 | 0.2280006 |
| 126 | 0.3159981 |
| 127 | 0.5320015 |
| 128 | -0.3079987 |
| 129 | 0.3439980 |
| 130 | -0.0480003 |
| 131 | -0.4759979 |
| 132 | -0.0480003 |
| 133 | -0.0919991 |
| 134 | 0.5359993 |
| 135 | -0.5279999 |
| 136 | 0.1040001 |
| 137 | -0.1200027 |
| 138 | 0.2360001 |
| 139 | 0.1040001 |
| 140 | 0.4960022 |
| 141 | 0.6399994 |
| 142 | -0.3559990 |
| 143 | 0.6599998 |
| 144 | 0.6119995 |
| 145 | -1.0439987 |
| 146 | 0.3599968 |
| 147 | -0.0159988 |
| 148 | 0.1840019 |
| 149 | -0.3160019 |
| 150 | -0.2000008 |
| 151 | -0.0760002 |
| 152 | 1.1680031 |
| 153 | 0.6119995 |
| 154 | 0.3159981 |
| 155 | -0.0439987 |
| 156 | 0.7119980 |
| 157 | 0.3240013 |
| 158 | -0.0639992 |
| 159 | 0.9479980 |
| 160 | 0.0120010 |
| 161 | 0.1320000 |
| 162 | 0.8160019 |
| 163 | -0.6400032 |
| 164 | 0.0600014 |
| 165 | 0.0600014 |
| 166 | 0.5119972 |
| 167 | -0.4319992 |
| 168 | -1.4239998 |
| 169 | 1.2439995 |
| 170 | -0.1079979 |
| 171 | 0.4239998 |
| 172 | -1.1879997 |
| 173 | 0.4519997 |
| 174 | 1.4360008 |
| 175 | -0.1200027 |
| 176 | 0.6200027 |
| 177 | -1.6879997 |
| 178 | 0.6479988 |
| 179 | -0.5639992 |
| 180 | 0.0319977 |
| 181 | 0.6800003 |
| 182 | 0.0359993 |
| 183 | 0.1040001 |
| 184 | -0.0999985 |
| 185 | -0.4799995 |
| 186 | -1.4080009 |
| 187 | -2.3120003 |
| 188 | -1.4599991 |
| 189 | 0.4840012 |
| 190 | -1.4480019 |
| 191 | -0.2319984 |
| 192 | 3.2159996 |
| 193 | -2.6280022 |
| 194 | 1.4080009 |
| 195 | -1.2200012 |
| 196 | -1.7999992 |
| 197 | -4.9440002 |
| 198 | 1.4319992 |
| 199 | -1.1079979 |
| 200 | -4.8560009 |
| 201 | 2.7320004 |
| 202 | -2.7759991 |
| 203 | 0.9279995 |
| 204 | -0.6000004 |
| 205 | 3.8560009 |
| 206 | -0.5000000 |
| 207 | 0.3959999 |
| 208 | 5.5519981 |
| 209 | -1.1359978 |
| 210 | 1.0000000 |
| 211 | -0.8640022 |
| 212 | 1.4680023 |
| 213 | 0.0879974 |
| 214 | -0.2799988 |
| 215 | 0.1800003 |
| 216 | 0.2080002 |
| 217 | 2.5760002 |
| 218 | -0.4760017 |
| 219 | 0.9960022 |
| 220 | -2.9000015 |
| 221 | 1.0839996 |
| 222 | 1.8840027 |
| 223 | 0.1999969 |
| 224 | 0.1599998 |
| 225 | 1.0839996 |
| 226 | -0.2439995 |
| 227 | -4.4679985 |
| 228 | 1.2519989 |
| 229 | -1.4879990 |
| 230 | 1.0719986 |
| 231 | 0.9480019 |
| 232 | -0.0800018 |
| 233 | 1.2320023 |
| 234 | -0.3120003 |
| 235 | -1.3600006 |
| 236 | 0.5439987 |
| 237 | 1.1440010 |
| 238 | 1.1599998 |
| 239 | 9.4640007 |
| 240 | 0.6879997 |
| 241 | 1.4479980 |
| 242 | -0.8279991 |
| 243 | -0.4920006 |
| 244 | 0.3600006 |
| 245 | 2.1480026 |
| 246 | 0.4959984 |
| 247 | 0.0600014 |
| 248 | 0.3199997 |
| 249 | -0.8959999 |
| 250 | -0.2960014 |
| 251 | -2.0439987 |
| 252 | -2.5520020 |
| 253 | 1.4080009 |
| 254 | 1.8120003 |
| 255 | 2.2200012 |
| 256 | -0.3240013 |
| 257 | -0.4200020 |
| 258 | -1.3239975 |
| 259 | 0.3600006 |
| 260 | -1.1879997 |
| 261 | -0.6360016 |
| 262 | 0.6879997 |
| 263 | -2.3639984 |
| 264 | -0.5559998 |
| 265 | 2.2279968 |
| 266 | 0.3280029 |
| 267 | -0.5000000 |
| 268 | 0.0639992 |
| 269 | 0.4279976 |
| 270 | 2.4640007 |
| 271 | -2.3199997 |
| 272 | -1.0960007 |
| 273 | 0.6000023 |
| 274 | -0.5120010 |
| 275 | -0.4319992 |
| 276 | 1.5200005 |
| 277 | 0.7799988 |
| 278 | -0.3120003 |
| 279 | 0.5040016 |
| 280 | -0.6960030 |
| 281 | 3.3560028 |
| 282 | 1.2999992 |
| 283 | -1.5200005 |
| 284 | -5.8719978 |
| 285 | 1.3439980 |
| 286 | -2.0639992 |
| 287 | -0.7880020 |
| 288 | 0.7080002 |
| 289 | 2.2680016 |
| 290 | -0.4519997 |
| 291 | 0.2519989 |
| 292 | 0.3479996 |
| 293 | -0.8479996 |
| 294 | 1.4440002 |
| 295 | -1.2919998 |
| 296 | 1.3680000 |
| 297 | -0.0359993 |
| 298 | 0.6199989 |
| 299 | -0.0320015 |
| 300 | 0.2440033 |
| 301 | 0.5159988 |
| 302 | -0.2439995 |
| 303 | -3.4039993 |
| 304 | -1.6480026 |
| 305 | -0.1159973 |
| 306 | 0.0439987 |
| 307 | 0.2960014 |
| 308 | 0.0639992 |
| 309 | 0.6240005 |
| 310 | 0.3039970 |
| 311 | -0.1639977 |
| 312 | 1.6320000 |
| 313 | -0.7520027 |
| 314 | 0.5400009 |
| 315 | 0.0880013 |
| 316 | 1.5760002 |
| 317 | -2.0600014 |
| 318 | -0.5319977 |
| 319 | 0.5079994 |
| 320 | -0.5960007 |
| 321 | 0.8320007 |
| 322 | -4.7600021 |
| 323 | -1.2239990 |
| 324 | -0.8880005 |
| 325 | 0.6760025 |
| 326 | -0.1400032 |
| 327 | -0.6359978 |
| 328 | 1.1359978 |
| 329 | 0.0760002 |
| 330 | -0.5079994 |
| 331 | -0.6320000 |
| 332 | 0.7719994 |
| 333 | 0.2240028 |
| 334 | 0.3359985 |
| 335 | -1.3639984 |
| 336 | 0.0919991 |
| 337 | 0.5239983 |
| 338 | 0.2000008 |
| 339 | -0.0839996 |
| 340 | 0.2840004 |
| 341 | 0.9759979 |
| 342 | -1.5480003 |
| 343 | 1.0840034 |
| 344 | -0.3160019 |
| 345 | 0.9560013 |
| 346 | 0.3799973 |
| 347 | 1.8160019 |
| 348 | 1.0799980 |
| 349 | 0.6920013 |
| 350 | -0.1879997 |
| 351 | 0.6440010 |
| 352 | -0.0839996 |
| 353 | -1.0880013 |
| 354 | 1.4799995 |
| 355 | -1.0159988 |
| 356 | -0.7280006 |
| 357 | 0.8880005 |
| 358 | -2.8800011 |
| 359 | 0.4200020 |
| 360 | -2.1119995 |
| 361 | -0.3800011 |
| 362 | -3.0520020 |
| 363 | 0.0880013 |
| 364 | 0.7280006 |
| 365 | 1.5319977 |
| 366 | 1.3080025 |
| 367 | -0.9200020 |
| 368 | -0.0399971 |
| 369 | -2.3240013 |
| 370 | 1.3159981 |
| 371 | -0.3959999 |
| 372 | 0.9280014 |
| 373 | 0.3199997 |
| 374 | 0.6800003 |
| 375 | -0.6959991 |
| 376 | 0.1399994 |
| 377 | 0.4360008 |
| 378 | -0.4160004 |
| 379 | 0.6040001 |
| 380 | 0.5079994 |
| 381 | 1.5719986 |
| 382 | -0.2239990 |
| 383 | -0.2360001 |
| 384 | 0.0960007 |
| 385 | 1.2840004 |
| 386 | 0.6839981 |
| 387 | 0.1119995 |
| 388 | 1.4320030 |
| 389 | -2.5279999 |
| 390 | 0.8879967 |
| 391 | 0.3200035 |
| 392 | 0.9319992 |
| 393 | 0.4519997 |
| 394 | 0.6040001 |
| 395 | 1.2360001 |
| 396 | 3.7719994 |
| 397 | 0.0439987 |
| 398 | 2.4760017 |
| 399 | -0.7639999 |
| 400 | -0.1800003 |
| 401 | -0.2000008 |
| 402 | -0.7039986 |
| 403 | 0.1959991 |
| 404 | 0.2039986 |
| 405 | -1.1879997 |
| 406 | -1.5279999 |
| 407 | -1.4519997 |
| 408 | 2.0559998 |
| 409 | 1.9560013 |
| 410 | 0.0120010 |
| 411 | 1.8959999 |
| 412 | -2.0040016 |
| 413 | -0.1479988 |
| 414 | -0.4000015 |
| 415 | 0.6720009 |
| 416 | 0.8320007 |
| 417 | -0.2120018 |
| 418 | 0.5880013 |
| 419 | 0.2360001 |
| 420 | -0.8680000 |
| 421 | -1.5320015 |
| 422 | 1.0839996 |
| 423 | -1.5119972 |
| 424 | 1.4559975 |
| 425 | 2.1679993 |
| 426 | -1.1559982 |
| 427 | 2.4280014 |
| 428 | -0.6040001 |
| 429 | 1.5799980 |
| 430 | 0.2120018 |
| 431 | 0.5439987 |
| 432 | 0.6760025 |
| 433 | 0.6879959 |
| 434 | 0.0640030 |
| 435 | 0.5359955 |
| 436 | 0.5839996 |
| 437 | 1.6960068 |
| 438 | -0.6320038 |
| 439 | -0.6319962 |
| 440 | 0.4319992 |
| 441 | -0.7400055 |
| 442 | 0.3400040 |
| 443 | 1.7639999 |
| 444 | 0.0359955 |
| 445 | -1.3879929 |
| 446 | -2.3800049 |
| 447 | 1.4560013 |
| 448 | -0.5439987 |
| 449 | 3.8239975 |
| 450 | 1.8759995 |
| 451 | 2.8280029 |
| 452 | 0.3279953 |
| 453 | 1.4720001 |
| 454 | -1.0039978 |
| 455 | -2.7439957 |
| 456 | -3.8400040 |
| 457 | 0.5719986 |
| 458 | 1.8520050 |
| 459 | -1.2200012 |
| 460 | -1.9080048 |
| 461 | -0.0279999 |
| 462 | 4.6160049 |
| 463 | 0.3600006 |
| 464 | -0.9360046 |
| 465 | 1.2360001 |
| 466 | 0.7880020 |
| 467 | 1.9520035 |
| 468 | 1.3639984 |
| 469 | -0.7399979 |
| 470 | 1.5000000 |
| 471 | 0.4159927 |
| 472 | -0.2119980 |
| 473 | 1.1800003 |
| 474 | -0.2880020 |
| 475 | 2.4880066 |
| 476 | 0.1879959 |
| 477 | 0.0520020 |
| 478 | -1.3359985 |
| 479 | -0.3520050 |
| 480 | -0.3040009 |
| 481 | 0.2400055 |
| 482 | 0.8559952 |
| 483 | -1.0599976 |
| 484 | -1.2959976 |
| 485 | -1.0159988 |
| 486 | 3.5039978 |
| 487 | -0.4199982 |
| 488 | 1.4399948 |
| 489 | 1.0400009 |
| 490 | -1.1480026 |
| 491 | 2.1040039 |
| 492 | -2.9919968 |
| 493 | 0.8879929 |
| 494 | -3.7919998 |
| 495 | 0.5440063 |
| 496 | 2.9879990 |
| 497 | -0.6080017 |
| 498 | -0.0360031 |
| 499 | 1.3400040 |
| 500 | 1.8880005 |
| 501 | -0.5960007 |
| 502 | 0.8959961 |
| 503 | 0.6000061 |
| 504 | 0.4559937 |
| 505 | 0.2520065 |
| 506 | 0.8799973 |
| 507 | -1.4199982 |
| 508 | 0.5519943 |
| 509 | -0.3959961 |
| 510 | 2.5520020 |
| 511 | 0.7119980 |
| 512 | 1.5279999 |
| 513 | -0.7360001 |
| 514 | 1.3720016 |
| 515 | -0.0040054 |
| 516 | 1.0080032 |
| 517 | -0.5599976 |
| 518 | 0.0839996 |
| 519 | 2.6839981 |
| 520 | -1.3280029 |
| 521 | 1.7040024 |
| 522 | 1.5920029 |
| 523 | -0.7360001 |
| 524 | -0.0279999 |
| 525 | 0.8159943 |
| 526 | 2.0040054 |
| 527 | -1.5200043 |
| 528 | -2.0199966 |
| 529 | 1.6599960 |
| 530 | 2.2800064 |
| 531 | 1.2439957 |
| 532 | 0.8720016 |
| 533 | -0.1600037 |
| 534 | 1.5520020 |
| 535 | -0.4079971 |
| 536 | 0.5000000 |
| 537 | -0.4800034 |
| 538 | 0.1839981 |
| 539 | 0.8560028 |
| 540 | -0.7239990 |
| 541 | 2.8840027 |
| 542 | 0.3239975 |
| 543 | 2.4400024 |
| 544 | 1.9839935 |
| 545 | -1.3479996 |
| 546 | -0.4799957 |
| 547 | 0.2200012 |
| 548 | 1.0079956 |
| 549 | -0.7879944 |
| 550 | 4.9519958 |
| 551 | 5.2559967 |
| 552 | 2.5040054 |
| 553 | -1.5999985 |
| 554 | 1.4639969 |
| 555 | -1.0279999 |
| 556 | -0.2839966 |
| 557 | -0.6920013 |
| 558 | 2.7959976 |
| 559 | 1.4680023 |
| 560 | -2.7560043 |
| 561 | -1.5239944 |
| 562 | -2.3640060 |
| 563 | 1.2239990 |
| 564 | 0.8640060 |
| 565 | 3.8320007 |
| 566 | -3.0720062 |
| 567 | 2.4760056 |
| 568 | 1.6399994 |
| 569 | 2.3720016 |
| 570 | 1.3319931 |
| 571 | -1.6999969 |
| 572 | -2.6679993 |
| 573 | 2.1719971 |
| 574 | 2.5160065 |
| 575 | -2.4440002 |
| 576 | -1.9520035 |
| 577 | 0.6159973 |
| 578 | -0.0999985 |
| 579 | -5.4280014 |
| 580 | 1.4640045 |
| 581 | 0.3799973 |
| 582 | 1.0120010 |
| 583 | -1.8280029 |
| 584 | -0.9679947 |
| 585 | 1.0119934 |
| 586 | 0.8080063 |
| 587 | 3.5680008 |
| 588 | 0.5439987 |
| 589 | -4.5320053 |
| 590 | -5.0759964 |
| 591 | 0.3799973 |
| 592 | 1.2840042 |
| 593 | 2.3839951 |
| 594 | -3.6520004 |
| 595 | 3.8600006 |
| 596 | 1.3120041 |
| 597 | 3.1279984 |
| 598 | -0.9800034 |
| 599 | -0.1479950 |
| 600 | -0.0879974 |
| 601 | 1.4079971 |
| 602 | 1.4840012 |
| 603 | 0.5919952 |
| 604 | 4.5800018 |
| 605 | 2.1520081 |
| 606 | 0.5319977 |
| 607 | 0.3559875 |
| 608 | 0.3800049 |
| 609 | -1.3519897 |
| 610 | -3.7120056 |
| 611 | -0.8079987 |
| 612 | 2.7079926 |
| 613 | 3.5839996 |
| 614 | -4.8919983 |
| 615 | 1.7279968 |
| 616 | 0.5960083 |
| 617 | 3.3919983 |
| 618 | 1.1159973 |
| 619 | 4.0000000 |
| 620 | -0.8520050 |
| 621 | -6.3599854 |
| 622 | 1.4879913 |
| 623 | 2.1159973 |
| 624 | -2.8159943 |
| 625 | 2.3520050 |
| 626 | 0.1359863 |
| 627 | 0.8640137 |
| 628 | -0.4000092 |
| 629 | -4.6839905 |
| 630 | -1.3280029 |
| 631 | 2.3040009 |
| 632 | -2.3400116 |
| 633 | 6.3640137 |
| 634 | -4.4760132 |
| 635 | -10.7399979 |
| 636 | 3.1400070 |
| 637 | -4.1160049 |
| 638 | -4.3119965 |
| 639 | 10.0800018 |
| 640 | 2.0799942 |
| 641 | -2.4079971 |
| 642 | 6.4840012 |
| 643 | -0.4120026 |
| 644 | -6.3199997 |
| 645 | 8.3920059 |
| 646 | -5.5440063 |
| 647 | 4.3639984 |
| 648 | -1.3199921 |
| 649 | 3.4879913 |
| 650 | 3.5640106 |
| 651 | 0.3439941 |
| 652 | 7.4599915 |
| 653 | -0.6679993 |
| 654 | 0.2960052 |
| 655 | -2.7839966 |
| 656 | -0.1520081 |
| 657 | -10.5119934 |
| 658 | -4.3919983 |
| 659 | -7.4599991 |
| 660 | 4.2039948 |
| 661 | 0.2639999 |
| 662 | 4.0200043 |
| 663 | -0.4600067 |
| 664 | -1.1080017 |
| 665 | -5.1639938 |
| 666 | 1.8639984 |
| 667 | -1.6279984 |
| 668 | -0.5240021 |
| 669 | -0.8679962 |
| 670 | -6.5360031 |
| 671 | 0.6880035 |
| 672 | -6.9680023 |
| 673 | -0.7200012 |
| 674 | -0.5719986 |
| 675 | 4.9759979 |
| 676 | 6.0320053 |
| 677 | 1.9759979 |
| 678 | 3.0800018 |
| 679 | -5.1520004 |
| 680 | 6.9319992 |
| 681 | -2.8440018 |
| 682 | 3.0559998 |
| 683 | 5.9920044 |
| 684 | -1.7920074 |
| 685 | -6.0359955 |
| 686 | 0.0319977 |
| 687 | 4.8280029 |
| 688 | -0.8240051 |
| 689 | -3.9279938 |
| 690 | -2.2760010 |
| 691 | -2.9800034 |
| 692 | -5.1559982 |
| 693 | 12.7760010 |
| 694 | 3.4080048 |
| 695 | 7.8199921 |
| 696 | -2.6759949 |
| 697 | 2.7919922 |
| 698 | -3.3840027 |
| 699 | -0.3559875 |
| 700 | -17.6360092 |
| 701 | -5.8159943 |
| 702 | 4.2399979 |
| 703 | -0.2679977 |
| 704 | -3.0520020 |
| 705 | -1.4759979 |
| 706 | 3.1520004 |
| 707 | 5.6879959 |
| 708 | 2.3759995 |
| 709 | 6.5960007 |
| 710 | -2.1760025 |
| 711 | 4.4640045 |
| 712 | -1.7039948 |
| 713 | 5.7119904 |
| 714 | -1.1920013 |
| 715 | 2.3200073 |
| 716 | 3.5800018 |
| 717 | -2.2200012 |
| 718 | -0.0760040 |
| 719 | -1.0919952 |
| 720 | 3.0719910 |
| 721 | -1.9199982 |
| 722 | -3.9279938 |
| 723 | 2.4199982 |
| 724 | -0.9160004 |
| 725 | -3.1040039 |
| 726 | 0.8119965 |
| 727 | 4.3040009 |
| 728 | -3.6399994 |
| 729 | -0.5359955 |
| 730 | 1.9080048 |
| 731 | 2.1559906 |
| 732 | -7.7279968 |
| 733 | -6.7879944 |
| 734 | 7.6799927 |
| 735 | -6.7959976 |
| 736 | -2.4720001 |
| 737 | 3.3320007 |
| 738 | -7.8560028 |
| 739 | 1.2040024 |
| 740 | -2.1959991 |
| 741 | 0.3359985 |
| 742 | -1.1399994 |
| 743 | -7.2600021 |
| 744 | -8.4599991 |
| 745 | 6.6280060 |
| 746 | -0.3320007 |
| 747 | 2.2799988 |
| 748 | 5.9560013 |
| 749 | -2.3920059 |
| 750 | 2.8960037 |
| 751 | -4.8919983 |
| 752 | 1.8320007 |
| 753 | 4.0479965 |
| 754 | 0.4359970 |
| 755 | -0.2119980 |
| 756 | 0.5920029 |
| 757 | 2.7919998 |
| 758 | 1.4280014 |
| 759 | -1.4920044 |
| 760 | -2.0319977 |
| 761 | 5.6640015 |
| 762 | -2.6320038 |
| 763 | 0.1320038 |
| 764 | 3.3639984 |
| 765 | -1.9400024 |
| 766 | 1.1880035 |
| 767 | -6.0760040 |
| 768 | -8.7279968 |
| 769 | 1.0960007 |
| 770 | 3.3160019 |
| 771 | -5.5160065 |
| 772 | 2.1040039 |
| 773 | 4.8079987 |
| 774 | -1.0279999 |
| 775 | 2.2239990 |
| 776 | 4.6600037 |
| 777 | -0.5600052 |
| 778 | -3.1199951 |
| 779 | -0.2400055 |
| 780 | -1.1799927 |
| 781 | 1.5799942 |
| 782 | 3.2600021 |
| 783 | 1.7399979 |
| 784 | 3.5000000 |
| 785 | 2.1600037 |
| 786 | -0.8400040 |
| 787 | -5.3199997 |
| 788 | -1.4199982 |
| 789 | -2.5400009 |
| 790 | 5.1600037 |
| 791 | -4.4400024 |
| 792 | 2.4000015 |
| 793 | 0.8799973 |
| 794 | 4.4400024 |
| 795 | -1.2600021 |
| 796 | -0.4599991 |
| 797 | -9.4800034 |
| 798 | 3.3400040 |
| 799 | 2.9400024 |
| 800 | 0.5000000 |
| 801 | 0.8199997 |
| 802 | 0.6199951 |
| 803 | 5.0200043 |
| 804 | -20.5400009 |
| 805 | 1.5599976 |
| 806 | -0.1399994 |
| 807 | -2.2600021 |
| 808 | 3.4000015 |
| 809 | -2.7399979 |
| 810 | 3.5400009 |
| 811 | -0.4199982 |
| 812 | -2.2800064 |
| 813 | -2.0199966 |
| 814 | 0.6800003 |
| 815 | -1.9599991 |
| 816 | -1.9400024 |
| 817 | 0.5400009 |
| 818 | -0.8600006 |
| 819 | 1.4199982 |
| 820 | -2.5999985 |
| 821 | -1.7600021 |
| 822 | 0.7000046 |
| 823 | -0.7000046 |
| 824 | -0.2799988 |
| 825 | 0.0999985 |
| 826 | 2.1000061 |
| 827 | 1.5999985 |
| 828 | 2.5199966 |
| 829 | 3.7600021 |
| 830 | 4.5000000 |
| 831 | -7.9400024 |
| 832 | 0.1399994 |
| 833 | -2.2399979 |
| 834 | -0.8000031 |
| 835 | 0.6400070 |
| 836 | 0.0599976 |
| 837 | -1.9400024 |
| 838 | -2.1199951 |
| 839 | -0.3000031 |
| 840 | -0.5999985 |
| 841 | 0.4199982 |
| 842 | 2.9400024 |
| 843 | -0.6800003 |
| 844 | -1.0000000 |
| 845 | 3.6599960 |
| 846 | 3.4400024 |
| 847 | 1.8199997 |
| 848 | 0.3000031 |
| 849 | -4.5400009 |
| 850 | -0.4800034 |
| 851 | -5.2999954 |
| 852 | -0.7400055 |
| 853 | 1.9800034 |
| 854 | -2.1399994 |
| 855 | 4.6599960 |
| 856 | 2.2000046 |
| 857 | 0.4599991 |
| 858 | -0.4000015 |
| 859 | 4.3199997 |
| 860 | 2.3000031 |
| 861 | 2.0399933 |
| 862 | -0.8599930 |
| 863 | 1.0399933 |
| 864 | 2.1800003 |
| 865 | 0.1200027 |
| 866 | -1.4800034 |
| 867 | -6.3799973 |
| 868 | -14.5999985 |
| 869 | 2.3399963 |
| 870 | 1.5200043 |
| 871 | 5.4799957 |
| 872 | -1.4399948 |
| 873 | 9.0199966 |
| 874 | 3.4800034 |
| 875 | -1.2200012 |
| 876 | 1.3600006 |
| 877 | -3.0200043 |
| 878 | -1.0999985 |
| 879 | -3.9799957 |
| 880 | 0.3399963 |
| 881 | -0.0800018 |
| 882 | 2.1399994 |
| 883 | -0.8799973 |
| 884 | -1.6599960 |
| 885 | -0.9800034 |
| 886 | 3.1399994 |
| 887 | 4.4400024 |
| 888 | -3.5400009 |
| 889 | -3.8800049 |
| 890 | -1.6399994 |
| 891 | 1.5000000 |
| 892 | 2.6200027 |
| 893 | -1.5599976 |
| 894 | 3.0199966 |
| 895 | 2.1399994 |
| 896 | -0.8799973 |
| 897 | -4.2000046 |
| 898 | -0.5000000 |
| 899 | -3.8799973 |
| 900 | 0.9800034 |
| 901 | -0.9200058 |
| 902 | -1.7199936 |
| 903 | -0.8400040 |
| 904 | -0.3600006 |
| 905 | -1.3799973 |
| 906 | 2.6999969 |
| 907 | -0.6399994 |
| 908 | -0.7399979 |
| 909 | -0.4400024 |
| 910 | -1.6999969 |
| 911 | 2.4799957 |
| 912 | 1.4400024 |
| 913 | -1.9800034 |
| 914 | 0.7600021 |
| 915 | -0.7999954 |
| 916 | 0.9399948 |
| 917 | 2.4599991 |
| 918 | -3.4399948 |
| 919 | 0.0799942 |
| 920 | 1.7000046 |
| 921 | 2.4799957 |
| 922 | 1.1600037 |
| 923 | 1.3399963 |
| 924 | 2.9000015 |
| 925 | -1.0199966 |
| 926 | -3.3000031 |
| 927 | 2.5800018 |
| 928 | 1.5000000 |
| 929 | 1.5199966 |
| 930 | -1.6999969 |
| 931 | -2.0199966 |
| 932 | 3.5799942 |
| 933 | 11.7200012 |
| 934 | -3.6399994 |
| 935 | 3.5800018 |
| 936 | 1.0800018 |
| 937 | 2.0799942 |
| 938 | 3.2400055 |
| 939 | -2.8400040 |
| 940 | -1.5000000 |
| 941 | -1.8600006 |
| 942 | 1.0000000 |
| 943 | 0.7400055 |
| 944 | -3.4400024 |
| 945 | 1.5199966 |
| 946 | -0.3600006 |
| 947 | -2.0000000 |
| 948 | 2.4000015 |
| 949 | 2.4000015 |
| 950 | 0.9400024 |
| 951 | -1.8800049 |
| 952 | 2.8400040 |
| 953 | -3.6800003 |
| 954 | -2.3800049 |
| 955 | 1.0200043 |
| 956 | 3.2399979 |
| 957 | -1.0000000 |
| 958 | 2.9800034 |
| 959 | -1.3199997 |
| 960 | 0.6399994 |
| 961 | 1.8399963 |
| 962 | -2.5000000 |
| 963 | 4.0800018 |
| 964 | -0.5199966 |
| 965 | 1.9799957 |
| 966 | 0.5799942 |
| 967 | 1.0800018 |
| 968 | 2.0000000 |
| 969 | 1.3000031 |
| 970 | -0.3000031 |
| 971 | -0.6799927 |
| 972 | -1.6399994 |
| 973 | 0.7399902 |
| 974 | 2.7800140 |
| 975 | 0.1799927 |
| 976 | 0.3800049 |
| 977 | 2.3999939 |
| 978 | -0.6399994 |
| 979 | -0.7200012 |
| 980 | 0.2200012 |
| 981 | -1.0000000 |
| 982 | -0.8399963 |
| 983 | -0.2400055 |
| 984 | -1.0599976 |
| 985 | -6.1600037 |
| 986 | 0.4600067 |
| 987 | -0.6800003 |
| 988 | -0.0200043 |
| 989 | -0.4799957 |
| 990 | -2.7400055 |
| 991 | -1.8999939 |
| 992 | 1.3799973 |
| 993 | 6.8199921 |
| 994 | 2.9800110 |
| 995 | 0.6399994 |
| 996 | 1.2200012 |
| 997 | 0.9799957 |
| 998 | 0.5399933 |
| 999 | 1.5800018 |
| 1000 | -0.5000000 |
| 1001 | 0.2400055 |
| 1002 | -0.5800018 |
| 1003 | 2.9799957 |
| 1004 | -0.2200012 |
| 1005 | -2.8600006 |
| 1006 | -3.0000000 |
| 1007 | 1.1600037 |
| 1008 | 1.1999969 |
| 1009 | 1.5400085 |
| 1010 | -0.4199982 |
| 1011 | 0.6199951 |
| 1012 | -1.0200043 |
| 1013 | 6.2799988 |
| 1014 | -3.4599915 |
| 1015 | -4.9600067 |
| 1016 | 3.8800049 |
| 1017 | -1.9799957 |
| 1018 | 3.6599884 |
| 1019 | 1.3000031 |
| 1020 | 1.9800110 |
| 1021 | 4.2199860 |
| 1022 | -1.6199951 |
| 1023 | -2.2399902 |
| 1024 | -1.1000061 |
| 1025 | 1.5000000 |
| 1026 | -0.5400085 |
| 1027 | -1.0599976 |
| 1028 | 5.2000122 |
| 1029 | 1.3399963 |
| 1030 | 1.5199890 |
| 1031 | 1.0000000 |
| 1032 | -1.8599854 |
| 1033 | -0.7000122 |
| 1034 | 0.6800079 |
| 1035 | 0.0599976 |
| 1036 | 6.3600006 |
| 1037 | 0.9199982 |
| 1038 | -3.1999969 |
| 1039 | 3.0599976 |
| 1040 | 1.3399963 |
| 1041 | 2.7200012 |
| 1042 | -0.0800018 |
| 1043 | -3.0999908 |
| 1044 | -1.9800110 |
| 1045 | 0.9200134 |
| 1046 | -1.7800140 |
| 1047 | 2.1399994 |
| 1048 | -2.1599884 |
| 1049 | -1.3600006 |
| 1050 | 0.4400024 |
| 1051 | 1.8399963 |
| 1052 | 0.6199951 |
| 1053 | -7.4199982 |
| 1054 | 2.8800049 |
| 1055 | -37.9800034 |
| 1056 | 1.8600006 |
| 1057 | 1.7399979 |
| 1058 | 2.4199982 |
| 1059 | 1.5600052 |
| 1060 | -1.7600021 |
| 1061 | -0.0400009 |
| 1062 | -0.9800034 |
| 1063 | -1.9799957 |
| 1064 | -1.5400009 |
| 1065 | -0.5000000 |
| 1066 | 2.4599991 |
| 1067 | -0.1399994 |
| 1068 | 1.7399979 |
| 1069 | -2.0799942 |
| 1070 | 1.3199997 |
| 1071 | -0.2200012 |
| 1072 | 3.8600006 |
| 1073 | 1.1800003 |
| 1074 | -2.0200043 |
| 1075 | 1.3199997 |
| 1076 | 2.0800018 |
| 1077 | 0.6399994 |
| 1078 | 1.8799973 |
| 1079 | 1.8000031 |
| 1080 | 2.0000000 |
| 1081 | -3.1399994 |
| 1082 | -1.7600021 |
| 1083 | 0.9599991 |
| 1084 | -4.1599960 |
| 1085 | -1.1399994 |
| 1086 | -0.0200043 |
| 1087 | -0.5799942 |
| 1088 | -2.7400055 |
| 1089 | -1.0799942 |
| 1090 | -0.2600021 |
| 1091 | -1.3600006 |
| 1092 | 1.4199982 |
| 1093 | 0.9199982 |
| 1094 | 0.1600037 |
| 1095 | -0.0999985 |
| 1096 | -2.0400009 |
| 1097 | 1.2999954 |
| 1098 | -0.4799957 |
| 1099 | 3.8199997 |
| 1100 | -0.8400040 |
| 1101 | -0.2199936 |
| 1102 | -0.8600006 |
| 1103 | -1.9400024 |
| 1104 | -0.4800034 |
| 1105 | 2.7600021 |
| 1106 | -0.9799957 |
| 1107 | -1.9600067 |
| 1108 | 0.2000046 |
| 1109 | -2.8199997 |
| 1110 | -0.5200043 |
| 1111 | 2.8800049 |
| 1112 | -3.2000046 |
| 1113 | -0.4399948 |
| 1114 | 1.0799942 |
| 1115 | 0.1200027 |
| 1116 | 1.6999969 |
| 1117 | 0.2800064 |
| 1118 | 0.5599976 |
| 1119 | -14.2200012 |
| 1120 | -0.7600021 |
| 1121 | -1.1599960 |
| 1122 | 1.4400024 |
| 1123 | -1.1400070 |
| 1124 | 2.3000031 |
| 1125 | -1.0400009 |
| 1126 | 2.0400009 |
| 1127 | -0.5199966 |
| 1128 | -1.2800064 |
| 1129 | 1.6800003 |
| 1130 | 1.3000031 |
| 1131 | 1.3400040 |
| 1132 | 0.7799988 |
| 1133 | 0.9199982 |
| 1134 | 0.6200027 |
| 1135 | -1.9000015 |
| 1136 | 1.6199951 |
| 1137 | -2.0799942 |
| 1138 | -0.1399994 |
| 1139 | -0.4800034 |
| 1140 | 0.5400009 |
| 1141 | -1.3799973 |
| 1142 | -1.0200043 |
| 1143 | 1.6800003 |
| 1144 | 2.9599991 |
| 1145 | 2.8000031 |
| 1146 | 0.6199951 |
| 1147 | 3.4000015 |
| 1148 | 1.5600052 |
| 1149 | -3.4400024 |
| 1150 | 3.2999954 |
| 1151 | -0.6199951 |
| 1152 | 2.1199951 |
| 1153 | 1.5200043 |
| 1154 | 1.0599976 |
| 1155 | -0.9199982 |
| 1156 | 0.1200027 |
| 1157 | -1.7400055 |
| 1158 | -1.5000000 |
| 1159 | 0.1399994 |
| 1160 | 1.0800018 |
| 1161 | -0.0999985 |
| 1162 | 5.8399963 |
| 1163 | -3.7199936 |
| 1164 | 3.9399948 |
| 1165 | 1.7600021 |
| 1166 | 0.3799973 |
| 1167 | -0.8799973 |
| 1168 | -2.7600021 |
| 1169 | 1.5800018 |
| 1170 | -1.0199966 |
| 1171 | 3.5199966 |
| 1172 | 3.5000076 |
| 1173 | 3.3999939 |
| 1174 | -1.1199951 |
| 1175 | 1.1399994 |
| 1176 | 0.6599884 |
| 1177 | 0.5200043 |
| 1178 | -4.4400024 |
| 1179 | 3.9199982 |
| 1180 | -0.0199890 |
| 1181 | -0.7000122 |
| 1182 | 2.7800140 |
| 1183 | 5.0999908 |
| 1184 | -4.3600006 |
| 1185 | 5.1800079 |
| 1186 | -0.3600006 |
| 1187 | -1.7200012 |
| 1188 | 2.9599915 |
| 1189 | -1.2399902 |
| 1190 | -3.5599976 |
| 1191 | -1.1399994 |
| 1192 | -5.1400146 |
| 1193 | 3.2400055 |
| 1194 | 1.3600006 |
| 1195 | 1.5200043 |
| 1196 | 3.0999908 |
| 1197 | -0.8799896 |
| 1198 | -0.8000031 |
| 1199 | 2.6600037 |
| 1200 | 1.8999939 |
| 1201 | -4.6999969 |
| 1202 | 4.5599976 |
| 1203 | 3.5000000 |
| 1204 | -3.4400024 |
| 1205 | 0.2200012 |
| 1206 | -0.2400055 |
| 1207 | -2.3199921 |
| 1208 | -4.2799988 |
| 1209 | -2.6399994 |
| 1210 | 1.6600037 |
| 1211 | 0.4799957 |
| 1212 | 0.1600037 |
| 1213 | 1.3999939 |
| 1214 | -0.5399933 |
| 1215 | -0.8200073 |
| 1216 | -0.8800049 |
| 1217 | -0.3600006 |
| 1218 | 2.0800018 |
| 1219 | -0.9799957 |
| 1220 | 2.0599976 |
| 1221 | 4.9400024 |
| 1222 | -4.1799927 |
| 1223 | 3.3600006 |
| 1224 | -5.0400085 |
| 1225 | -0.3399963 |
| 1226 | -0.1800079 |
| 1227 | 0.1800079 |
| 1228 | -3.5400085 |
| 1229 | -3.4399872 |
| 1230 | -0.5000000 |
| 1231 | 0.3600006 |
| 1232 | -1.2600098 |
| 1233 | -1.2599945 |
| 1234 | 0.5799942 |
| 1235 | 2.2200089 |
| 1236 | 1.2999878 |
| 1237 | -2.8399963 |
| 1238 | 0.3000031 |
| 1239 | 0.2400055 |
| 1240 | -2.2400055 |
| 1241 | 0.6999969 |
| 1242 | 3.3399963 |
| 1243 | -12.6399918 |
| 1244 | -0.1399994 |
| 1245 | 1.2399979 |
| 1246 | 0.4000015 |
| 1247 | -3.0400009 |
| 1248 | 0.0999985 |
| 1249 | 2.9400024 |
| 1250 | 1.1399994 |
| 1251 | 1.0599976 |
| 1252 | 1.0200043 |
| 1253 | 0.3799973 |
| 1254 | 1.8199997 |
| 1255 | -2.0599976 |
| 1256 | 0.5199966 |
| 1257 | -1.2799988 |
| 1258 | 0.8399963 |
alpha <- 0.1 # Velocidad de reversión
beta <- 0.0105 # Media a largo plazo (semestral) (Secured Overnight Financing Rate (SORF))
sigma <- 0.01 # Volatilidad
r0 <- 0.026 # Tasa inicial SORF (semestral)
T <- 5 # Periodo de simulación en años
dt <- 1/2 # Paso de tiempo en años (semestral)
n <- T / dt # Número de pasos de tiempo
set.seed(123) # Semilla
r <- numeric(n + 1)
r[1] <- r0
for (i in 2:(n + 1)) {
dr <- alpha * (beta - r[i-1]) * dt + sigma * sqrt(dt) * rnorm(1)
r[i] <- r[i-1] + dr
}
rates <- r[-1] # Quitamos la tasa inicial para obtener solo las tasas futuras
inversion <- 100
Tasa_fija <- 0.0333
Pago_fijo <- inversion * Tasa_fija* dt
Flujos_fijos <- rep(Pago_fijo, n)
Flujos_flotantes <- inversion * rates * dt
Tasa_descuento <- r0
f_descuento <- exp(-Tasa_descuento * seq(dt, T, by = dt))
Valor_presente_fijo <- sum(Flujos_fijos * f_descuento)
Valor_presente_flotante <- sum(Flujos_flotantes * f_descuento)
diferencias <- Flujos_flotantes - Flujos_fijos
diferencias_valor_presente <- sum(diferencias * f_descuento)
if (diferencias_valor_presente > 0) {
ventaja <- "Pagador de la tasa flotante"
} else {
ventaja <- "Pagador de la tasa fija"
}
cat("Valor presente de los pagos fijos.:", Valor_presente_fijo, "\n")
## Valor presente de los pagos fijos.: 15.5119
cat("Valor presente de los pagos flotantes:", Valor_presente_flotante, "\n")
## Valor presente de los pagos flotantes: 13.48283
cat("Valor presente de las diferencias.:", diferencias_valor_presente, "\n")
## Valor presente de las diferencias.: -2.029069
cat("Ventaja:", ventaja, "\n")
## Ventaja: Pagador de la tasa fija
La persona que obtiene ventaja en la posición después de realizar las valoraciones es el pagador de la tasa fija.