Sie sind auf Seite 1von 15

Projekt Aktien mit Fremdwährung.

Rmd

Es wird einen Euro_Invester betrachtet, der ein Portfolio mit 14 Aktien von Danone S.A.in EUR und 9
Aktien von Walmart Inc.in USD h&alt. Die Wahl der Risikofaktoren ist ein Modellierungsproblem und
hängt vom jeweiligen Portfolio ab. Um diesen Portfolio zu sch&atzen, werden die Logarithmen der Preise
der Aktien sowie den Logarithmus des Wechselkurses (EUR pro USD) als Risikofaktoren verwendet. Alle
Rechnungen basieren sich auf dem Zeitraum vom 20.05.2005 bis zum 19.05.2015.

library(xts) #for na.omit

## Loading required package: zoo

##
## Attaching package: ’zoo’

## The following objects are masked from ’package:base’:


##
## as.Date, as.Date.numeric

require(zoo)
library(qrmtools) #for the data analysis

## Registered S3 method overwritten by ’quantmod’:


## method from
## as.zoo.data.frame zoo

library(qrmdata) #for the data


library(nvmix) #for rStudent()
library(SciViews) #for ln()
library(rmarkdown)

Nachdem die R packages hinzugef"ugt sind, kann man die Daten SP500_const (Liste von Aktienindizes von
500 Firmen), EURSTX_const (Euro Stoxx 50 Bestandteile) und EUR_USD (Wechselkurs) laden.

#load the data


data("SP500_const")
data("EURSTX_const")
data("EUR_USD")

Man bildet einen data.frame in dem gegebenen Zeitraum und extrahiert die Daten von Danone und Walmart.

#extract a time period


SP <- SP500_const['2005-05-20/2015-05-19', c("WMT")]

str(SP) #check the structure

1
## An ’xts’ object on 2005-05-20/2015-05-19 containing:
## Data: num [1:2516, 1] 37.5 38 37.9 37.6 37.6 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr "WMT"
## Indexed by objects of class: [Date] TZ: UTC
## xts Attributes:
## List of 2
## $ src : chr "yahoo"
## $ updated: POSIXct[1:1], format: "2016-01-03 03:42:24"

#head(SP, n=7) #show the beginning


#tail(SP, n=7) #show the end
SP_omit <- na.omit(SP) #remove days with missing values
#head(SP_omit, n=7)
#tail(SP_omit, n= 7)

time <- ("2005-05-20/2015-05-19")

STX <- EURSTX_const['2005-05-20/2015-05-19', c("BN.PA")]


STX_omit <- na.omit(STX)
EU <- 1/EUR_USD['2005-05-20/2015-05-19']
EU_omit <- na.omit(EU)

Mit dem Befehl “str” “uberpr”ufe ich die Strucktur von Daten und ihre Dimension. Wieter betrachte ich
die erste und letzte Zeile von Aktienindizes. Wie man sehen kann, es gibt keine grossen Steigungen oder
Senkungen, aber es gibt Tagen, wo Datenwerten fehlen. Diese entferne ich mit “na.omit()”.
Als n"achstes will ich die Daten verbinden und Grafiken erstellen.

#merge the three time series


all <- merge(SP_omit, STX_omit, EU_omit)
WMT <- STX_omit+EU_omit
all.con <- merge(SP_omit, WMT)
colnames(all.con) <- c("BN.PA", "WMT")

#plots
plot(SP_omit, xlab = "time", main = "Walmart stocks")

2
Walmart stocks 2005−05−20 / 2015−05−19

80 80

70 70

60 60

50 50

40 40

May 20 2005 May 01 2007 May 01 2009 May 02 2011 May 01 2013 Apr 30 2015

plot(STX_omit, xlab = "time", main = "Danone stocks" )

3
Danone stocks 2005−05−20 / 2015−05−19

60 60

50 50

40 40

30 30

May 20 2005 May 01 2007 May 01 2009 May 02 2011 May 01 2013 Apr 30 2015

plot(EU_omit, xlab = "time", main = "EUR to USD for our period")

4
EUR to USD for our period 2005−05−20 / 2015−05−19
0.95 0.95

0.90 0.90

0.85 0.85

0.80 0.80

0.75 0.75

0.70 0.70

0.65 0.65

May 20 2005 May 01 2007 May 01 2009 May 01 2011 May 01 2013 Apr 30 2015

Von Grafiken ist leich zu sehen, dass am Anfang unseres Zeitraumes die Aktienwerten sehr niedrig sind und
zwar im May 2005 die negativ sind. F&ur das gesamte Jahr 2005 realisiert WMT Inc. einen Verlust von
-11.40%. Im nächsten Jahr, 2006, sieht das Bild bisschen besser aus, wobei Verlust auf -1.32% reduziert
wurde. Ab 2007 beginnt die Firma positive Aktienwerten -1.32% bis Jahr 2015 -1.32%, wenn die Preise
stark gesunken werden. Bei der Grafik von Danone S.A. gibt es keine kritische Punkte. Die Preise sind in
dem Zeitraum stabil.
Jetzt ist die Zeit gekommen, die Risikofaktor&anderungen berechnet zu wenden. Xt , j = Zt + 1, j − Zt , j

#log returns and their plots


X_1 <- returns(SP_omit)
plot(X_1, xlab = "time", main = "risk factor changes Danone")

5
risk factor changes Danone 2005−05−23 / 2015−05−19

0.10 0.10

0.05 0.05

0.00 0.00

−0.05 −0.05

May 23 2005 May 01 2007 May 01 2009 May 02 2011 May 01 2013 Apr 30 2015

X_2. <- returns(STX_omit)


plot(X_2., xlab = "time", main = "risk factor changes Walmart")

6
risk factor changes Walmart 2005−05−23 / 2015−05−19

0.05 0.05

0.00 0.00

−0.05 −0.05

May 23 2005 May 01 2007 May 01 2009 May 02 2011 May 01 2013 Apr 30 2015

X_3. <- returns(EU_omit)


plot(X_3., xlab = "time", main = "risk factor changes exchange rates")

7
risk factor changes exchange rates 2005−05−21 / 2015−05−19

0.02 0.02

0.01 0.01

0.00 0.00

−0.01 −0.01

−0.02 −0.02

−0.03 −0.03

May 21 2005 May 01 2007 May 01 2009 May 01 2011 May 01 2013 Apr 30 2015

X_2 <- X_2. + X_3.


X <- merge(X_1, X_2)
X <- as.matrix(X)
colnames(X) <- c("BN.PA", "WMT")

Dazu sehen wir noch die Grafiken von der Risikofaktor&anderungen. Zu unseren Zwecken summiere ich die
letzte zwei “Anderungen (von Walmart und Wechselkurs). Ich will die Risikofaktor”anderungen als eine 2x2
Matrix haben.
Weiters betrachten wir die paarweise Scatterplots.

# pairwise scatterplots
pairs(as.zoo(all), main = "risk factors")

8
risk factors
30 40 50 60

80
WMT

60
40
50

BN.PA
30

0.95
0.80
EUR.USD

0.65
40 50 60 70 80 90 0.65 0.75 0.85 0.95

pairs(as.zoo(X), main = "risk factor changes")

9
risk factor changes

−0.05 0.00 0.05 0.10

0.05
BN.PA

−0.05
0.05

WMT
−0.05

−0.05 0.00 0.05 0.10

Ich verwende folgende Notation: St , 1 ist der Preis von Danoneaktien, St , 2 - Preis von Walmartaktien
und St , 3 ist der Wechselkurs. Wo es notwendig ist summiere ich St , 2 und St , 3. Mit gegebenen Preisen
ergibt sich Zt , j = exp(St , j) mit j von 1, 2, 3. Wie in der VO, Zt , j bezeichnet die Risikofaktoren jeweils 1
f&ur Danone usw. Wenn die Preise und Risikofaktoren bekannt sind, kann man den Portfoliowert und die
Risikoabbildung bestimmen. In unserem Fall lauten die wie folgt: ‘r‘Vt = λ1 ∗ St , 1 + λ2 ∗ (St , 2 + St , 3) =
λ1 ∗ exp(Zt , 1) + λ2 ∗ exp(Zt , 2 + Zt , 3) = λ1 ∗ exp(Zt , 1) + λ2 ∗ exp(Zt , 2 + Zt , 3) = f (t, Z)‘.Somit haben wir
eine Darstellung des Portfoliowertes in der Form Vt = f (t, Zt ), wobei f eine Risikoabbildung bezeichnet. Mit
Werten in der Angaben bekommen wir 1296.890721 als Ergebniss:

S_1 <- 55.89 # value of the Danone stocks today


exc.r <- 0.7763 #exchange rate
S_2 <- 73.63 # value of the Walmart stocks today
lambda_1 <- 14 #number of shares of Danone stocks
lambda_2 <- 9 #number of shares of Walmart stocks
lambda <- c(lambda_1, lambda_2)

#portfolio value
V_t <- lambda_1*S_1 + lambda_2*(S_2*exc.r)
print(paste("portfolio value:", V_t))

## [1] "portfolio value: 1296.890721"

w <- c((lambda_1*S_1)/V_t, (lambda_2*S_2*exc.r)/V_t) #weights

#risk map
risk_map <- function(time, STX_omit, SP_omit, EU_omit) {

10
lambda_1*exp(STX_omit)+lambda_2*exp(SP_omit+EU_omit)
}
#calculate the risk map for the given prices
print(paste("risk map:", risk_map(time, SciViews::ln(S_1), SciViews::ln(S_2), SciViews::ln(exc.r))))

## [1] "risk map: 1296.890721"

Wichtiger Wert in Portfoliobewertung ist der Verlusst und dazugeh&orige Verlusstoperor. Folgenden Formeln
geben uns der Verlust Lt + 1 bei Risikofaktoren log returns. . Zt ist bekannt zur Zeit t, heute. Zur Zeit
t + 1 sind die Risikofaktoren eine Zufallsvariable. Die Verlustverteilung wird durch die Verteilung der
Risikofaktoränderung Xt + 1 bestimmt. Wir berechnen den Verlustoperator.

#changes of prices
S_1_new <- 55
S_2_new <- 70*0.7763
V_t_new <- lambda_1*S_1_new + lambda_2*S_2_new

#changes of risk factors


Z_1 <- ln(55.89)
Z_1.new <- ln(55)
decrease.Z_1 <- (Z_1.new - Z_1)/Z_1
Z_2 <- ln(73.63)
Z_2.new <- ln(70)
decrease.Z_2 <- (Z_2.new - Z_2)/Z_2

X.1 <- Z_1.new - Z_1


X.2 <- Z_2.new+ln(0.7763) - Z_2+ln(0.7763)
X.new <- merge(X.1, X.2)
X.new <- as.matrix(X.1, X.2)
w_new <- c((lambda_1*S_1_new)/V_t_new, (lambda_2*S_2_new*0.7763)/V_t_new)
w1_new <- lambda_1*S_1_new/V_t_new
w2_new <- lambda_2*S_2_new*0.7763/V_t_new

#loss operator
loss_op <- function(X, w) {
-rowSums(expm1(X) * matrix(w, nrow = nrow(X), ncol = length(w), byrow = TRUE)) }

#loss
L_t_new <- -(V_t_new - V_t)
print(paste(L_t_new))

## [1] "37.821721"

Ergebnis: 37.821721. Oft ist praktisch die Delta Approximation von Verlust oder Verlustoperator zu be-
trachten. Diese kann man auch durch Gewichten ermitteln ld elta(x) = −Vt ∗ wt0 ∗ x = −Vt ∗ (wt , i ∗ xi ).
P
Die Gewicht gibt den Anteil des Portfoliowerts an, der zum Zeitpunkt t in Aktien i investiert ist. F&ur
Verlustoperator habe ich 0.0146574508122766 erhalten.

#delta aprrox. loss opartor


delta <- function(X, w, V_t) {
(-V_t*rowSums(X * matrix(w, nrow = nrow(X), ncol = length(w), byrow = TRUE))) }

print(paste(-V_t_new*((w1_new+w2_new)*X.new)))

11
## [1] "18.4547419367623"

Der V at Risk unseres Portfolios wird auf dem Konfidenzniveau α durch die kleinste Zahl l angegeben, so
dass die Wahrscheinlichkeit, dass der Verlust diesen l &uberschreitet, nicht gr&osser als (1 − α) ist. Also
bezeichnet VaR einfach ein Quantil der Verlustverteilung. Der Expected shortfall ist defeniert wie folgt: f&ur
Verlust L mit endlichen Erwatungswert und f&ur Konfidenzniveau Diese Instrumente zu Sch&atzung von
Portfolien k&onnen durch verschiedene Methoden berechnet werden. Wir beginnen mit Varianz Kovarianz
Methode. Es wird angenommen, dass die Risikofaktor&anderungen eine multivariate Normalverteilung
(entweder unbedingte oder bedingte) haben. Der Strichprobesch&atzer m̂ ist 0.0002768749(BN.PA),
0.0003222114(WMT), −0.0000308007 (Wechselkurs). Dazugeh&orige Kovarianzmatrix ĉ betr&gt
1.450739e − 04 3.976235e − 05 1.536623e − 06
3.976235e − 05 2.460238e − 04 2.660877e − 05 Mit diesem Werten kann man Erwartungswert und
1.536623e − 06 2.660877e − 05 1.863853e − 05
Varianz ermittel. F&ur Verlust am Ende diese lauten wie folgt: −0.000257736, 0.01479724.

risk_measure <- function(all.con, lambda, alpha,


method = c("Var.Cov", "hist.sim"))
{

if(!is.matrix(all.con))all.con <- rbind(all, deparse.level = 0L) # the corrensponding row has no label
stopifnot(0 < alpha, alpha < 1, length(lambda) == ncol(all.con), lambda > 0) # check whether alpha is
method <- match.arg(method)

X_1 <- returns(SP_omit)


X_2 <- returns(STX_omit)
X_3 <- returns(EU_omit)
X <- merge(X_1, X_2, X_3)
X <- as.matrix(X)
X.2 <- merge(X_1, X_2+X_3)
X.2 <- as.matrix(X.2)
X.2 <- na.omit(X.2)
if(!length(X)) stop("'all.con' should have more than just one line")

all.con. <- as.numeric(tail(all.con, n = 1)) # pick out last available stock prices ("today")
w. <- lambda*all.con.
w. <- na.omit(w.)

switch(method,
"Var.Cov" = {

#mean vector and covariance matrix


m.hat <- colMeans(X, na.rm = TRUE)
C.hat <- cov(X, use="pairwise.complete.obs")
c <- 0
b <- c(0.1, 0.8, 0.9)
#expected value and standard deviation of the loss
mu.hat <- as.numeric(-(c+b%*%m.hat))
sigma.hat <- as.numeric(sqrt(b%*%C.hat%*%b))

ld <- function(x) as.numeric(-(c+b%*%x))

12
qa <- qnorm(alpha)

list("VaR", VaR = mu.hat + sigma.hat*qa,


"ES", ES = mu.hat + sigma.hat * dnorm(qa) / (1-alpha),
"EW", mu = m.hat,
"Kov", sigma = C.hat)
},

"hist.sim" = {

L <- loss_op(X.2, w.) # compute historical losses


## Nonparametrically estimate VaR and ES and return
list(VaR = VaR_np(L, alpha), ES = ES_np(L, alpha))
},
stop("Wrong 'method'"))
}

alpha <- c(0.95, 0.99, 0.995)


set.seed(2020) # set a seed so that all simulation results are reproducible; see ?set.seed
var.cov <- risk_measure(all.con, lambda = lambda, alpha = alpha, method = "Var.Cov")
hist.sim <- risk_measure(all.con, lambda = lambda, alpha = alpha, method = "hist.sim")

(rm <- rbind("Var.-cov." = unlist(var.cov[c("VaR", "ES")]),


"Hist. sim." = unlist(hist.sim[c("VaR", "ES")])))

## VaR1 VaR2 VaR3 ES1 ES2


## Var.-cov. 0.02015273 0.02864477 0.03175354 0.02535964 0.03286736
## Hist. sim. 25.53080794 44.39871175 52.38134969 37.77530583 60.59273280
## ES3
## Var.-cov. 0.03569267
## Hist. sim. 74.57265170

all.con. <- as.numeric(tail(all.con, n = 1)) # pick out last available stock prices ("today")
w. <- lambda * all.con. # weights tilde{w}
L <- loss_op(X, w = w.) # historical losses
summary(L)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## -157.1893 -9.3634 -0.5190 -0.6108 8.4207 120.2971 91

Die historische Simulationsmethode kann als Sch&atzung der Verteilung des Verlustoperators unter der
empirischen Verteilung von Daten angesehen werden. Das Verfahren kann unter Verwendung des Verlust-
operators kurz beschrieben werden; Wir erstellen einen univariaten Datenliste, indem wir den Operator auf
jede unserer historischen Beobachtungen des Risikofaktoränderungsvektors anwenden, um eine Reihe von
historisch simulierten Verlusten zu erhalten. Von simulierten Verlusten erstellen wir ein Histogramm.

hist(L, breaks = "Scott", probability = TRUE, xlim = c(0, 50), main = "",
xlab = substitute("Losses L",
list(sd = time[1], ed = time[2], a = alpha)), col = "gray90"); box() # histogram
legend("topright", bty = "n", inset = 0.02, legend = rownames(rm))

13
0.030

Var.−cov.
Hist. sim.
0.020
Density

0.010
0.000

0 10 20 30 40 50

Losses L

lam <- c(14,9,9)


all. <- as.numeric(tail(all, n=1))
w.mc <- na.omit(lam*all.)
N <- 1e4
nu <- 4.32
mu. <- c(39ˆ(-4), 45ˆ(-4), -10ˆ(-4))
vec <- c(7.5e-05,2.1e-05,-5.4e-07,2.1e-05,1.2e-04,-1.7e-06,-5.4e-07,-1.7e-06,1.6e-06)
sigma. <- matrix(vec, nrow = 3, byrow = TRUE)
X. <- rStudent(N, df = nu, loc = mu., scale = sigma.)
L <- loss_op(X., w = w.mc)
summary(L)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## -108.2493 -8.7149 0.1882 0.1495 9.2269 186.4686

print(VaR <- VaR_np(L, alpha))

## [1] 25.88936 42.10274 52.26416

print(ES <- ES_np(L, alpha))

## [1] 37.03810 57.16913 67.57647

14
Die Monte-Carlo-Methode mit multivariaten Normalverteilung und die Varianz-Kovarianz-Methode führen
zu ähnlichen Ergebnissen (beide gehen von multivariaten normalverteilten Risikofaktoränderungen aus, un-
terscheiden sich jedoch in der Berechnung der Verlustverteilung (analytisch vs. empirisch)), wäherd Monte
Carlo mit t Verteilung viel anders als Varianz Kovarianz Methode ist. Die historische Simulationen und
Monte-Carlo-Methode mit t Verteilung führen zu ähnlichen Ergebnissen.

15

Das könnte Ihnen auch gefallen