如果您提供可重複的例子,您更有可能得到答案。首先,讓我們複製您的數據:
library(quantmod)
symbols <- c("GS", "MS")
getSymbols(symbols)
# Create example data:
dGS <- data.frame("Symbol" = "GS", "Date" = index(GS), coredata(OHLCV(GS)))
names(dGS) <- str_replace(names(dGS), "GS\\.", "")
dMS <- data.frame("Symbol" = "MS", "Date" = index(MS), coredata(OHLCV(MS)))
names(dMS) <- str_replace(names(dMS), "MS\\.", "")
dfSMA <- rbind(dGS, dMS)
> head(dfSMA)
Symbol Date Open High Low Close Volume Adjusted
1 GS 2007-01-03 200.60 203.32 197.82 200.72 6494900 178.6391
2 GS 2007-01-04 200.22 200.67 198.07 198.85 6460200 176.9748
3 GS 2007-01-05 198.43 200.00 197.90 199.05 5892900 177.1528
4 GS 2007-01-08 199.05 203.95 198.10 203.73 7851000 181.3180
5 GS 2007-01-09 203.54 204.90 202.00 204.08 7147100 181.6295
6 GS 2007-01-10 203.40 208.44 201.50 208.11 8025700 185.2161
你想要做的是子集的長數據對象,然後在隔離每個符號應用的技術指標是什麼。這裏有一種方法可以引導你達到你期望的結果。
你可以做到這一點使用list
,並建立在xts
數據對象的指標,每一個符號,而不是一個像data.frame
你在做例子(您可以將TTR功能列在data.frame但它是醜陋的 - 與xts對象合作更理想)。這是你如何做到的模板。最終輸出l.data
應該直觀易用。將每個符號保存在一個單獨的「容器」(列表元素)中,而不是將所有符號合併到一個不容易處理的data.frame
中。
make_xts_from_long_df <- function(x) {
# Subset the symbol you desire
res <- dfSMA[dfSMA$Symbol == x, ]
#Create xts, then allow easy merge of technical indicators
x_res <- xts(OHLCV(res), order.by = res$Date)
merge(x_res, SMA(Cl(x_res), n = 20))
}
l.data <- setNames(lapply(symbols, make_xts_from_long_df), symbols)
謝謝 - 我會帶走它,並玩它 - 感謝您的幫助 –