2016-09-30 77 views
0

下午!我剛剛開始使用R並學習數據框架,軟件包等......在這裏閱讀了許多消息,但無法找到答案。SMA使用R&TTR包裝

我有一個表,我有R具有以下字段訪問: [符號],[日期],[開],[高],[低],[關閉],[音量]

而且,我的收盤價計算的SMA:

sqlQuery <- "Select * from [dbo].[Stock_Data]" 
conn <- odbcDriverConnect(connectionString) 
dfSMA <- sqlQuery(conn, sqlQuery) 
sma20 <- SMA(dfSMA$Close, n = 20) 
dfSMA["SMA20"] <- sma20 

當我看到輸出,這似乎是計算SMA而不考慮符號是什麼任何關係。我沒有嘗試複製計算,但我懷疑它只是通過20個移動行來完成,無論日期/符號如何。

如何將計算限制爲給定符號? 任何幫助表示讚賞 - 只需要指出正確的方向。

謝謝

回答

0

如果您提供可重複的例子,您更有可能得到答案。首先,讓我們複製您的數據:

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) 
+0

謝謝 - 我會帶走它,並玩它 - 感謝您的幫助 –