Skip to content

Instantly share code, notes, and snippets.

@18182324
Last active May 7, 2022 07:13
Show Gist options
  • Save 18182324/8e46ca7f5f4331b87f0ec2e21e83dfb7 to your computer and use it in GitHub Desktop.
Save 18182324/8e46ca7f5f4331b87f0ec2e21e83dfb7 to your computer and use it in GitHub Desktop.
Backtesting MA in R
# Step 1: Load libraries and data
library(quantmod)
library(PerformanceAnalytics)
##
##Attaching package: 'PerformanceAnalytics'
##The following object is masked from 'package:graphics':
##legend
getSymbols('NFCI', src = 'FRED', , from = '2000-01-01')
##[1] "NFCI"
NFCI <- na.omit(lag(NFCI)) # we can only act on the signal after release, i.e. the next day
getSymbols("^GSPC", from = '2000-01-01')
##[1] "^GSPC"
data <- na.omit(merge(NFCI, GSPC)) # merge before (!) calculating returns)
data$GSPC <- na.omit(ROC(Cl(GSPC))) # calculate returns of closing prices
#Step 2: Create your indicator
data$sig <- ifelse(data$NFCI < 1, 1, 0)
data$sig <- na.locf(data$sig)
#Step 3: Use indicator to create equity curve
perf <- na.omit(merge(data$sig * data$GSPC, data$GSPC))
colnames(perf) <- c("Stress-based strategy", "SP500")
#Step 4: Evaluate strategy performance
table.DownsideRisk(perf)
table.Stats(perf)
##Stress-based strategy SP500
charts.PerformanceSummary(perf)
chart.RelativePerformance(perf[ , 1], perf[ , 2])
chart.RiskReturnScatter(perf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment