1

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

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

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

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

我们只考虑使用 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")´

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

结果应如下所示:

> 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 
4

0 回答 0