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
#