Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 6.14 KB | None | 0 0
  1. library("ggplot2")
  2. library("forecast")
  3. library("quantmod")
  4.  
  5. # Это наши данные.
  6. # df <- as.data.frame(matrix(rnorm(252*10, mean = 0, sd = 0.03), nrow = 252, ncol = 10))
  7.  
  8. # Размер тестового окна.
  9. test <- 230
  10. # Размер обучающей выборки.
  11. ob <- test+1
  12. # Горизонт прогнозирования.
  13. hor <- 1
  14. # Определяем безрисковую процентную ставку.
  15. r_f <- 0.00487/30
  16.  
  17. # Настоящие данные.
  18. getSymbols(Symbols = c("GOOGL", "INTC", "MSFT", "AAPL", "YHOO", "VOD", "AMZN",
  19.                        "EBAY", "NFLX", "NVDA", "SBUX", "WDC", "ADBE", "TXN",
  20.                        "ATVI", "AKAM", "^IXIC"),
  21.            from = "2015-11-03", to = "2016-11-03")
  22.  
  23. df <- as.data.frame(matrix(NA, nrow = dim(GOOGL)[1]-1))
  24. T <- dim(df)[1]
  25.  
  26. df[, 1] <- rep(r_f, T)
  27.  
  28. Google <- data.frame(date = time(GOOGL), coredata(GOOGL))
  29. df[, 2] <- (Google$GOOGL.Close[2:(T+1)]/Google$GOOGL.Close[1:T]-1)
  30.  
  31. Intel <- data.frame(date = time(INTC), coredata(INTC))
  32. df[, 3] <- (Intel$INTC.Close[2:(T+1)]/Intel$INTC.Close[1:T]-1)
  33.  
  34. Microsoft <- data.frame(date = time(MSFT), coredata(MSFT))
  35. df[, 4] <- (Microsoft$MSFT.Close[2:(T+1)]/Microsoft$MSFT.Close[1:T]-1)
  36.  
  37. Apple <- data.frame(date = time(AAPL), coredata(AAPL))
  38. df[, 5] <- (Apple$AAPL.Close[2:(T+1)]/Apple$AAPL.Close[1:T]-1)
  39.  
  40. Yahoo <- data.frame(date = time(YHOO), coredata(YHOO))
  41. df[, 6] <- (Yahoo$YHOO.Close[2:(T+1)]/Yahoo$YHOO.Close[1:T]-1)
  42.  
  43. Vodafone <- data.frame(date = time(VOD), coredata(VOD))
  44. df[, 7] <- (Vodafone$VOD.Close[2:(T+1)]/Vodafone$VOD.Close[1:T]-1)
  45.  
  46. Amazon <- data.frame(date = time(AMZN), coredata(AMZN))
  47. df[, 8] <- (Amazon$AMZN.Close[2:(T+1)]/Amazon$AMZN.Close[1:T]-1)
  48.  
  49. eBay <- data.frame(date = time(EBAY), coredata(EBAY))
  50. df[, 9] <- (eBay$EBAY.Close[2:(T+1)]/eBay$EBAY.Close[1:T]-1)
  51.  
  52. Netflix <- data.frame(date = time(NFLX), coredata(NFLX))
  53. df[, 10] <- (Netflix$NFLX.Close[2:(T+1)]/Netflix$NFLX.Close[1:T]-1)
  54.  
  55. Nvidia <- data.frame(date = time(NVDA), coredata(NVDA))
  56. df[, 11] <- (Nvidia$NVDA.Close[2:(T+1)]/Nvidia$NVDA.Close[1:T]-1)
  57.  
  58. Starbucks <- data.frame(date = time(SBUX), coredata(SBUX))
  59. df[, 12] <- (Starbucks$SBUX.Close[2:(T+1)]/Starbucks$SBUX.Close[1:T]-1)
  60.  
  61. Western <- data.frame(date = time(WDC), coredata(WDC))
  62. df[, 13] <- (Western$WDC.Close[2:(T+1)]/Western$WDC.Close[1:T]-1)
  63.  
  64. Adobe <- data.frame(date = time(ADBE), coredata(ADBE))
  65. df[, 14] <- (Adobe$ADBE.Close[2:(T+1)]/Adobe$ADBE.Close[1:T]-1)
  66.  
  67. Texas <- data.frame(date = time(TXN), coredata(TXN))
  68. df[, 15] <- (Texas$TXN.Close[2:(T+1)]/Texas$TXN.Close[1:T]-1)
  69.  
  70. Blizzard <- data.frame(date = time(ATVI), coredata(ATVI))
  71. df[, 16] <- (Blizzard$ATVI.Close[2:(T+1)]/Blizzard$ATVI.Close[1:T]-1)
  72.  
  73. Akamai <- data.frame(date = time(AKAM), coredata(AKAM))
  74. df[, 17] <- (Akamai$AKAM.Close[2:(T+1)]/Akamai$AKAM.Close[1:T]-1)
  75.  
  76. Index <- data.frame(date = time(IXIC), coredata(IXIC))
  77. Nasdaq <- (Index$IXIC.Close[2:(T+1)]/Index$IXIC.Close[1:T]-1)
  78.  
  79. # Создаём data.frame для выбора наилучшей стратегии.
  80. Meth <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
  81. # Вектор очков.
  82. Scores <- rep(0, 7)
  83. # Создаём data.frame для прогнозов на завтра.
  84. Forecast <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
  85. # Дами data.frame на выявление тех, которые включаются в потфель.
  86. D <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
  87. # Создаём data.frame весов.
  88. W <- as.data.frame(matrix(NA, nrow = (T-ob), ncol = dim(df)[2]))
  89. # Вектор фактической доходности за день.
  90. r_fact <- c(NA)
  91. # Вектор с итоговой доходностью.
  92. r <- c(1)
  93.  
  94.  
  95. # Стратегия.
  96. for(i in (ob+1):dim(df)[1]){
  97.   for(j in 1:dim(df)[2]){
  98.     Naiv_ob <- rep(df[(i-1-hor), j], hor)
  99.     sredn_ob <- rep(mean(df[1:(i-1-hor), j]), hor)
  100.     ses_ob <- rep(ses(df[1:(i-1-hor), j], initial = "simple")$mean[1], hor)
  101.     holt_ob <- holt(df[1:(i-1-hor), j], h = hor, initial = "simple")$mean[1:hor]
  102.     theta_ob <- thetaf(df[1:(i-1-hor), j], h = hor)$mean[1:hor]
  103.     arima_ob <- forecast(auto.arima(df[1:(i-1-hor), j]), h = hor)$mean[1:hor]
  104.     model1 <- lm((df[1:(i-1-hor), j]-df[1:(i-1-hor), 1]) ~
  105.                    (Nasdaq[1:(i-1-hor)]-df[1:(i-1-hor), 1]) - 1)
  106.     capm_ob1 <- model1$coefficients*(Nasdaq[i-1-hor]-r_f)+r_f
  107.    
  108.     f_ob <- c(Naiv_ob, sredn_ob, ses_ob, holt_ob, theta_ob, arima_ob, capm_ob1)
  109.     Meth[(i-ob), j] <- which.min(abs(f_ob - rep(df[i-1, j], 7)))
  110.     Scores[Meth[(i-ob), j]] <- Scores[Meth[(i-ob), j]] + 1*ifelse(j == 1, 0, 1)
  111.    
  112.     Naiv <- rep(df[(i-hor), j], hor)
  113.     sredn <- rep(mean(df[1:(i-hor), j]), hor)
  114.     ses <- rep(ses(df[1:(i-hor), j], initial = "simple")$mean[1], hor)
  115.     holt <- holt(df[1:(i-hor), j], h = hor, initial = "simple")$mean[1:hor]
  116.     theta <- thetaf(df[1:(i-hor), j], h = hor)$mean[1:hor]
  117.     arima <- forecast(auto.arima(df[1:(i-hor), j]), h = hor)$mean[1:hor]
  118.     model1 <- lm((df[1:(i-hor), j]-df[1:(i-hor), 1]) ~ (Nasdaq[1:(i-hor)]-df[1:(i-hor), 1]) - 1)
  119.     capm1 <- model1$coefficients*(Nasdaq[i-hor]-r_f)+r_f
  120.    
  121.     f <- c(Naiv, sredn, ses, holt, theta, arima, capm1)
  122.     Forecast[(i-ob), j] <- f[Meth[(i-ob), j]]
  123.     D[(i-ob), j] <- ifelse(f[Meth[(i-ob), j]] >= r_f, 1, 0)
  124.   }
  125.   W[(i-ob), ] <- Forecast[(i-ob), ]*D[(i-ob), ]/(sum(Forecast[(i-ob), ]*D[(i-ob), ]))
  126.   r_fact[(i-ob)] <- sum(W[(i-ob), ]*df[i, ])
  127.   r[(i-ob+1)] <- r[(i-ob)]*(1 + r_fact[(i-ob)])
  128.  
  129.   print(i-ob)
  130.   print(r[(i-ob+1)])
  131. }
  132.  
  133. # Выходные данные.
  134. # График доходности алгоритма.
  135. qplot((1:(T-ob+1)), (r-1)*100, xlab = "Время", ylab = "Доходность",
  136.       main = "Доходность алгоритма", geom = "line")
  137. # Итоговая доходность. Средняя доходность. Коэффициент Шарпа.
  138. (r[length(r)]-1)*100
  139. mean(r[2:length(r)]-1)*100
  140. 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))
  141. Sharp
  142. # Очки методам прогнозирования.
  143. Scores
  144. sum(Scores) == dim(Meth)[1]*(dim(Meth)[2]-1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement