用批改的DonchianChannel()函数计较唐奇安通道指标
唐奇安通道(Donchian Channel)指标是由Richard Donchian提出的一个由三条线构成的通道指标体系(称之为体系有点说大了),这三条线别离是已往n日的较高价、已往n日的较低价以及已往n日较高价和较低价的均值,形状看起来很像通道,所以叫这个名字。
R软件中的TTR包提供了一个DonchianChannel()函数来计较唐奇安通道,原来应该用起来很利便的,遗憾的是DonchianChannel()函数的代码存在错误。计较唐奇安通道是依据的数据应该是:
即不该该包括本期值。而DonchianChannel()函数恰恰包括了本期值。按照凡是的用法,当股价向上打破20日唐奇安通道值时采纳买入计策,假如计较唐奇安通道值时包括了本期值,就永远不行能存在向上打破的大概。
看一下DonchianChannel()函数的bug。
> DonchianChannel function (HL, n = 10) { if (!(NCOL(HL) %in% c(1, 2))) { stop("Price series must be either High-Low, or Close/univariate.") } if (NCOL(HL) == 2) { hi < - HL[, 1] lo <- HL[, 2] } else { hi <- HL lo <- HL } high <- runMax(hi, n) low <- runMin(lo, n) mid <- (high + low)/2 result <- cbind(high, mid, low) colnames(result) <- c("high", "mid", "low") return(result) }
所以,在DonchianChannel()函数的基本上加上一期滞后才是正确的唐奇安通道值。举个例子:
> getSymbols("APPL", adjust=TRUE) > head(cbind((APPL), lag(DonchianChannel(cbind(Hi(APPL),Lo(APPL)),n=5)),k=1),n=10)