R中的布林带

R中的布林带,r,algorithmic-trading,testing-strategies,R,Algorithmic Trading,Testing Strategies,我在回溯测试R中的布林带策略时遇到困难。逻辑是,如果收盘价大于上带价,我想做空,然后在超过平均值时结束该仓位。如果收盘价低于较低的波段,我也希望选择多头仓位,当它穿过平均线时,我也希望选择多头仓位。到目前为止,这就是我所拥有的: b这正是我想要的,非常感谢@GSee@GSee当我在一对交易价差上运行它时,#交易数量,#1股PnL,#随时间推移的股权,&#累积回报返回为NA值,这可能是因为在某些方面,传播是负的吗?@user2634864更可能是某个地方存在NA;如果任何值都是NA,那么相乘或添加

我在回溯测试R中的布林带策略时遇到困难。逻辑是,如果收盘价大于上带价,我想做空,然后在超过平均值时结束该仓位。如果收盘价低于较低的波段,我也希望选择多头仓位,当它穿过平均线时,我也希望选择多头仓位。到目前为止,这就是我所拥有的:


b这正是我想要的,非常感谢@GSee@GSee当我在一对交易价差上运行它时,
#交易数量
#1股PnL
#随时间推移的股权
,&
#累积回报
返回为
NA
值,这可能是因为在某些方面,传播是负的吗?@user2634864更可能是某个地方存在NA;如果任何值都是NA,那么相乘或添加一个数字也将导致NA
library(quantmod)

getSymbols("SPY", src="yahoo", from="2013-01-01", to="2013-08-01")
x <- na.omit(merge(SPY, BBands(Cl(SPY))))

x$sig <- NA

# Flat where Close crossed the mavg
x$sig[c(FALSE, diff(sign(Cl(x) - x$mavg), na.pad=FALSE) != 0)] <- 0
x$sig[Cl(x) > x$up] <- -1 # short when Close is above up
x$sig[Cl(x) < x$dn] <- 1 # long when Close is below dn
x$sig[1] <- 0 # flat on the first day
x$sig[nrow(x)] <- 0 # flat on the last day

# Fill in the signal for other times
x$sig <- na.locf(x$sig) # wherever sig is NA, copy previous value to next row

# Now Lag your signal to reflect that you can't trade on the same bar that 
# your signal fires
x$sig <- Lag(x$sig)
x$sig[1] <- 0 # replace NA with zero position on first row
sum(abs(diff(x$sig, na.pad=FALSE))) # number of trades

sum(diff(Cl(x)) * x$sig, na.rm=TRUE) # PnL of 1 share
cumsum(diff(Cl(x), na.pad=FALSE) * x$sig[-1]) # equity over time

sum(ROC(Cl(x)) * x$sig, na.rm=TRUE) # Return of fully invested account
cumsum(ROC(Cl(x), na.pad=FALSE) * x$sig[-1]) # cumulative return