model <- function(binstr) { sum(2^(which(rev(unlist(strsplit(as.character(binstr), "")) == 1))-1)) } print(model("1101000101001000100010000100110100110")) library(emh) # Let's simulate a simple GBM random walk. dates <- seq.Date(Sys.Date(), Sys.Date() + 2520, 1) gbm_walk <- emh::simulate_brownian_motion(n = 2520) gbm_walk <- zoo::zoo(gbm_walk, dates) plot(emh::as_levels(gbm_walk)) # Now let's print it's variance at different frequencies. variances <- c() for(i in 1:55) { suppressWarnings(variances <- c(variances, var(emh::as_frequency(gbm_walk, i)))) } plot(variances) # Let's simulate a simple noisy sin wave random walk. dates <- seq.Date(Sys.Date(), Sys.Date() + 2520, 1) gbm_walk <- gbm_walk + (sin(seq(1, 2521)) / 25) gbm_walk <- zoo::zoo(gbm_walk, dates) plot(emh::as_levels(gbm_walk)) # Now let's print it's variance at different frequencies. variances <- c() for(i in 1:55) { suppressWarnings(variances <- c(variances, var(emh::as_frequency(gbm_walk, i)))) } plot(variances) suppressMessages(library(Quandl)) Quandl.api_key("t6Rn1d5N1W6Qt4jJq_zC") suppressMessages(library(PerformanceAnalytics)) gbm_walk <- emh::simulate_brownian_motion(drift = 0.1, n = 3780) dates <- seq.Date(Sys.Date(), Sys.Date() + 3779, 1) gbm_walk <- emh::as_levels(zoo::zoo(gbm_walk, dates)) PerformanceAnalytics::charts.PerformanceSummary(emh::as_returns(gbm_walk)) df_gbm_walk <- emh::is_random(gbm_walk, a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_gbm_walk) emh:::.plot_results_test_name(df_gbm_walk) jump_walk <- emh::simulate_merton_model(drift = 0.1, n = 3780, jlambda = 0.4) jump_walk <- emh::as_levels(zoo::zoo(jump_walk, dates)) PerformanceAnalytics::charts.PerformanceSummary(emh::as_returns(jump_walk)) df_jump_walk <- emh::is_random(jump_walk, a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_jump_walk) emh:::.plot_results_test_name(df_jump_walk) usdzar <- Quandl("CURRFX/USDZAR", type = "zoo")$Rate PerformanceAnalytics::charts.PerformanceSummary(emh::as_returns(usdzar)) df_usdzar <- emh::is_random(usdzar, a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_usdzar) emh:::.plot_results_test_name(df_usdzar) stx40 <- Quandl("GOOG/JSE_STX40", type = "zoo")$Close PerformanceAnalytics::charts.PerformanceSummary(emh::as_returns(stx40)) df_stx40 <- emh::is_random(stx40, a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_stx40) emh:::.plot_results_test_name(df_stx40) stxfin <- Quandl("GOOG/JSE_STXFIN", type = "zoo")$Close PerformanceAnalytics::charts.PerformanceSummary(emh::as_returns(stxfin)) df_stxfin <- emh::is_random(stxfin, a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_stxfin) emh:::.plot_results_test_name(df_stxfin) stxfin_logrets <- emh::as_logreturns(stxfin) stxfin_sim <- emh::simulate_permutation(logrets = stxfin_logrets, window = 126) stxfin_logrets <- head(stxfin_logrets, length(stxfin_logrets) - 14) PerformanceAnalytics::charts.PerformanceSummary(merge(exp(stxfin_logrets)-1, exp(stxfin_sim)-1)) # Just so you believe me, here are the moments: suppressMessages(library(moments)) for(i in seq(1, 5)) { print(paste(moment(stxfin_logrets, i) == moment(stxfin_sim, i), moment(stxfin_logrets, i))) } df_stxfin_sim <- emh::is_random(emh::as_levels(stxfin_sim), a = 0.9999, freqs1 = seq(1, 20), freqs2 = c("Mon", "Tue", "Wed", "Thu", "Fri", "Week")) emh:::.plot_results_frequency(df_stxfin_sim) emh:::.plot_results_test_name(df_stxfin_sim)