R (backtesting techniki spread trade). Przykładowe zastosowanie

# R – backtesting strategii „spread trade” (bez uwzględnienia prowizji)

# importowanie biblotek i funkcji

require(quantmod)
require(PerformanceAnalytics)
getSymbols(‘^GSPC’)
getSymbols(‘^DJI’)

# wstępne obliczenia

closeGSPC=Cl(GSPC)
closeDJI=Cl(DJI)

ilorazG= (closeGSPC[2:length(closeGSPC)]/1416.6)*100
ilorazD= (closeDJI[2:length(closeDJI)]/12474.52)*100

roznica_D_G = ilorazD – ilorazG
############################################################

funkcja1 <- function(roznica_D_G) {
wynik <- c()
i<-1
while (i < (length(roznica_D_G))) {
wynik[i] <- sum(roznica_D_G[1:i+1])
i<-i+1
}
return(wynik)
}
funkcja1(roznica_D_G)
roznica=funkcja1(roznica_D_G)

funkcja1 <- function(roznica) {
wynik <- c()
i<-1
while (i < (length(roznica))) {
wynik[i+2] <- ( roznica[i+1] – roznica[i] )
i<-i+1
}
return(wynik)
}
funkcja1(roznica)
jr=funkcja1(roznica)

# teraz jr (w przyblizeniu) = roznica_D_G – ale zapisane w WEKTORZE

############################################################

funkcja1 <- function(jr) {
wynik <- c()
i<-1
while (i < (length(jr))) {
wynik[i+1] <- ( jr [i+1]  – jr[i] )
i<-i+1
}
return(wynik)
}
funkcja1(jr)
jr2=funkcja1(jr)

#############################################################################
# możliwości generowanie dziennych sygnałów (do inwestowania zgodnie lub odwrotnie do spreadu)

longSMA <- SMA(roznica_D_G, 40)
shortSMA <- SMA(roznica_D_G, 39)

signals <- Lag(ifelse(shortSMA < longSMA, -1, 1))
returns <- jr2 * signals

#############################################################################
# rosnąca suma wyników z inwestowania (returns)

funkcja1 <- function(returns) {
wynik <- c()
i<-41
while (i < (length(returns)+1)) {
wynik[i] <- sum(returns[41:i])
i<-i+1
}
return(wynik)
}
funkcja1(returns)
r=funkcja1(returns)
############################################################################3
# Budowanie najważniejszego wskaźnika inwestycji. Obrazującego #charakterystyke (historycznego) ryzyka – OBSUNIĘCIA KAPITAŁU ( bez #stosowania reinwestycji)
# b – całkowity kapitał (zainwestowany + zyski)

b=200 + r
b[1:40]=200

funkcja1 <- function(b) {
wynik <- c()
i<-1

while (i < (length(b)+1)) {
wynik[i] <- (200-(b[i]-min(b[i:length(b)]))) / 200
i<-i+1
}
return(wynik)
}
funkcja1(b)
o=funkcja1(b)
##########################################################################
# generowanie autorskiego sygnału do inwestowania opartego na wartościach obsunięcia  kapitału

so = Lag(ifelse(o > 0.99, 1, -1))

##########################################

returns2 <- returns * so

funkcja1 <- function(returns2) {
wynik <- c()
i<-41
while (i < (length(returns2)+1)) {
wynik[i] <- sum(returns2[41:i])
i<-i+1
}
return(wynik)
}
funkcja1(returns2)

# wykresy

plot(funkcja1(returns2), type=”h”) # strategii po modyfikacji
lines(r, type=”s”, col=”red”) # przed modyfikają

##############################################

WNIOSEK:

Modyfikując strategie inwestycyjną (w oparciu o sygnały generowane na podstawie wskaźników obsunięcia kapitału) ponad 15-krotnie można podnieść jej końcowy wynik finansowy także ponad 15-krotnie, przy jednoczesnym zmniejszeniu maksymalnego obsuniecia kapitału poniżej 1%, przy kącie nachylenia (krzywej rentowności) zbliżonej do 45 stopni.