```
rm(list = ls());gc()
library(data.table)
library(copula)
library(tidyverse)
library(quantmod)
library(PerformanceAnalytics)
```
# 抓股價報酬率資料
```
getStock<-function(code){
stock<-getSymbols(paste0(code,'.TW'),from='2010-1-1',to='2019-12-31',auto.assign = F)
data<-stock %>%
as.data.frame(row.names = NULL)%>%
rename_all(~c('Open','High','Low','Close','Volume','Adjusted')) %>%
mutate(date = index(stock)) %>% transmute(date,rt = Adjusted / shift(Adjusted) - 1) %>%
na.omit() %>%
rename_at(vars(rt),~code)
return(data)
}
s2330<-getStock('2330')
s2317<-getStock('2317')
```
# 抓匯率資料
```
TWD <- getSymbols('TWD=X',from = '2010-1-1',to = '2019-12-31', auto.assign = F)
TWDdata <- TWD%>%
as.data.frame(row.names = NULL) %>%
rename_all(~c('Open','High','Low','Close','Volume','Adjusted')) %>%
mutate(date = index(TWD)) %>%
select(date, Adjusted) %>%
rename_at(vars(Adjusted), ~'TWD')
CNY <- getSymbols('CNY=X',from = '2010-1-1',to = '2019-12-31', auto.assign = F)
CNYdata <- CNY %>%
as.data.frame(row.names = NULL) %>%
rename_all(~c('Open','High','Low','Close','Volume','Adjusted')) %>%
mutate(date = index(TWD)) %>%
select(date, Adjusted) %>%
rename_at(vars(Adjusted), ~'CNY')
USDTWD <- TWDdata %>%
transmute(date, USDTWD = TWD / shift(TWD) - 1) %>% na.omit()
CNYTWD <- TWDdata %>%
left_join(CNYdata, by = 'date') %>%
mutate(cross = TWD/CNY) %>%
transmute(date, CNYTWD = cross / shift(cross) - 1) %>% na.omit()
```
# 合併
```
Data<-s2330 %>% inner_join(s2317,by='date')%>%
inner_join(USDTWD,by='date')%>%
inner_join(CNYTWD,by='date')%>%
mutate(date=NULL)
```
# copula
```
normal.cop <- normalCopula(dim = 4)
fit.cop <- fitCopula(normal.cop, pobs(as.matrix(Data)), method = 'ml')
# create coef
rho <- coef(fit.cop)
# print(rho)
```
# 模擬
```
set.seed(100)
u1 <- rCopula(10000,normalCopula(rho, dim = 4))
```
# 替換成原本資料
```
u2=u1
for (a in 1:4) {
for (b in 1:nrow(u2)) {
u2[b,a]=ceiling(u2[b,a]*nrow(Data))
}
}
u2[,1]<-Data[u2[,1],1]
u2[,2]<-Data[u2[,2],2]
u2[,3]<-Data[u2[,3],3]
u2[,4]<-Data[u2[,4],4]
```
# 計算VaR
```
port<-ts(0.2*x.sample[,1]+0.2*x.sample[,2]+0.4*x.sample[,3]+0.2*x.sample[,4])
VaR(port,0.95)
quantile(port, 0.5)-quantile(port, 0.05)
```
VaR -0.009195181
quantile 0.009597874