首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R& TTR封装的SMA

使用R& TTR封装的SMA
EN

Stack Overflow用户
提问于 2016-09-30 22:41:26
回答 1查看 1K关注 0票数 0

下午好!我刚从R开始学习数据帧,软件包等等.在这里读了很多信息,但找不到答案。

我有一个使用R访问的表,该表有以下字段:符号、日期、打开、高、低、关闭、卷

而且,我正在根据收盘价来计算SMA:

代码语言:javascript
复制
sqlQuery <- "Select * from [dbo].[Stock_Data]"
conn <- odbcDriverConnect(connectionString)
dfSMA <- sqlQuery(conn, sqlQuery)
sma20 <- SMA(dfSMA$Close, n = 20)
dfSMA["SMA20"] <- sma20

当我看输出时,它似乎是在计算SMA,而不考虑符号是什么。我没有尝试复制这个计算,但我怀疑它只是在移动20行,而不管日期/符号如何。

如何将计算限制在给定的符号上?任何帮助都是值得赞赏的--只是需要指向正确的方向。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 05:28:27

如果你提供可重复的例子,你更有可能得到答案。首先,让我们复制您的数据:

代码语言:javascript
复制
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中,这并不容易使用。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39801080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档