我想使用使用R:金融股
library(pdfetch)
tickers <- c('FB','YHOO'.....etc long list of tickers)
pdfetch_YAHOO(tickers, fields = c("adjclose"),
from = as.Date("2017-04-01"),
to = as.Date("2017-04-30"))
我的代碼是不是雖然工作。如果有人能告訴我如何將這些信息輸出到圖表,我會非常感謝!
我想使用使用R:金融股
library(pdfetch)
tickers <- c('FB','YHOO'.....etc long list of tickers)
pdfetch_YAHOO(tickers, fields = c("adjclose"),
from = as.Date("2017-04-01"),
to = as.Date("2017-04-30"))
我的代碼是不是雖然工作。如果有人能告訴我如何將這些信息輸出到圖表,我會非常感謝!
好的,我不確定這次練習的目標是什麼,但我會採取一些措施。我將會使用quantmod庫,因爲我知道它。我在這裏做的是建立一個tickers列表,獲取這些tickers,創建一個傳遞數據的函數,將這些數據轉換爲關閉值的xts對象,並將其插入到dygraph中,該dygraph會自動解釋xts數據。
library(dygraphs)
library(quantmod)
library(data.table)
library(magrittr)
tickers <- c('FB','YHOO')
temp <- getSymbols(tickers,
from = as.Date("2001-04-01"),
to = as.Date("2017-04-30"))
munge_data <- function(tickers){
data <- lapply(tickers, get) %>%
lapply(as.data.table) %>%
lapply(function(df) setnames(df, colnames(df),
c("Date","Open","High",
"Low","Close","Volume",
"Adjusted")))
names(data) <- tickers
rbindlist(data,idcol = T)
}
my_data <- tickers %>%
munge_data %>%
.[,.(Date,.id,Close)] %>%
dcast(...~.id, value.var = "Close") %>%
as.xts.data.table()
dygraph(my_data)
這將採取任意數量的tickers並繪製它們(雖然區分7000個ticker符號在圖上是不可能的)。
下面是一個使用ggplot2繪圖的方法。我們將數據下載到每個元素都是股票代碼的列表中。我們將其轉換爲數據框。在調用ggplot的過程中,我們將數據從寬格式轉換爲長格式並對數據進行縮放,以便所有關閉值都相對於期間第一天的關閉值。這使得在同等規模的每一隻股票:
library(pdfetch)
library(tidyverse)
library(xts)
tickers = c('FB','YHOO','GENE','AAPL','MSFT','LUV','AMZN','AIV','BUD','HPQ','XOM','UAL')
# Download tickers into a list
df = map(tickers, function(tt) {
pdfetch_YAHOO(tt, fields = c("adjclose"),
from = as.Date("2017-04-01"),
to = as.Date("2017-04-30"))
})
# Convert to a data frame
df = do.call(cbind, df)
df = data.frame(date=as.Date(index(df)), df)
# Convert data frame to long format and plot
ggplot(gather(df, ticker, close, -date) %>%
group_by(ticker) %>%
mutate(close=close/close[1]),
aes(date, close)) +
geom_hline(yintercept=1, colour="grey30", size=0.2) +
geom_line(size=0.4) +
facet_grid(~ ticker) +
theme_classic(base_size=9) +
theme(strip.background=element_blank(),
axis.text.x=element_blank()) +
scale_y_continuous(limits=c(0.94, 1.06), breaks=seq(0,2,0.05)) +
labs(x="April") +
guides(colour=FALSE)
你也可以用顏色來顯示當一隻股票低於/高於它的價值在一個月的開始。爲此,我們使用插值法,以便線條越過1時顏色始終發生變化。我們還會使用更小的主題。
# Dates to interpolate at
dts = seq(min(df$date), max(df$date), length=500)
# Create an interpolated data frame (note this data frame will have 7000*500 rows if
# you do this for 7000 symbols (not that you'd want to plot that many stocks
# at once anyway)
df.interp = gather(df, ticker, close, -date) %>%
split(. , .$ticker) %>%
map_df(~ data.frame(approx(.x$date, .x$close, xout=dts), ticker=.x$ticker[1])) %>%
rename(date=x, close=y)
ggplot(df.interp %>%
group_by(ticker) %>%
mutate(close=close/close[1]),
aes(date, close, colour=close > 1, group=ticker)) +
geom_hline(yintercept=1, colour="grey30", size=0.2) +
geom_line(size=0.6) +
facet_grid(~ ticker) +
theme_classic(base_size=9) +
theme(strip.background=element_blank(),
axis.text.x=element_blank(),
axis.line.x=element_blank(),
axis.ticks.x=element_blank()) +
scale_y_continuous(limits=c(0.94, 1.06), breaks=seq(0,2,0.05)) +
labs(x="April 2017") +
guides(colour=FALSE)
非常感謝您花時間爲我提供這樣一個深入的答案,這真是太棒了!由於某種原因,每當我嘗試下載代碼到一個列表中,我會得到以下錯誤:「fr [,match(fields,valid.fields)+ 1]中的錯誤: 維數不正確」任何想法可能會發生什麼在這?再次感謝!!! – MasterOfHack
呃 - 我一直玩這個代碼的時間長達兩個小時 - 出於某種原因 - 任何時候我在我的列表中放了超過10個代碼的時候,它會說「錯誤fr [,match(fields,valid.fields)+ 1 ]: 維數不正確「.....不知道爲什麼會發生這種情況。如果您有任何建議,我會很感激它,謝謝你的幫助! – MasterOfHack
我不確定是什麼導致下載問題。這是我第一次使用'pdfetch'。你用'quantmod'試過了嗎? – eipi10
,我不斷收到錯誤如下:錯誤的FR [,比賽(場,valid.fields)+ 1]: 尺寸 – MasterOfHack
的數量不正確什麼樣的錯誤你得到些什麼?我在使用'pdfetch()'查詢時沒有任何問題。我只使用了2個符號,而不是7000.因此,您需要將7000個列表拆分爲更小的數據幀,然後將它們放在一起。 –
有沒有辦法有效地削減這些數據,然後將它們拼接在一起,而不是複製並粘貼到Excel中?如果我將我的數據分成50幀,那麼這種方法將花費很長時間....提前感謝您的幫助! – MasterOfHack