Skip to content

Instantly share code, notes, and snippets.

@quantra-go-algo
Created August 28, 2024 20:35
Show Gist options
  • Save quantra-go-algo/4e8a030f6bf2e36df276d35b54560130 to your computer and use it in GitHub Desktop.
Save quantra-go-algo/4e8a030f6bf2e36df276d35b54560130 to your computer and use it in GitHub Desktop.
# Create the VAR-based equally-weighted portfolio returns
df_forecasts$var_stra_returns <- rowMeans((df_forecasts[,match(tickers,colnames(df_forecasts))] *
df_forecasts[,match(ticker_var_forecasts,colnames(df_forecasts))]),
na.rm=TRUE)
# Set the NaN values of the strategy returns to zero
df_forecasts$var_stra_returns[is.na(df_forecasts$var_stra_returns)] = 0.0
# Create the strategy cumulative returns
df_forecasts$var_stra_cum_returns <- exp(cumsum(df_forecasts$var_stra_returns))
# Create the TVP-VAR-SV-based equally-weighted portfolio returns
df_forecasts$tvp_var_sv_stra_returns <- rowMeans((df_forecasts[,match(tickers,colnames(df_forecasts))] *
df_forecasts[,match(ticker_tvp_var_forecasts,colnames(df_forecasts))]),
na.rm=TRUE)
# Set the NaN values of the TVP-VAR-SV strategy returns to zero
df_forecasts$tvp_var_sv_stra_returns[is.na(df_forecasts$tvp_var_sv_stra_returns)] = 0.0
# Create the TVP-VAR-SV strategy cumulative returns
df_forecasts$tvp_var_sv_stra_cum_returns <- exp(cumsum(df_forecasts$tvp_var_sv_stra_returns))
# Create the equally-weighted benchmark portfolio returns
df_forecasts$bnh_returns <- rowMeans(df_forecasts[,match(tickers,colnames(df_forecasts))])
# Create the equally-weighted benchmark portfolio cumulative returns
df_forecasts$bnh_cum_returns <- exp(cumsum(df_forecasts$bnh_returns))
# Convert the date column in date type
df_forecasts$date <- as.Date(df_forecasts$date)
# Create a 15-day moving average long signal
df_forecasts$ma_signal <- ifelse(df_forecasts$bnh_cum_returns>rollapply(df_forecasts$bnh_cum_returns,15,mean,fill=1,align='right'),1,0)
# Buy the assets only when the VAR predict a positive return and the 200-day moving average signal is long too
df_forecasts$stra_improved_returns <- c(0,df_forecasts$ma_signal[-length(df_forecasts$ma_signal)]*df_forecasts$tvp_var_sv_stra_returns[-1])
# Compute the improved strategy returns
df_forecasts$stra_improved_cum_returns <- exp(cumsum(df_forecasts$stra_improved_returns))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment