Stocks - stocks_USA

Data - Investing

stocks_USA couvre 62 grandes valeurs américaines en données quotidiennes (OHLCV, source investing.com), avec un historique qui démarre en 1979 pour les plus anciennes. Bandes grises : récessions américaines (NBER).

Un dollar investi en 1985

Cours rebasés à 1 $ fin 1984, échelle logarithmique. Sur quarante ans, la même pente correspond au même rendement annualisé.

Code
sel <- tribble(
  ~symbol, ~lab,
  "AAPL", "Apple",   "KO", "Coca-Cola",  "JPM", "JPMorgan",
  "MCD", "McDonald's", "DIS", "Disney",  "CAT", "Caterpillar",
  "BA", "Boeing",   "MRK", "Merck",      "INTC", "Intel")

stocks_USA |>
  inner_join(sel, by = "symbol") |>
  deglitch() |>
  filter(Date >= as.Date("1985-01-01")) |>
  group_by(lab) |> arrange(Date) |>
  mutate(y = Close / first(Close)) |> ungroup() |>
  line_named("Valeur d'un dollar investi (échelle log)", recessions = TRUE)

La tech américaine depuis 2000

Code
sel <- tribble(
  ~symbol, ~lab,
  "AAPL", "Apple",  "MSFT", "Microsoft", "ORCL", "Oracle",
  "CSCO", "Cisco",  "QCOM", "Qualcomm",  "INTC", "Intel",
  "ADBE", "Adobe")

stocks_USA |>
  inner_join(sel, by = "symbol") |>
  deglitch() |>
  filter(Date >= as.Date("2000-01-01")) |>
  group_by(lab) |> arrange(Date) |>
  mutate(y = 100 * Close / first(Close)) |> ungroup() |>
  line_named("Cours rebasé (base 100 = janv. 2000)", recessions = TRUE)

Palmarès : performances annualisées depuis 2000

Code
total_return(stocks_USA, "2000-01-01") |>
  left_join(stocks_USA_var |> select(symbol, name), by = "symbol") |>
  mutate(name = coalesce(name, symbol),
         yrs  = pmax(as.numeric(to - from) / 365.25, 1),
         cagr = ifelse(ret <= -0.999, -1, (1 + ret)^(1 / yrs) - 1)) |>
  filter(!is.na(cagr)) |>
  slice_max(abs(cagr), n = 30) |>
  mutate(name = fct_reorder(name, cagr),
         col  = ifelse(cagr >= 0, "#2ca02c", "#d62728")) |>
  ggplot(aes(cagr, name, fill = col)) +
  geom_col(width = 0.72) +
  geom_vline(xintercept = 0, colour = "grey40") +
  geom_text(aes(label = scales::percent(cagr, accuracy = 1),
                hjust = ifelse(cagr >= 0, -0.2, 1.2)),
            size = 2.7, colour = "grey30") +
  scale_fill_identity() +
  scale_x_continuous(labels = scales::percent,
                     expand = expansion(mult = c(0.14, 0.14))) +
  theme_minimal() + xlab("Rendement annualisé depuis 2000") + ylab("")