-
Notifications
You must be signed in to change notification settings - Fork 2
/
Baselines.Rmd
119 lines (105 loc) · 3.77 KB
/
Baselines.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# CCC Dynamic Hedge(Training set)
```{r,eval=TRUE, echo=FALSE}
# remember to import library("rugarch") before running the program
library("readxl")
testing_size = 80
data = read_excel("/Users/xinjing/Desktop/dynamic hedge/CAD.xlsx")
basis = data$log_spot - data$log_futures
basis = basis[1:(length(basis)- testing_size - 1)]
basis_matrix = matrix(basis,nrow = length(basis),ncol = 1,byrow = TRUE)
s = data$diff_spot[2:length(data$diff_spot)]
s = s[1:(length(s)-testing_size)]
s_matrix = matrix(s,nrow = length(s),ncol = 1,byrow = TRUE)
f = data$diff_futures[2:length(data$diff_futures)]
f = f[1:(length(f)-testing_size)]
f_matrix = matrix(f,nrow = length(s),ncol = 1,byrow = TRUE)
spec1= ugarchspec(variance.model=list(model="sGARCH"), mean.model=list(armaOrder=c(0,0), include.mean = TRUE, external.regressors = basis_matrix))
fit1=ugarchfit(data=s_matrix,spec=spec1,solver = "nloptr")
# Convergence of fit1
convergence(fit1)
fit2=ugarchfit(data=f_matrix,spec=spec1,solver = "nloptr")
# Convergence of fit2
convergence(fit2)
res1 = residuals(fit1)
res2 = residuals(fit2)
corr = cor(res1,res2)[1]
sigma1 = sigma(fit1)
sigma2 = sigma(fit2)
cov = sigma1 * sigma2 * corr
best = cov / (sigma2**2)
b = cov(s,f) / var(f)
# Without Hedging:
var(s)
# Naive Hedge:
var(s - f)
# Conventional Hedge:
var(s - b*f)
# Dynamic Hedge:
var(s - best*f)
```
# CCC Dynamic Hedge(Testing set)
```{r,eval=TRUE, echo=FALSE}
# remember to import library("rugarch") before running the program
library("readxl")
data = read_excel("/Users/xinjing/Desktop/dynamic hedge/BP.xlsx")
basis = data$log_spot - data$log_futures
basis = basis[1:(length(basis) - 1)]
# now length(basis) = length(s) - 1
s = data$diff_spot
s = s[2:length(s)]
f = data$diff_futures
f = f[2:length(f)]
# now length(basis) = length(s) = length(f)
static_ratios = c()
dynamic_ratios = c()
testing_size = 80
for (i in 0: (testing_size-1))
{# now getting the training set for each loop
print(paste0("Current iteration:", i))
basis1 = basis[1:(length(basis) - testing_size + i)]
basis_matrix = matrix(basis1,nrow = length(basis1),ncol = 1,byrow = TRUE)
spec1= ugarchspec(variance.model=list(model="sGARCH",garchOrder = c(4, 4)), mean.model=list(armaOrder=c(0,0), include.mean = TRUE, external.regressors = basis_matrix))
s1 = s[1:(length(s) - testing_size + i)]
s_matrix = matrix(s1,nrow = length(s1),ncol = 1,byrow = TRUE)
f1 = f[1:(length(f) - testing_size + i)]
f_matrix = matrix(f1,nrow = length(s1),ncol = 1,byrow = TRUE)
fit1=ugarchfit(data=s_matrix,spec=spec1,solver = "nloptr")
# Convergence of fit1
convergence(fit1)
fit2=ugarchfit(data=f_matrix,spec=spec1,solver = "nloptr")
# Convergence of fit2
convergence(fit2)
sigma1 = sigma(fit1) # sigma of spot
sigma2 = sigma(fit2) # sigma of futures
coef1 = coef(fit1)
coef2 = coef(fit2)
resid1 = residuals(fit1)
resid2 = residuals(fit2)
corr = cor(resid1,resid2)[1]
last_resid1 = resid1[length(resid1)]
last_resid2 = resid2[length(resid2)]
last_sigma1 = sigma1[length(sigma1)]
last_sigma2 = sigma1[length(sigma2)]
next_variance1 = coef1[3] + coef1[4]*(last_resid1**2) + coef1[5]*(last_sigma1**2)
next_variance2 = coef2[3] + coef2[4]*(last_resid2**2) + coef2[5]*(last_sigma2**2)
next_sigma1 = sqrt(next_variance1)
next_sigma2 = sqrt(next_variance2)
next_cov = next_sigma1 * next_sigma2 * corr
# Conventional Hedge Ratio
static_ratio = cov(s1,f1) / var(f1)
# Dynamic Hedge Ratio
dynamic_ratio = next_cov / (next_variance2)
static_ratios[i+1] <- static_ratio
dynamic_ratios[i+1] <- dynamic_ratio
}
testing_s = s[(length(s) - testing_size + 1) : length(s)]
testing_f = f[(length(f) - testing_size + 1) : length(f)]
# Without Hedging:
var(testing_s)
# Naive Hedge:
var(testing_s - testing_f)
# Conventional Hedge:
var(testing_s - static_ratios*testing_f)
# Dynamic Hedge:
var(testing_s - dynamic_ratios*testing_f)
```