Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library("ggplot2")
- library("forecast")
- library("quantmod")
- # Это наши данные.
- # df <- as.data.frame(matrix(rnorm(252*10, mean = 0, sd = 0.03), nrow = 252, ncol = 10))
- # Размер тестового окна.
- test <- 230
- # Размер обучающей выборки.
- ob <- test+1
- # Горизонт прогнозирования.
- hor <- 1
- # Определяем безрисковую процентную ставку.
- r_f <- 0.00487/30
- # Настоящие данные.
- getSymbols(Symbols = c("GOOGL", "INTC", "MSFT", "AAPL", "YHOO", "VOD", "AMZN",
- "EBAY", "NFLX", "NVDA", "SBUX", "WDC", "ADBE", "TXN",
- "ATVI", "AKAM", "^IXIC"),
- from = "2015-11-03", to = "2016-11-03")
- df <- as.data.frame(matrix(NA, nrow = dim(GOOGL)[1]-1))
- T <- dim(df)[1]
- df[, 1] <- rep(r_f, T)
- Google <- data.frame(date = time(GOOGL), coredata(GOOGL))
- df[, 2] <- (Google$GOOGL.Close[2:(T+1)]/Google$GOOGL.Close[1:T]-1)
- Intel <- data.frame(date = time(INTC), coredata(INTC))
- df[, 3] <- (Intel$INTC.Close[2:(T+1)]/Intel$INTC.Close[1:T]-1)
- Microsoft <- data.frame(date = time(MSFT), coredata(MSFT))
- df[, 4] <- (Microsoft$MSFT.Close[2:(T+1)]/Microsoft$MSFT.Close[1:T]-1)
- Apple <- data.frame(date = time(AAPL), coredata(AAPL))
- df[, 5] <- (Apple$AAPL.Close[2:(T+1)]/Apple$AAPL.Close[1:T]-1)
- Yahoo <- data.frame(date = time(YHOO), coredata(YHOO))
- df[, 6] <- (Yahoo$YHOO.Close[2:(T+1)]/Yahoo$YHOO.Close[1:T]-1)
- Vodafone <- data.frame(date = time(VOD), coredata(VOD))
- df[, 7] <- (Vodafone$VOD.Close[2:(T+1)]/Vodafone$VOD.Close[1:T]-1)
- Amazon <- data.frame(date = time(AMZN), coredata(AMZN))
- df[, 8] <- (Amazon$AMZN.Close[2:(T+1)]/Amazon$AMZN.Close[1:T]-1)
- eBay <- data.frame(date = time(EBAY), coredata(EBAY))
- df[, 9] <- (eBay$EBAY.Close[2:(T+1)]/eBay$EBAY.Close[1:T]-1)
- Netflix <- data.frame(date = time(NFLX), coredata(NFLX))
- df[, 10] <- (Netflix$NFLX.Close[2:(T+1)]/Netflix$NFLX.Close[1:T]-1)
- Nvidia <- data.frame(date = time(NVDA), coredata(NVDA))
- df[, 11] <- (Nvidia$NVDA.Close[2:(T+1)]/Nvidia$NVDA.Close[1:T]-1)
- Starbucks <- data.frame(date = time(SBUX), coredata(SBUX))
- df[, 12] <- (Starbucks$SBUX.Close[2:(T+1)]/Starbucks$SBUX.Close[1:T]-1)
- Western <- data.frame(date = time(WDC), coredata(WDC))
- df[, 13] <- (Western$WDC.Close[2:(T+1)]/Western$WDC.Close[1:T]-1)
- Adobe <- data.frame(date = time(ADBE), coredata(ADBE))
- df[, 14] <- (Adobe$ADBE.Close[2:(T+1)]/Adobe$ADBE.Close[1:T]-1)
- Texas <- data.frame(date = time(TXN), coredata(TXN))
- df[, 15] <- (Texas$TXN.Close[2:(T+1)]/Texas$TXN.Close[1:T]-1)
- Blizzard <- data.frame(date = time(ATVI), coredata(ATVI))
- df[, 16] <- (Blizzard$ATVI.Close[2:(T+1)]/Blizzard$ATVI.Close[1:T]-1)
- Akamai <- data.frame(date = time(AKAM), coredata(AKAM))
- df[, 17] <- (Akamai$AKAM.Close[2:(T+1)]/Akamai$AKAM.Close[1:T]-1)
- Index <- data.frame(date = time(IXIC), coredata(IXIC))
- Nasdaq <- (Index$IXIC.Close[2:(T+1)]/Index$IXIC.Close[1:T]-1)
- # Создаём data.frame для выбора наилучшей стратегии.
- Meth <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
- # Вектор очков.
- Scores <- rep(0, 7)
- # Создаём data.frame для прогнозов на завтра.
- Forecast <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
- # Дами data.frame на выявление тех, которые включаются в потфель.
- D <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
- # Создаём data.frame весов.
- W <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
- # Вектор фактической доходности за день.
- r_fact <- c(NA)
- # Вектор с итоговой доходностью.
- r <- c(1)
- # Стратегия.
- for(i in (ob+1):dim(df)[1]){
- for(j in 1:dim(df)[2]){
- Naiv_ob <- rep(df[(i-1-hor), j], hor)
- sredn_ob <- rep(mean(df[1:(i-1-hor), j]), hor)
- ses_ob <- rep(ses(df[1:(i-1-hor), j], initial = "simple")$mean[1], hor)
- holt_ob <- holt(df[1:(i-1-hor), j], h = hor, initial = "simple")$mean[1:hor]
- theta_ob <- thetaf(df[1:(i-1-hor), j], h = hor)$mean[1:hor]
- arima_ob <- forecast(auto.arima(df[1:(i-1-hor), j]), h = hor)$mean[1:hor]
- model1 <- lm((df[1:(i-1-hor), j]-df[1:(i-1-hor), 1]) ~
- (Nasdaq[1:(i-1-hor)]-df[1:(i-1-hor), 1]) - 1)
- capm_ob1 <- model1$coefficients*(Nasdaq[i-1-hor]-r_f)+r_f
- f_ob <- c(Naiv_ob, sredn_ob, ses_ob, holt_ob, theta_ob, arima_ob, capm_ob1)
- Meth[(i-ob), j] <- which.min(abs(f_ob - rep(df[i-1, j], 7)))
- Scores[Meth[(i-ob), j]] <- Scores[Meth[(i-ob), j]] + 1*ifelse(j == 1, 0, 1)
- Naiv <- rep(df[(i-hor), j], hor)
- sredn <- rep(mean(df[1:(i-hor), j]), hor)
- ses <- rep(ses(df[1:(i-hor), j], initial = "simple")$mean[1], hor)
- holt <- holt(df[1:(i-hor), j], h = hor, initial = "simple")$mean[1:hor]
- theta <- thetaf(df[1:(i-hor), j], h = hor)$mean[1:hor]
- arima <- forecast(auto.arima(df[1:(i-hor), j]), h = hor)$mean[1:hor]
- model1 <- lm((df[1:(i-hor), j]-df[1:(i-hor), 1]) ~ (Nasdaq[1:(i-hor)]-df[1:(i-hor), 1]) - 1)
- capm1 <- model1$coefficients*(Nasdaq[i-hor]-r_f)+r_f
- f <- c(Naiv, sredn, ses, holt, theta, arima, capm1)
- Forecast[(i-ob), j] <- f[Meth[(i-ob), j]]
- D[(i-ob), j] <- ifelse(f[Meth[(i-ob), j]] >= r_f, 1, 0)
- }
- W[(i-ob), ] <- Forecast[(i-ob), ]*D[(i-ob), ]/(sum(Forecast[(i-ob), ]*D[(i-ob), ]))
- r_fact[(i-ob)] <- sum(W[(i-ob), ]*df[i, ])
- r[(i-ob+1)] <- r[(i-ob)]*(1 + r_fact[(i-ob)])
- print(i-ob)
- print(r[(i-ob+1)])
- }
- # Выходные данные.
- # График доходности алгоритма.
- qplot((1:(T-ob+1)), (r-1)*100, xlab = "Время", ylab = "Доходность",
- main = "Доходность алгоритма", geom = "line")
- # Итоговая доходность. Средняя доходность. Коэффициент Шарпа.
- (r[length(r)]-1)*100
- mean(r[2:length(r)]-1)*100
- Sharp <- mean(r[2:length(r)]-1-rep(r_f, length(r)-1))/sd(r[2:length(r)]-1-rep(r_f, length(r)-1))
- Sharp
- # Очки методам прогнозирования.
- Scores
- sum(Scores) == dim(Meth)[1]*(dim(Meth)[2]-1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement