1

次の単純な取引戦略に直面しています。

買い: 株価がボリンジャー バンドの上限を上回っている場合。

売り: 株価が下のボリンジャー バンドを下回った場合。

ホールド: 買いシグナルが現れたので、ある再配分日に売りシグナルが現れるまで在庫を保持します。

GSee の startpoints 関数を使用して、毎週の再割り当て日のみを考慮します。

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