我正在尝试创建一个具有每天变化的动态n的指标。基本上,我制定的策略是,当股票价格达到历史最高价格时,进入交易。
我能想到的最好的方法是使用Donchian Chanel,并在收盘价等于或大于之前所有DC高点时进入。为此,我需要:
N=(算法的当前日期-开始日期)。
这样,该指标将从第一天开始工作,并且不会“忘记”之前的高点,因为该策略通过多年的数据运行。我遇到的问题是,我不知道如何编写代码/函数来表达策略的当前日期,这样我就可以将其转换为简单的计算。我能想到的最好的代码是:
##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")我遇到的问题是,无论我用什么来代替as.Date(datePos),它总是告诉我"object 'datePos‘not found“。我已经尝试使用我之前在代码中指定的其他内容,例如: Dates、timestamp。
任何建议都会很有帮助。
发布于 2019-04-20 01:19:01
您不能将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时,您就处于有问题的时间序列的最高值。

https://stackoverflow.com/questions/53512078
复制相似问题