Supplying an argument to TA
in chartSeries
inside a function only works when TA
´s are in .GlobalEnv$
. Taking .GlobalEnv$
out, it gets this error:
Error in addTA(cChart.env$I1, col = "red", on = 1) :
object 'cChart.env' not found
It seems that chartSeries
is looking for TA
´s only in global environment.
#lib
library(quantmod)
#function
left <- function(x, n) if(n>0) substr(x, 1, n) else substr(x, 1-n, nchar(x))
cChart=function(chart,dt_venc,nSem,diasPos=0){
dt_ini=dt_venc-(7*nSem)
dt_fim=dt_ini+4
dt_fim=dt_fim+diasPos
dt_ini=dt_ini-120
price <- Cl(chart)
#it only worked with .GlobalEnv$cChart.env
.GlobalEnv$cChart.env=list( # cChart.env=list(...) does not work
I1 = SMA(price,10)
,I2 = SMA(price,20)
,I3 = SMA(price,50)
,I4 = SMA(price,100)
)
#it only worked with .GlobalEnv$cChart.env
TA=list("addTA(cChart.env$I1,col='red',on=1)"
,"addTA(cChart.env$I2,col='blue',on=1)"
,"addTA(cChart.env$I3,col='#009900',on=1)"
,"addTA(cChart.env$I4,col='black',on=1)"
,"addBBands(22)")
assign(deparse(substitute(chart)),chart)
chartSeries(chart,type='candlesticks',theme=chartTheme('white',up.col='#009900',dn.col='darkred')
,subset=paste0(dt_ini,'/',dt_fim)
,major.ticks='weeks'
,TA=TA)
print(deparse(substitute(chart)))
}
#input
getSymbols('PETR4.SA')
hj=Sys.Date()
p4=PETR4.SA[paste0('2017-01-01/',hj)]
colnames(p4)=left(colnames(p4),-9)
p4=p4[complete.cases(p4) & p4$Volume > 0,]
#routine
dt_venc=as.date('2018-01-15')
cChart(p4,dt_venc,nSem=2,diasPos=0)
Is there an option for TA
´s environment?