2016-11-04 3 views
1

Je suis certes un débutant en R et analyse financière dans son ensemble. Pour m'améliorer, j'ai travaillé sur un projet parallèle pour automatiser un filtre "Trending Value". Essentiellement vous tirez 6 métriques financières - P/E, P/B, P/FCF, P/S, EV/EBITDA, et le rendement de l'actionnaire, qui est le rendement de dividende + rendement de rachat d'actions (c.-à-d. . Si vous voulez en savoir plus, mais que vous voulez en savoir plus, il vous faut plus de métriques.Analyse financière en R - dans l'espoir d'ajouter Capitalisation boursière, P/FCF, EV/EBITDA et Rendement Actionnaire à l'ensemble de données

Le code que j'ai mis en place en fonction d'autres messages a tiré les tickers P/E, P/B, & P/S. Il me manque donc la capitalisation boursière, P/FCF, EV/EBITDA, et le rendement des actionnaires. Voici ce que j'ai jusqu'à présent:

library(quantmod) # also loads xts and TTR 
require(plyr) 

# Fetch all Symbols & store only the tickers to retrieve the data 
symbols <- stockSymbols() 

# Convert to just tickers. 
tickers <- symbols[,1] 

# Pull P/E, P/B, P/S 
what_metrics <- yahooQF(c("P/E Ratio", 
          "Price/Book", 
          "Price/Sales")) 

# Not all the metrics are returned by Yahoo. 
metrics <- getQuote(paste(tickers, sep="", collapse=";"), what=what_metrics) 

#Add tickers as the first column and remove the first column which had date stamps 
metrics <- data.frame(Symbol=tickers, metrics[,2:length(metrics)]) 

#Change colnames 
colnames(metrics) <- c("Symbol","P/E","P/B","Price/Sales") 

#Persist this to the csv file 
write.csv(metrics, "FinancialMetrics.csv", row.names=FALSE) 

Toute aide serait appréciée!

+0

Bienvenue dans le débordement de la pile. Vous devez utiliser un jeu de données minimal lorsque vous posez une question alors que vous avez extrait des données de toutes les actions. En outre, votre question est très large et susceptible d'être fermée si vous ne la limitez pas. Quel type d'analyse de valeur de tendance voulez-vous aider à calculer et à quoi cela ressemble-t-il? – shayaa

+0

Merci! Donc essentiellement, similaire à la façon dont je tire le P/E, P/B, & P/S pour chaque ticker jusqu'à présent, je visais à ajouter des colonnes de données à l'ensemble de données (Prix/Free Cash Flow, Enterprise Value/EBITDA , Capitalisation boursière et rendement des actionnaires). Malheureusement, je ne peux pas accéder à cette information à partir de la fonction yahooQF, alors j'espérais qu'il pourrait y avoir une autre méthode ou un autre paquet dont je ne suis pas actuellement au courant. Désolé, c'est encore vague! –

Répondre

0

Cela fera ce que vous voulez.

library(XML) 

stocks <- c("AXP","BA","CAT","CSCO") 

for (s in stocks) { 
     url <- paste0("http://finviz.com/quote.ashx?t=", s) 
     webpage <- readLines(url) 
     html <- htmlTreeParse(webpage, useInternalNodes = TRUE, asText = TRUE) 
     tableNodes <- getNodeSet(html, "//table") 

     # ASSIGN TO STOCK NAMED DFS 
     assign(s, readHTMLTable(tableNodes[[9]], 
       header= c("data1", "data2", "data3", "data4", "data5", "data6", 
          "data7", "data8", "data9", "data10", "data11", "data12"))) 

     # ADD COLUMN TO IDENTIFY STOCK 
     df <- get(s) 
     df['stock'] <- s 
     assign(s, df) 
} 

# COMBINE ALL STOCK DATA 
stockdatalist <- cbind(mget(stocks)) 
stockdata <- do.call(rbind, stockdatalist) 
# MOVE STOCK ID TO FIRST COLUMN 
stockdata <- stockdata[, c(ncol(stockdata), 1:ncol(stockdata)-1)] 

# SAVE TO CSV 
write.table(stockdata, "C:/Users/your_path_here/Desktop/MyData.csv", sep=",", 
      row.names=FALSE, col.names=FALSE) 

# REMOVE TEMP OBJECTS 
rm(df, stockdatalist) 
+0

Merci beaucoup! Bien que malheureusement, je ne pense pas que le rendement EV/EBITDA & buyback (partie de l'équation pour le rendement de l'actionnaire) soit sur Finviz. Cette information est sur Yahoo bien que j'aie du mal à extraire ces données de là aussi. –