将布林线策略应用于资产组合

时间:2014-12-17 14:18:29

标签: r apply xts quantmod algorithmic-trading

我面对以下简单的交易策略:

买入:当股票价格高于布林带上限时。

卖出:当股票价格低于布林带下限时。

持有:买入信号已经出现,因此我们持有股票直到一个重新分配日出现卖出信号。

我们只考虑使用GSee的起点功能每周重新分配日期。

require(quantmod)

# load stock data 
tickers <- c("IBM")
myEnv <- new.env()
getSymbols(tickers, from ="2012-01-03", to="2014-12-01", env=myEnv)

close.prices <- do.call(merge, eapply(myEnv, Cl))
close.prices <- close.prices[,pmatch(tickers,colnames(close.prices))]
colnames(close.prices) <- c("IBM")

# now apply the simple trading strategy
m <- merge(close.prices, BBands(close.prices, n=20, maType="SMA"))
m$sig[with(m, IBM > up) & index(m) %in% index(m)[startpoints(m, on="weeks")]] <- 1
m$sig[with(m, IBM < dn) & index(m) %in% index(m)[startpoints(m, on="weeks")]] <- 0
m$sig[1] <- 0
m <- na.locf(m)
sig <- m$sig

到目前为止一切顺利! 现在,我有更多的价格系列,我想从中提取信号:

tickers <- c("IBM","AAPL")
getSymbols(tickers, from="2012-01-01", to="2013-12-01")

close.prices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))
colnames(close.prices) <- c("IBM","APPLE")´

我想将上述交易策略应用于此资产组合而不定义 每个资产的矩阵(此处为&#39; m&#39;)。我习惯于在循环中思考,但肯定有一种更优雅的方法可以避免循环。

结果应如下所示:

> sig[100:110]
           IBM APPLE
2012-05-24   1     0
2012-05-25   1     0 
2012-05-29   1     0 
2012-05-30   1     0 
2012-05-31   1     0 
2012-06-01   1     0 
2012-06-04   0     0 
2012-06-05   0     0 
2012-06-06   0     0 

0 个答案:

没有答案