Реализация Моментумстратегии R - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь реализовать торговую стратегию Momentum в R и попробовал следующий код в качестве первого шага.Период формирования будет от t = -12 до t = -2. Период удержания от t = 0 до t = 2 (3 периода), думая, что есть много вещей, которые можно сделать проще, но так как я новичок в R, это быломоя первая попыткаЕсли против какого-либо мнения, следующий код «в порядке» (конечно, изменение данных должно быть сделано раньше) Есть ли способ запустить код для каждого t автоматически?сейчас я должен настроить периоды вручную.

library(GetBatchSymbols)
library(quantmod)
library(dplyr)
#Getting Tickers
df.SP<-GetSP500Stocks()
#Getting Stockdata
data1<-BatchGetSymbols(tickers = df.SP$company,first.date = "2010-       01-01",last.date = "2015-01-01",freq.data = "monthly",do.complete.data   = TRUE)
#extract return data
mat<-matrix(data = data2$df.tickers$ret.adjusted.prices,nrow =     60,byrow = FALSE)
mat<-as.data.frame(mat)
#extract ticker data
mat2<-matrix(data2$df.tickers$ticker, nrow =60 , ncol = 459)
#create ticker vector
mat2<-mat2[1,]
#implement names in mat
names(mat)<-paste(c(mat2))
#adding 1 to get rate of change
mat2<-mat+1
#extracting date (60 since 5 yr data)
date<-data2$df.tickers$ref.date
date<-as.data.frame(date)
date<-date[1:60,]
date<-as.Date(date,format("%Y-%m-%d"))
#combine date with mat2
mat2<-cbind.data.frame(date,mat2)
#add line of 1 as a starting point
mat2[1,2:459]<-1
#extract holding period data in mat3
mat3<-mat2[12:14,]
#create function to apply cumprod
cum.prod<-function(x) cumprod(x)
#apply cumprod on formation period (t-12 until t-2 (skip t-1    because of short term reversal))
matfirst<-apply(mat2[1:10,], 2,function(x) {cum.prod(c(x))})
#sort Returns from formation period
A<-sort(matfirst[10,])
A<-as.data.frame(A)
#extract rownames
N<-rownames(A)
N<-as.data.frame(N)
#lowest 50 stocks names
L<-N[1:50,]
L<-as.character(L)
#select returns by lowest 50 stock names in holding period table
firsttryL<-select(mat3,one_of(L))
#apply cumprod to holding period table
Lret<-apply(firsttryL, 2,function(x) {cum.prod(c(x))})
#get mean return in last row
Lret1<-mean(Lret[3,])
#get percentage return in holding period
Lret1<-Lret1-1

#same as above
W<-(N[409:458,])
W<-as.character(W)
firsttryW<-select(mat3,one_of(W))
Wret<-apply(firsttryW, 2,function(x) {cum.prod(c(x))})
Wret1<-mean(Wret[3,])
Wret1<-Wret1-1

#Momentum factor
WML<-Wret1-Lret1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...