Estrategia Arima-Montecarlo

En estos videos usaremos dos técnicas de análisis cuantitativo para crear una estrategia de predicción enfocada en el trading en el mercado de divisas.  Combinaremos mediante un algoritmo las simulaciones de Montecarlo con los modelos ARIMA, obteniendo así probabilidades y predicciones.

*Debajo de los tutoriales tienes el CÓDIGO R usado

TUTORIAL 1- CÓDIGO R

 Aprende a crear un modelo de predicción de precios enfocado para el trading en el mercado de divisas. 

 

 

Aquí vemos el resultado final que nos da el código con probabilidades de subida de los activos que deseemos.

En este caso son pares de divisas pero se puede adaptar a otros mercados

TUTORIAL 2
BACKTEST

* En este vídeo aprenderás cómo puedes crear de forma manual en R un backtest para la estrategia del vídeo anterior., para tener una orientación de cuál puedes ser el resultado.

Además explicaré  una variante del modelo que se puede usar para calcular no sólo la probabilidad de subida o bajada del activo en sí, sino también la amplitud del movimiento

CÓDIGO R DEL TUTORIAL ARIMA MONTECARLO

 


## PREDICCION ARIMA – BAYESIAN MONTECARLO

 

#install.packages(«quantmod»)
library(quantmod)
#install.packages(«timeSeries»)
library(timeSeries)
#install.packages(«forecast»)
library(forecast)
#install.packages(«TTR»)
library(TTR)
#install.packages(«jsonlite»)
library(jsonlite)
#install.packages(«RCurl»)
library(RCurl)
#install.packages(«rjson»)
library(rjson)


#Descarga de Datos de Divisas


getFX(c(«CAD/JPY»,»EUR/SGD»,»NOK/SEK»,»AUD/CHF»,»USD/TRY»,»USD/ZAR»,»USD/SGD»,»USD/CNH»,»USD/HKD»,»USD/MXN»,»USD/NOK»,»USD/SEK»,»USD/DKK»,»EUR/SEK»,»EUR/NOK»,»NZD/JPY»,»NZD/CHF»,»EUR/USD»,»GBP/USD»,»USD/CHF»,»NZD/USD»,»EUR/AUD»,»GBP/NZD»,»USD/CAD»,»USD/JPY»,»AUD/CAD»,»CHF/JPY»,»EUR/MXN»,»AUD/NZD»,»AUD/USD»,»EUR/NZD»,»EUR/GBP»,»GBP/CAD»,»GBP/AUD»,»GBP/JPY»,»EUR/CAD»,»AUD/JPY»,»EUR/JPY»,»GBP/CHF»,»EUR/CHF»,»NZD/CAD»,»CAD/CHF»))

getFX(«EUR/DKK»)
getFX(«GBP/SEK»)
getFX(«XAG/USD»)
getFX(«XAU/USD»)

 

FX1=cbind(XAUUSD,XAGUSD,EURUSD,EURCHF,GBPUSD,EURGBP,USDCAD,GBPNZD,EURJPY,USDCHF,USDJPY,AUDUSD,AUDCAD,NZDUSD,AUDCHF,EURAUD,NZDCAD,AUDJPY,EURNZD,NZDCHF,AUDNZD,GBPAUD,NZDJPY,CADCHF,USDSGD,CADJPY,GBPCAD,USDZAR,CHFJPY,GBPCHF,EURCAD,GBPJPY,EURDKK,USDNOK,EURSEK,USDSEK,GBPSEK,NOKSEK)


#Calculamos los retornos

FX1=returns(FX1)
FX1=100*FX1[,1:ncol(FX1)]
FX<-as.timeSeries(FX1)
FX<-na.omit(FX)
head(FX)

forexDatos<-FX


##########################################################
##### CODIGO ESTRATEGIA DE PREDICCION ARIMA-MONTECARLO

# Elegir el mejor modelo arima para cada serie

Quantitative = function( datos){

#Parallel
require(doParallel)
no_cores <- (detectCores() – 1)
cl<- makeCluster(no_cores)
registerDoParallel(cl)

y= datos


primeraVuelta = FALSE

primeraVuelta = FALSE
for(order_x in 0:2){

for(order_y in 0:2){

actual = tryCatch(arima(datos,order=c(order_x,0,order_y)), error =function(err)FALSE)


if( !is.logical(actual)){
print(c(order_x,order_y, actual$aic))
if(primeraVuelta == FALSE){
primeraVuelta = TRUE

menor = actual$aic

aOK = order_x
bOK = order_y

}

if(!is.nan(actual$aic)){
if (actual$aic < menor){
menor = actual$aic
aOK = order_x
bOK = order_y

}
}
}
}
}
stopCluster(cl)
coordenadas = c(aOK,bOK,menor)
}

 

 

monteCarlo <- function(ts.ts, N) {
pq<-Quantitative(ts.ts);

p=pq[1];
q=pq[2];
fit<-arima(ts.ts, c(p, 0, q));

ts.sim<-ts.ts;
n=length(ts.sim)

# SIMULAMOS VARIOS ESCENARIOS CON MONTECARLO

sim <- list();
S <- NULL;
h <- 1;

#set.seed(8)

for(i in 1:N){
sim[[i]] <- simulate(fit,h,future=TRUE,bootstrap = TRUE, innov=NULL);
S <- cbind(S,as.vector(sim[[i]]));
}
S=S[ , colSums(is.na(S)) == 0];

sube <- sum(S>0)/N;
#baja<-sum(S<0)/N;
#baja<- 1 – sube
return(sube);
#return(baja)
}


#Montecarlo

pForex<-matrix(NA,ncol(forexDatos),1)
for( i in 1:ncol(forexDatos))

{

pForex[i]<-monteCarlo(forexDatos[,i],100)

}

#Aplicacion Montecarlo

pForex<- t(pForex)
colnames(pForex)<- names(forexDatos)

pForex


probCaída <- 1 -pForex
probCaída

#

Scroll al inicio