The code for the moving average analysis below is taken from: https://www.r-bloggers.com/tidyquant-bringing-quantitative-financial-analysis-to-the-tidyverse/.

## # A tibble: 253 x 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 AAPL   2019-04-02  191.  194.  191.  194. 22765700     192.
##  2 AAPL   2019-04-03  193.  196.  193.  195. 23271800     193.
##  3 AAPL   2019-04-04  195.  196.  193.  196. 19114300     193.
##  4 AAPL   2019-04-05  196.  197.  196.  197  18526600     194.
##  5 AAPL   2019-04-08  196.  200.  196.  200. 25881700     198.
##  6 AAPL   2019-04-09  200.  203.  199.  200. 35768200     197.
##  7 AAPL   2019-04-10  199.  201.  198.  201. 21695300     198.
##  8 AAPL   2019-04-11  201.  201   198.  199. 20900800     196.
##  9 AAPL   2019-04-12  199.  200.  196.  199. 27760700     196.
## 10 AAPL   2019-04-15  199.  200.  198.  199. 17536600     197.
## # … with 243 more rows
## # A tibble: 253 x 10
##    symbol date        open  high   low close  volume adjusted SMA.short SMA.long
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>     <dbl>    <dbl>
##  1 AAPL   2019-04-02  191.  194.  191.  194.  2.28e7     192.        NA       NA
##  2 AAPL   2019-04-03  193.  196.  193.  195.  2.33e7     193.        NA       NA
##  3 AAPL   2019-04-04  195.  196.  193.  196.  1.91e7     193.        NA       NA
##  4 AAPL   2019-04-05  196.  197.  196.  197   1.85e7     194.        NA       NA
##  5 AAPL   2019-04-08  196.  200.  196.  200.  2.59e7     198.        NA       NA
##  6 AAPL   2019-04-09  200.  203.  199.  200.  3.58e7     197.        NA       NA
##  7 AAPL   2019-04-10  199.  201.  198.  201.  2.17e7     198.        NA       NA
##  8 AAPL   2019-04-11  201.  201   198.  199.  2.09e7     196.        NA       NA
##  9 AAPL   2019-04-12  199.  200.  196.  199.  2.78e7     196.        NA       NA
## 10 AAPL   2019-04-15  199.  200.  198.  199.  1.75e7     197.        NA       NA
## # … with 243 more rows
## # A tibble: 759 x 3
##    date       type  price
##    <date>     <chr> <dbl>
##  1 2019-04-02 close  194.
##  2 2019-04-03 close  195.
##  3 2019-04-04 close  196.
##  4 2019-04-05 close  197 
##  5 2019-04-08 close  200.
##  6 2019-04-09 close  200.
##  7 2019-04-10 close  201.
##  8 2019-04-11 close  199.
##  9 2019-04-12 close  199.
## 10 2019-04-15 close  199.
## # … with 749 more rows

Q1 Import S&P500 for the last one year.

## # A tibble: 253 x 8
##    symbol date        open  high   low close     volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>      <dbl>    <dbl>
##  1 ^GSPC  2019-04-02 2868. 2873. 2859. 2867. 3246900000    2867.
##  2 ^GSPC  2019-04-03 2876. 2885. 2865. 2873. 3550240000    2873.
##  3 ^GSPC  2019-04-04 2874. 2881. 2867. 2879. 3015180000    2879.
##  4 ^GSPC  2019-04-05 2884. 2893. 2883. 2893. 3146820000    2893.
##  5 ^GSPC  2019-04-08 2888. 2896. 2881. 2896. 3054030000    2896.
##  6 ^GSPC  2019-04-09 2887. 2887. 2873. 2878. 3007980000    2878.
##  7 ^GSPC  2019-04-10 2881. 2890. 2879. 2888. 3062380000    2888.
##  8 ^GSPC  2019-04-11 2892. 2893. 2882. 2888. 2938540000    2888.
##  9 ^GSPC  2019-04-12 2901. 2911. 2898. 2907. 3688490000    2907.
## 10 ^GSPC  2019-04-15 2908. 2910. 2896. 2906. 3088330000    2906.
## # … with 243 more rows

Q2 Calculate 15-day and 50-day simple moving averages.

## # A tibble: 253 x 10
##    symbol date        open  high   low close  volume adjusted SMA.short SMA.long
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>     <dbl>    <dbl>
##  1 ^GSPC  2019-04-02 2868. 2873. 2859. 2867.  3.25e9    2867.        NA       NA
##  2 ^GSPC  2019-04-03 2876. 2885. 2865. 2873.  3.55e9    2873.        NA       NA
##  3 ^GSPC  2019-04-04 2874. 2881. 2867. 2879.  3.02e9    2879.        NA       NA
##  4 ^GSPC  2019-04-05 2884. 2893. 2883. 2893.  3.15e9    2893.        NA       NA
##  5 ^GSPC  2019-04-08 2888. 2896. 2881. 2896.  3.05e9    2896.        NA       NA
##  6 ^GSPC  2019-04-09 2887. 2887. 2873. 2878.  3.01e9    2878.        NA       NA
##  7 ^GSPC  2019-04-10 2881. 2890. 2879. 2888.  3.06e9    2888.        NA       NA
##  8 ^GSPC  2019-04-11 2892. 2893. 2882. 2888.  2.94e9    2888.        NA       NA
##  9 ^GSPC  2019-04-12 2901. 2911. 2898. 2907.  3.69e9    2907.        NA       NA
## 10 ^GSPC  2019-04-15 2908. 2910. 2896. 2906.  3.09e9    2906.        NA       NA
## # … with 243 more rows

Q3 Transform data to long form from wide form for graphing.

## # A tibble: 759 x 3
##    date       type  price
##    <date>     <chr> <dbl>
##  1 2019-04-02 close 2867.
##  2 2019-04-03 close 2873.
##  3 2019-04-04 close 2879.
##  4 2019-04-05 close 2893.
##  5 2019-04-08 close 2896.
##  6 2019-04-09 close 2878.
##  7 2019-04-10 close 2888.
##  8 2019-04-11 close 2888.
##  9 2019-04-12 close 2907.
## 10 2019-04-15 close 2906.
## # … with 749 more rows

Q4 Visualize data.

Q5 List all bullish or bearish crossovers with dates and closing prices.

Bullish crosses: June 24 2019 close 2945.35, September 16 2019 close 2997.96 Bearish crosses: August 14 2019 close 2840.60, March 2 2020 close 3090.23

Q6 If you had invested $1 million on the day of the first bullish crossover and sold your shares on the following bearish crosover, how much would you have won or lost?

Net loss of 35564.54.

Q7 Try 50-day and 100-day simple moving average instead. Does your answer in Q6 change?

## # A tibble: 253 x 12
##    symbol date        open  high   low close volume adjusted SMA.short SMA.long
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl>     <dbl>    <dbl>
##  1 ^GSPC  2019-04-02 2868. 2873. 2859. 2867. 3.25e9    2867.        NA       NA
##  2 ^GSPC  2019-04-03 2876. 2885. 2865. 2873. 3.55e9    2873.        NA       NA
##  3 ^GSPC  2019-04-04 2874. 2881. 2867. 2879. 3.02e9    2879.        NA       NA
##  4 ^GSPC  2019-04-05 2884. 2893. 2883. 2893. 3.15e9    2893.        NA       NA
##  5 ^GSPC  2019-04-08 2888. 2896. 2881. 2896. 3.05e9    2896.        NA       NA
##  6 ^GSPC  2019-04-09 2887. 2887. 2873. 2878. 3.01e9    2878.        NA       NA
##  7 ^GSPC  2019-04-10 2881. 2890. 2879. 2888. 3.06e9    2888.        NA       NA
##  8 ^GSPC  2019-04-11 2892. 2893. 2882. 2888. 2.94e9    2888.        NA       NA
##  9 ^GSPC  2019-04-12 2901. 2911. 2898. 2907. 3.69e9    2907.        NA       NA
## 10 ^GSPC  2019-04-15 2908. 2910. 2896. 2906. 3.09e9    2906.        NA       NA
## # … with 243 more rows, and 2 more variables: SMA.short50 <dbl>,
## #   SMA.long100 <dbl>
## # A tibble: 759 x 3
##    date       type  price
##    <date>     <chr> <dbl>
##  1 2019-04-02 close 2867.
##  2 2019-04-03 close 2873.
##  3 2019-04-04 close 2879.
##  4 2019-04-05 close 2893.
##  5 2019-04-08 close 2896.
##  6 2019-04-09 close 2878.
##  7 2019-04-10 close 2888.
##  8 2019-04-11 close 2888.
##  9 2019-04-12 close 2907.
## 10 2019-04-15 close 2906.
## # … with 749 more rows

There are no bullish crosses when adjusting the moving averages to 50 and 100 days, only the single bearish cross in late March 2020.