股票
has.Ad(x) 中的錯誤:找不到對象“BRK”
我正在嘗試合併眾多公司的調整關閉列表,用於我對風險/回報的 ESG 研究。除了伯克希爾哈撒韋股票 (BRK-A) 之外,這些公司似乎都沒有問題。
程式碼如下:
library(quantmod) library(PerformanceAnalytics) maxDate <- "2017-06-23" minDate <- "2020-12-31" average <- c("BABA", "BRK-A", "V", "JNJ", "WMT", "JPM", "MA", "PG", "UNH", "DIS", "BAC", "VZ", "NKE", "NVS", "TM", "MRK", "T", "ABT", "ORCL", "ABBV", "TMO", "XOM", "ACN", "BHP", "CVX") weights <- c(0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04) getSymbols(average, from=maxDate, to=minDate) # IMPORTANT: wait 30 seconds to let the source function finish! # Port.prices <- na.omit(merge(Ad(BABA), Ad(BRK-A), Ad(V), Ad(JNJ), Ad(WMT), Ad(JPM), Ad(MA), Ad(PG), Ad(UNH), Ad(DIS), Ad(BAC), Ad(VZ), Ad(NKE), Ad(NVS), Ad(TM), Ad(MRK), Ad(T), Ad(ABT), Ad(ORCL), Ad(ABBV), Ad(TMO), Ad(XOM), Ad(ACN), Ad(BHP), Ad(CVX))) Port.returns <- ROC(Port.prices, type="discrete")[-1,] colnames(Port.returns) <- average
有沒有人有這個問題的(最好是簡單的)解決方案?當談到 R 時,我仍然是一個菜鳥,所以一些解釋會很棒!
先感謝您!
菲利普
使用 quantmod 包獲取數據時,最好
Ad()
直接在 上呼叫“調整關閉”函式getSymbols()
,否則您可能會遇到麻煩(例如,直接將價格載入到 R 環境中,而不將其保存在變數中) .使用您自己的程式碼的臨時解決方案:
如上所述,您只能
Ad()
直接呼叫getSymbols()
伯克希爾哈撒韋股票 ( BRK-A )。這將返回調整後的收盤價,可以將其保存在變數中:BRK <- Ad(getSymbols("BRK-A", from = maxDate, to = minDate, auto.assign = FALSE))
現在,替換
Ad(BRK-A)
為Port.prices
,BRK
一切正常。此外,設置auto.assign = FALSE
會返回價格而不是將它們載入到 R 環境中(請參閱此處的文件)。替代解決方法:
我冒昧地提供了另一個工作解決方案(程式碼下方提供的註釋),類似於您自己的程式碼:
library(quantmod) library(PerformanceAnalytics) library(xts) maxDate <- "2017-06-23" minDate <- "2020-12-31" tickers <- c("BABA", "BRK-A", "V", "JNJ", "WMT", "JPM", "MA", "PG", "UNH", "DIS", "BAC", "VZ", "NKE", "NVS", "TM", "MRK", "T", "ABT", "ORCL", "ABBV", "TMO", "XOM", "ACN", "BHP", "CVX") n <- length(tickers) prices <- xts() weights <- rep(1/n, n) for (i in 1:length(tickers)){ getdata <- try(Ad(getSymbols(tickers[i], from = maxDate, to = minDate, auto.assign = FALSE, silent = T))) prices <- cbind(prices, getdata) print(sprintf("%s", i)) } # IMPORTANT: wait 30 seconds to let the source function finish! # Port.returns <- ROC(prices, type="discrete")[-1,]
對我的程式碼提供一些註釋,以減輕混淆:
- 您的等權向量 ,
weights
可以通過除以資產數量 n 來概括,然後重複此數量n次。- 庫xts是一個多變數時間序列庫,是一個很好的工具,可以將所有調整後的收盤價收集到一個矩陣中。
- **for 循環可以解釋如下:**對於 中的每個股票
tickers
,我們得到調整後的收盤價,並將它們保存在一個名為 的變數中getdata
。getdata
然後,我們將變數與價格時間序列矩陣進行列綁定。因此,我們不需要Ad()
事後打電話。起初,prices
它只是一個空矩陣(時間序列對象),因此呼叫cbind(prices, getdata)
將為您提供“BABA”的第一個調整後收盤價。現在,第二次迭代將列綁定價格(包含“BABA”調整的收盤價)和 getdata(包含“BRK-A”的調整收盤價),這將有效地更新prices
變數,現在包含“BABA”和“BRK-A” " 在列上(並且每天在行上關閉)。這將發生直到 for 循環結束,給你一個矩陣prices
包含由其股票程式碼定義的所有資產的收盤價tickers
。替代解決方案為您節省了手動建構定價矩陣的幾分鐘時間
Port.prices
,並且可以擴展為任何數量的程式碼(只要程式碼正確)。我希望這有幫助!