A automação de tarefas é importante quando deseja-se executar um mesmo script de maneira regular. Nesse sentido o pacote taskscheduleR pode apoiar no agendamento de scripts feitos em R.
Como exemplo vamos supor que estamos interessados em decidir se devemos comprar ou vender uma ação no dia seguinte baseado no preço de fechamento dos dias anteriores usando um modelo de Máquinas de Suporte Vetorial.
#Limpa o Workspace rm(list=ls()) #Chama a biblioteca library(devtools) library(quantmod) library(kernlab) #Instala o pacote taskscheduleR devtools::install_github("jwijffels/taskscheduleR") #Chama a biblioteca taskscheduleR library(taskscheduleR) #Especifica as datas de interesse startDate = as.Date("2013-01-01") endDate = as.Date("2015-12-31") #Obtêm os dados do ativo PETR4 e PETR3 getSymbols("PETR4.SA", src="yahoo",from=startDate,to=endDate) #Faz o Candle Chart candleChart(PETR4.SA,theme='white', type='candles') reChart(major.ticks='months',subset='first 16 weeks')
O Candle Chart é apresentado a seguir:
Em seguida vamos treinar uma máquina para tentar apontar a direção do resultado futuro, isto é, se a ação irá apresentar um resultado positivo ou negativo:
#Retorno do Preço de Fechamento ret<-na.omit(ClCl(PETR4.SA)) #Direção do mercado y<-as.numeric(ifelse(ret<0,0,1)) #Cria a base de dados df<-data.frame("Y"=c(y[-1],NA),"X"=ret) #Renomeia as colunas colnames(df)<-c("Y","X")Nesse bloco a ideia é tentar prever a direção $Y=sinal(r_{t})$ usando o retorno do período anterior $X=r_{t-1}$. Supondo que o processo de treinamento tenha sido realizado e que tenhamos descobertos $C=0.1$ e $\sigma=16$ para o modelo C-SVC e kernel Gaussiano, a máquina é construída fazendo-se:
#Constrói a máquina svm <- ksvm(Y~X,data=df, type="C-svc",C=0.1, kpar=list(sigma=16),cross=3) #Faz a previsão pred<- kernlab::predict(svm,df) #Compara com os valores reais table(pred,df$Y) #Salva a máquina treinada save.image("Maquina.RData")Supondo que essa acurácia seja a desejada, agora vamos programar para que o R todo dia baixe a cotação do dia anterior e faça a previsão de qual deveria ser nossa ação no dia atual (vender se a previsão é que o retorno seja positivo ou comprar se a previsão seja do retorno negativo). As opções do pacote taskscheduleR são: ‘ONCE’, ‘MONTHLY’, ‘WEEKLY’, ‘DAILY’, ‘HOURLY’, ‘MINUTE’, ‘ONLOGON’, ‘ONIDLE’. O primeiro passo é montar um script geral que será executado todo dia:
#Chama a biblioteca library(quantmod) library(kernlab) #Lê a máquina criada load("Maquina.RData") #Obtêm a cotação atual getSymbols("PETR4.SA", src="yahoo") #Último retorno observado ret<-tail(ClCl(PETR4.SA),1) #Faz a previsao para o dia previsao<-kernlab::predict(svm,ret) #Monta o arquivo de saida fileConn<-file("Decisao.txt") writeLines(ifelse(previsao==1,"Vender","Comprar"), fileConn) close(fileConn)Esse script deve ser salvo em um arquivo de extensão .R (por exemplo, ScriptPrevisao.R) e, no nosso exemplo, ele deverá ser executado todo dia as 8:00 AM. Após a execução, ele criará um arquivo denominado Decisao.txt que contêm a decisão do dia: Comprar ou Vender. O último passo é programar o computador para executar esse script todo dia no horário determinado, para isso, basta executarmos uma única vez no R:
#Faz o agendamento library(taskscheduleR) myscript <- system.file("saida", "ScriptPrevisao.R", package = "taskscheduleR") #O computador irá executar todo dia as 8:00AM taskscheduler_create(taskname = "DecisaoPETR4", rscript = myscript, schedule = "DAILY", starttime = "08:00")Caso queira deletar o agendamento para que ele não se repita mais, basta fazer:
#Deleta o agendamento library(taskscheduleR) taskscheduler_delete(taskname = "DecisaoPETR4")