为什么 Close 和 HLC 共享数据的方式不同?

Why do Close and HLC have different methods to share data?

当我比较这两种方法时,SMA() 需要 xts 格式的收盘价作为第一个参数,而 DonchianChannel() 需要 xts 格式的 HL。但是,SMA 的用法是 Cl(mktdata),而 DonchianChannel() 的用法是 HLC(mktdata)[, 1:2]

为什么会这样?为什么我不能只使用 HLC(mktdata)?

add.indicator(strategy = strategy.st,
                  name = "SMA",
                  arguments = list(x = quote(Cl(mktdata)),
                                   n = 30),
                  label = "nSlow")
add.indicator(strategy = strategy.st, 
                  # correct name of function:
                  name = "DonchianChannel",
                  arguments = list(HL = quote(HLC(mktdata)[, 1:2]), 
                                   n = 20),
                  label = "DCH"

)

HLC(mktdata) returns 一个 3 列的 xts 对象(最高价、最低价和收盘价列),但在 DonchianChannel(HL = )HL 中需要 2 列,包含最高价和收盘价低价,或只有 1 列(比如收盘价)。不是 3 列。

查看函数的源代码,您会在开头看到# of columns guard:

DonchianChannel <- function (HL, n = 10, include.lag = FALSE) 
{
    HL <- try.xts(HL, error = as.matrix)
    if (!(NCOL(HL) %in% c(1, 2))) {
        stop("Price series must be either High-Low, or Close/univariate.")
    }
.........