私はペア取引戦略について学ぼうとしています.Rプログラムを書くためにこの疑似コードを使用しています.
if X and Y are cointegrated:
calculate Beta between X and Y
calculate spread as X - Beta * Y
calculate z-score of spread
# entering trade (spread is away from mean by two sigmas):
if z-score > 2:
sell spread (sell 1000 of X, buy 1000 * Beta of Y)
if z-score < -2:
buy spread (buy 1000 of X, sell 1000 * Beta of Y)
# exiting trade (spread converged close to mean):
if we're short spread and z-score < 1:
close the trades
if we're long spread and z-score > -1:
close the trades
# repeat above on each new bar, recalculating rolling Beta and spread etc.
現在、Systematic Investor Toolbox (SIT)
テクニカル分析を使用したバックテストに使用していますが、SIT を使用したバックテスト ペア取引戦略の実行方法がわかりません。
#data downloading
library(quantmod)
#downloading cointegrated pepsi and coca cola time series data from yahoo
pep<-getSymbols("PEP",start="2010-01-01",auto.assign=F)
ko<-getSymbols("KO",start="2010-01-01",auto.assign=F)
#close price of pepsi and coca cola
pepc<-Cl(pep)
koc<-Cl(ko)
#rolling regression of close price of pepsi vs coca cola
reg= rollSFM(pepc,koc , 50)
#calculating spread
spread=pepc-reg$beta*koc
#mean of the spread
avg=mean(spread)
#standard deviation of spread
std=sd(spread)
#z-score
z=(spread-avg)/std
#pair trading longing and shorting
if(z> 2){
sell spread()
t=1
} else if(z<-2) {
buy spread()
t=2
}
else if(z<1&t=1) {
close the short trade
}else if(z>-1&t=2) {
close the long trade
}
現在の問題は、SIT でペアの売買をシミュレートする方法です。SITがペア取引戦略のバックテストを行うことができない場合、特に出入りするペア取引戦略をどのように実行する必要がありますか. どのようなロジックを使用する必要がありますか?
編集
しばらく検索した結果、バックテスターをゼロから作成できることがわかりましたPerformanceAnalytics
。ただし、バックテストの前に、シグナルを作成して値を返す必要があります。以下はサンプルコードです
library(quantmod)
library(PerformanceAnalytics)
s <- get(getSymbols('SPY'))["2016::"]
s$sma20 <- SMA(Cl(s) , 20)
s$signal <- ifelse(Cl(s) > s$sma20 , 1 , -1)
myReturn <- lag(s$signal) * dailyReturn(s)
charts.PerformanceSummary(cbind(dailyReturn(s),myReturn))
上記のコードでは、シグナルを作成するのは簡単ですが、ペア取引の場合、シグナルを作成してそのシグナルを返すためにどのロジックを使用すればよいでしょうか?