2015-08-27 25 views
2

Я пытаюсь найти и сравнить ежедневный коэффициент прибыли и потерь в двух запасах в r. Это кодИзвлечение данных в цикле с использованием r

library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in 
tickers <- c("AAPL","GOOG") 
#Set start date 
start_date=as.Date("2014-01-01") 
getSymbols(tickers, src="yahoo", env=stockData,from=start_date) 
for (tick in tickers) { 
    x <- get(tick, pos=stockData) # get data from stockData environment 
    x$gl<-((Cl(x)-Op(x))/Op(x))*100 #Daily gain loss percentage 
} 

Я могу рассчитать ежедневный процент прибыли/убытков для отдельных акций, но я не знаю, как идти дальше и извлечь, сравнить прибыль/убыток процент акций нескольких отдельно.

Пример

if AAPL(gain/loss percentage) is greater than GOOG(gain/loss percentage) then 1 else -1 
+0

Вам нужна «петля»? Почему бы не индивидуально извлечь данные, а затем сравнить g/l: 'applx <- get (" APPL ", pos = stockData)' и 'googlex <-get (" GOOG ", pos = stockData)'? – Parfait

+0

@Parfait Я думаю, что для двух циклов акций не требуется, но я также рассматриваю возможность добавления нескольких акций (скажем, 5 или 15), то, на мой взгляд, для автоматизации цикла это лучший способ сделать это – Eka

+0

, но какие две акции вы тогда сравните для г/л, если вы расширяетесь до нескольких запасов? Все возможные двухпарные перестановки? – Parfait

ответ

1

Ваш код является хорошей отправной точкой. Однако я бы предположил, что вы храните данные тикеров в списке. Поскольку код сейчас, только данные последнего тикера, обработанные в цикле, хранятся в x.

Это немного измененная версия может помочь:

library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in 
tickers <- c("AAPL","GOOG","YHOO","FB") 
#Set start date 
start_date <- as.Date("2014-01-01") 
getSymbols(tickers, src="yahoo", env=stockData, from=start_date) 
x <- list() 
for (i in 1:length(tickers)) { 
    x[[i]] <- get(tickers[i], pos=stockData) # get data from stockData environment 
    x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100 #Daily gain loss percentage 
} 
compare_pl <- function(x,y){ifelse(x$gl > y$gl, 1, -1)} 
aapl_vs_goog <- compare_pl(x[[1]],x[[2]]) 

Теперь переменная aapl_vs_goog содержит данные в те дни, когда AAPL превзошли GOOG (+1) или наоборот (-1):

> tail(aapl_vs_goog) 
#   gl 
#2015-08-19 -1 
#2015-08-20 1 
#2015-08-21 1 
#2015-08-24 1 
#2015-08-25 -1 
#2015-08-26 -1 

Излишне сказать, что это может быть выполнено таким же образом для любого другого тикера.

+0

Немного не связанный с вашим вопросом, я думаю, что ваше определение процентной ценности ежедневной выгоды и потерь необычно. Ежедневный прирост в процентах обычно рассчитывается, принимая разницу между закрытием одного дня и закрытием предыдущего дня (а не открытием того же дня), деленным на закрытие предыдущего дня. Вы можете изменить эту часть кода. – RHertel

Смежные вопросы