【问题标题】:SMA using R & TTR PackageSMA 使用 R & TTR 封装
【发布时间】:2016-11-11 15:12:41
【问题描述】:

下午!我刚开始使用 R 并学习数据帧、包等...在这里阅读了很多消息但找不到答案。

我有一个使用 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 行来完成,无论日期/符号如何。

如何将计算限制为给定符号? 任何帮助表示赞赏 - 只需要指出正确的方向。

谢谢

【问题讨论】:

    标签: r subset financial


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 谢谢 - 我会拿走它并玩它 - 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多