Advertisement
Guest User

Lynas Charting

a guest
Dec 6th, 2013
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 3.12 KB | None | 0 0
  1. require(quantmod)
  2. require(TTR)
  3. require(forecast)
  4. # Für welchen Wert sollen die Daten bezogen werden?
  5. # Lynas Australien
  6. symbolName <- "LYC.AX"
  7. # Lynas Frankfurt
  8. #symbolName <- "LYI.F"
  9. #
  10. # Molycorp
  11. # symbolName <- "9MO.F"
  12. #
  13. # China Rare Earth HK
  14. # symbolName <- "0769.HK"
  15. # symbolName <- "RAE.F"
  16. #
  17. # Andere Symbole von YAHOO
  18. # symbolName <- "SPY"
  19. # symbolName <- "DJIA"
  20. # symbolName <- "^GDAXI"
  21. # symbolName <- "^AORD"
  22. #
  23. # Um wieviele Tage in die Vergangenheit soll vorhergesagt werden?
  24. back <- 0
  25. # Wieviele Tage an Vorhersage?
  26. ahead <- 365
  27. # Order-Argumente für ar(..., order.max=....)
  28. ord_start <- 200
  29. ord_end <- 300
  30. ord_step <- 50
  31. histrows <- 1600
  32. # ####################
  33. ords <- seq(ord_start, ord_end, ord_step)
  34. #
  35. #
  36. # Chartdaten aus der Zeitreihe extrahieren
  37. z <- get( getSymbols( symbolName, from="1900-01-01") )
  38. names(z) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")
  39. # Anzahl der Zeilen
  40. nrows <- dim(z)[1]
  41. #
  42. # Einen Ausschnitt der gesamten Zeitreihe bilden
  43. cs <- tail(z, histrows)
  44. #
  45. # Donchian-Channels vorberechnen
  46. dc100 <- DonchianChannel(cs[,c("High","Low")], n=100)
  47. dc200 <- DonchianChannel(cs[,c("High","Low")], n=200)
  48. #
  49. # Gleitende Durchschnitte vorberechnen
  50. sma100 <- SMA(cs[, "Close"], n=100)
  51. sma200 <- SMA(cs[, "Close"], n=200)
  52. #
  53. # Chart nach links schieben (Zukunftsprojektion)
  54. cs_fut <- xts(, end(cs)+1:ahead)
  55. cs_fut$Open <- rep(last(dc100)$low, ahead)
  56. cs_fut$High <- rep(last(dc100)$low, ahead)
  57. cs_fut$Low <- rep(last(dc100)$low, ahead)
  58. cs_fut$Close <- rep(last(dc100)$low, ahead)
  59. cs_fut$Volume <- rep(0, ahead)
  60. cs_fut$Adjusted <- rep(last(dc100)$low, ahead)
  61. cs <- rbind(cs, cs_fut )
  62. remove(cs_fut)
  63. #
  64. # Vorhersagen vorberechnen
  65. # Beachte: Für die Vorhersage wird die komplette Zeitreihe
  66. # verwendet und nicht nur der Ausschnitt in "cs"
  67. #
  68. xp <- c()
  69. for(i in ords ) {
  70.     # Herausschneiden der Samples
  71.     model <- ar(Cl(head(z, (nrows - back) ) ), method="ols", aic=FALSE, order.max=i)
  72.     df <- data.frame(predict(model, n.ahead=ahead+1)$pred)
  73.     names(df) <- c( paste("pred", i, sep="") )
  74.     pred_date <- time(last(z)-back)
  75.     rownames(df) <- seq(pred_date, pred_date+ahead, 1)
  76.     x <- as.xts(df, order.by=as.Date(rownames(df)))
  77.     if (length(xp)==0) {
  78.       xp <- x
  79.     } else {
  80.       xp <- merge(xp, x)
  81.     }
  82. }
  83. #
  84. # Vorhersagen und Chartdaten zusammenführen
  85. full_cs <- rbind( rbind( rbind( cs$High, xp$pred200), xp$pred250), xp$pred300)
  86. #
  87. # Y-Range neu berechnen
  88. yr <- range(max( c( min( full_cs )*0.95, 0.001) ), max( full_cs )*1.05)
  89. #
  90. # Aufräumen
  91. remove(df)
  92. remove(x)
  93. remove(i)
  94. remove(full_cs)
  95. #
  96. # Chart mit den entsprechenden Indikatoren plotten
  97. #
  98. chartSeries(cs,
  99.             name=symbolName,
  100.             multi.col=TRUE,
  101.             theme='white',
  102.             log.scale=TRUE,
  103.             TA=NULL,
  104.             las=2,
  105.             major.ticks='months',
  106.             minor.ticks=FALSE,
  107.             yrange=yr
  108. )
  109. addTA(sma100, col="blue", on=1)
  110. addTA(sma200, col="violet", on=1)
  111. addTA(dc100$high, col="green", on=1)
  112. addTA(dc200$high, col="darkgreen", on=1)
  113. addTA(dc100$low, col="red", on=1)
  114. addTA(dc200$low, col="darkred", on=1)
  115. addTA(xp$pred200, on=1, col="orange")
  116. addTA(xp$pred250, on=1, col="red")
  117. addTA(xp$pred300, on=1, col="darkred")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement