【问题标题】:Calculate changing date for a Donchian Channel technical indicator计算 Donchian Channel 技术指标的更改日期
【发布时间】:2018-11-28 04:20:27
【问题描述】:

我正在尝试创建一个指标,它的动态 n 每天都在变化。基本上,我正在制定一个策略,当股票价格达到其历史最高价时进入交易。

我能想到的最好方法是使用 Donchian Chanel,并在收盘价等于或高于所有之前的 DC 高点时入场。为此,我需要:

n =(算法的当前日期 - 开始日期)。

这样,指标将从第 1 天开始工作,并且不会“忘记”之前的高点,因为该策略会贯穿多年的数据。我遇到的问题是我不知道如何编写代码/函数来表达当前的策略日期,以便我可以将其转换为简单的计算。我能想到的最好的代码是:

##Problem in line below##
dcn <- difftime(initdate, as.Date(datePos), units = c("days"))

### This part will work fine once dcn is working
BuySig<-function(price,DC...)
{ifelse(price=>DC,1,0)}
add.indicator(strategy=strategyname,name="DonchianChannel",
          arguments=list(HL=quote(mktdata$Close),n=dcn),label="DC")

dcn 当然会成为我的 Donichan 频道 n。我遇到的问题是,无论我尝试使用什么来代替 as.Date(datePos) 它都会告诉我“找不到对象'datePos'”。我尝试使用我之前在代码中指定的其他内容,例如:日期、时间戳。

任何建议都会很有帮助。

【问题讨论】:

  • as.Date 正在您的环境中寻找一个名为 datePos 的对象。那么这些数据隐藏在哪里呢?在 data.frame 中?在列表中?初始化日期也是如此。您可以通过reproducible example 解决许多问题

标签: r date quantitative-finance quantstrat difftime


【解决方案1】:

您不能将 DonchianChannel 与变化的 n 一起使用。 n 必须是该函数的固定整数。您需要创建自己的函数来交易自数据集开始以来的“最高点”。

这样就实现了你想要的;只需从中创建一个函数并将其作为add.indicator的函数提供

library(quantmod)
getSymbols("SPY")

SPY_max <- runMax(Cl(SPY), n = 1, cumulative = TRUE)

SPY$all_time_high <-  Cl(SPY) >= SPY_max

chart_Series(SPY["2018/", 1:4])

tail(SPY[SPY$all_time_high == 1,], 10)
#            SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted all_time_high
# 2018-01-19   279.80   280.41  279.14    280.41  140920100     273.9762             1
# 2018-01-22   280.17   282.69  280.11    282.69   91322400     276.2038             1
# 2018-01-23   282.74   283.62  282.37    283.29   97084700     276.7901             1
# 2018-01-25   284.16   284.27  282.40    283.30   84587300     276.7998             1
# 2018-01-26   284.25   286.63  283.96    286.58  107743100     280.0046             1
# 2018-08-24   286.44   287.67  286.38    287.51   57487400     283.3048             1
# 2018-08-27   288.86   289.90  288.68    289.78   57072400     285.5416             1
# 2018-08-28   290.30   290.42  289.40    289.92   46943500     285.6796             1
# 2018-08-29   290.16   291.74  289.89    291.48   61485500     287.2167             1
# 2018-09-20   292.64   293.94  291.24    293.58  100360600     289.2860             

all_time_high 列返回 1 时,您处于相关时间序列的历史最高水平。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多