tidyquant part 2
## Download financial data with tidyquant ## Perform various data manipulations with dplyr ## plot data with ggplot ## Athanassios Stavrakoudis ## 29 Oct 2021 library(tidyquant) library(tidyverse) # get daily data for a stock, here FB tq_get("FB") # define from / to dates tq_get("FB", from = "2015-01-01", to = Sys.Date()) # store in a variable for further use FB <- tq_get("FB", from = "2015-01-01", to = Sys.Date()) # FB line chart of closing value FB %>% ggplot(aes(x = date, y = close)) + geom_line(color = "blue") + labs(title = "Facebook", x = "", y = "Closing Price") + theme_tq(base_size = 15, base_family = "NimbusSan") # FB bar chart FB %>% ggplot(aes(x = date, y = close)) + geom_barchart(aes(open = open, high = high, low = low, close = close)) + labs(title = "Facebook", y = "Closing Price", x = "Date") + theme_tq(base_size = 15, base_family = "NimbusSan") # last 10 values FB %>% tail(10) %>% ggplot(aes(x = date, y = close)) + geom_barchart(aes(open = open, high = high, low = low, close = close)) + labs(title = "Facebook", y = "Closing Price", x = "Date") + theme_tq(base_size = 15, base_family = "NimbusSan") # candlesticks FB %>% ggplot(aes(x = date)) + geom_candlestick(aes(open = open, close = close, high = high, low = low)) + labs(title = "Facebbok") + theme_tq(base_size = 15, base_family = "NimbusSan") # candlesticks, last 4 weeks FB %>% filter(date >= max(date) - weeks(4)) %>% ggplot(aes(x = date)) + geom_candlestick(aes(open = open, close = close, high = high, low = low)) + labs(title = "Facebbok") + theme_tq(base_size = 15, base_family = "NimbusSan") # compute daily returns FB %>% tq_mutate(select = close, mutate_fun = periodReturn, period = "daily", col_rename = "return_d") # see all options tq_mutate_fun_options() # see help ?quantmod::periodReturn # continuous returns FB %>% mutate(return_d = log( close / lag(close) ) ) # discrete returns FB %>% mutate(return_d = (close - lag(close)) / close) # histogram of daily returns FB %>% tq_mutate(select = close, mutate_fun = periodReturn, period = "daily", col_rename = "return_d") %>% ggplot(aes(x = return_d)) + geom_histogram(binwidth = 0.01, color = "darkblue", fill = "lightblue") + theme_tq(base_size = 15, base_family = "NimbusSan") # frequency polygon of daily returns FB %>% tq_mutate(select = close, mutate_fun = periodReturn, period = "daily", col_rename = "return_d") %>% ggplot(aes(x = return_d)) + geom_freqpoly(binwidth = 0.01, color = "darkblue") + theme_tq(base_size = 15, base_family = "NimbusSan") # histogram + frequency polygon of daily returns FB %>% tq_mutate(select = close, mutate_fun = periodReturn, period = "daily", col_rename = "return_d") %>% ggplot(aes(x = return_d)) + geom_histogram(binwidth = 0.01, color = NA, fill = "lightblue") + geom_freqpoly(binwidth = 0.01, color = "darkblue") + theme_tq(base_size = 15, base_family = "NimbusSan") # compute moving average FB %>% tq_mutate(select = close, mutate_fun = SMA, n = 5) # compute and plot moving averages at 50 and 100 data pontis FB2 <- FB %>% tq_mutate(select = close, mutate_fun = SMA, n = 050) %>% rename(SMA_050 = SMA) %>% tq_mutate(select = close, mutate_fun = SMA, n = 100) %>% rename(SMA_100 = SMA) # plot moving averages ggplot(FB2, aes(x = date)) + geom_line(aes(y = close, colour = "close"), size = 1) + geom_line(aes(y = SMA_050, colour = "SMA_050"), size = 1.2) + geom_line(aes(y = SMA_100, colour = "SMA_100"), size = 1.2) + labs(colour = "", y = "close / SMA") + theme_tq(base_size = 15, base_family = "NimbusSan") # daily to monthly FB %>% tq_transmute(select = close, mutate_fun = to.period, period = "months") # check with this FB %>% filter(date == '2015-01-30') # monthly averages of close price FB %>% tq_transmute(select = close, mutate_fun = apply.monthly, FUN = mean, col_rename = "mean_close") # non quand, classic approach FB %>% mutate(date = floor_date(date, unit = "months")) %>% group_by(date) %>% summarise(close = mean(close))
Συνδεθείτε για περισσότερες δυνατότητες αλληλεπίδρασης,
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.