tidyquant introduction
Παραδείγματα χρήσης της βιβλιοθήκης tidyquant και ανάλυσης χρηματοοικονομικών δεδομένων.
library(tidyquant) library(ggplot2) library(writexl) library(dplyr) # stock index tq_exchange_options() tq_exchange("NYSE") # get options tq_index_options() tq_index("SP500") # print more tq_index("SP500") %>% print(n=50) # view all tq_index("SP500") %>% View # download sp500 <- tq_index("SP500") # make some data exploration sp500 %>% str() sp500 %>% filter(symbol=='FB') sp500 %>% filter(sector=='Information Technology') %>% nrow() sp500 %>% select(company, weight) sp500 %>% filter(symbol=='FB') %>% select(company, weight) sp500 %>% select(weight) %>% sum() sp500 %>% group_by(sector) %>% summarise(cnt=n()) sp500 %>% group_by(sector) %>% summarise(cnt=n()) %>% filter(cnt>50) sp500 %>% group_by(sector) %>% summarise(weight=sum(weight)) # plot weight by sector w <- sp500 %>% group_by(sector) %>% summarise(weight=sum(weight)) ggplot(w, aes(x=sector, y=weight)) + geom_bar(stat="identity", fill="blue") + theme_tq() + theme(axis.text.x = element_text(angle = 60, hjust = 1)) + geom_text(aes(label=round(weight,2)), vjust=1.6, color="white", size=3.5) # export data to excel write_xlsx(w, "sector_weights.xlsx") #get metal prices from oanda gold <- tq_get("gold", get="metal.prices") ggplot(gold, aes(x=date, y=price)) + geom_line() + labs(title = "gold price") + theme_tq() #get stock prices from yahoo fb <- tq_get("FB", get="stock.prices", from="2014-01-01", to="2018-01-01") # FB line chart fb %>% ggplot(aes(x = date, y = close)) + geom_line(color="blue") + labs(title = "Facebook", y = "Closing Price", x = "") + theme_tq() # 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() # zoom end <- as_date("2018-01-01") fb %>% ggplot(aes(x = date, y = close)) + geom_barchart(aes(open = open, high = high, low = low, close = close), color_up = "darkgreen", color_down = "darkred", size = 1) + labs(title = "Facebbok") + coord_x_date(xlim = c(end - weeks(4), end), ylim = c(150, 200)) + theme_tq() # compute daily returns fb %>% tq_mutate(select = close, mutate_fun = periodReturn, period = "daily", col_rename = "return_d") # 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") + xlim(-0.1, 0.1) + theme_tq() # compute moving average fb %>% tq_mutate(select = close, mutate_fun = SMA, n = 10) %>% print(n=15) # Candlestick fb %>% ggplot(aes(x = date, y = close)) + geom_candlestick(aes(open = open, high = high, low = low, close = close), color_up = "darkgreen", color_down = "darkred", fill_up = "darkgreen", fill_down = "darkred") + labs(title = "AAPL Candlestick Chart", subtitle = "Zoomed in, Experimenting with Formatting", y = "Closing Price", x = "") + coord_x_date(xlim = c(end - weeks(4), end), ylim = c(150, 200)) + theme_tq() # compute and plot moving averages x <- 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) ggplot(x, aes(x=date)) + geom_line(aes(y=close), colour="black") + geom_line(aes(y=SMA_050), colour="red") + geom_line(aes(y=SMA_100), colour="blue") + theme_bw() # monthly averages fb %>% tq_transmute(select = close, mutate_fun = to.period, period = "months") # min max per quarter max_close_FB <- fb %>% tq_transmute(select = close, mutate_fun = apply.quarterly, FUN = max, col_rename = "max_close") min_close_FB <- fb %>% tq_transmute(select = close, mutate_fun = apply.quarterly, FUN = min, col_rename = "min_close") mm_close_FB <- inner_join(min_close_FB, max_close_FB, by="date") # compute daily returns Ra <- fb %>% tq_transmute(select = adjusted, mutate_fun = periodReturn, period = "daily", col_rename = "Ra") tq_index("RUSSELL2000", use_fallback = TRUE) %>% tq_get(get = "stock.prices", from = "2018-01-01") Rb <- "RUSSELL2000" %>% tq_get(get = "stock.prices", from = "2014-01-01", to = "2018-01-01") %>% tq_transmute(select = adjusted, mutate_fun = periodReturn, period = "daily", col_rename = "Rb") RaRb <- left_join(Ra, Rb, by = c("date" = "date")) RaRb %>% tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>% t()
Συνδεθείτε για περισσότερες δυνατότητες αλληλεπίδρασης,
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.