比较从一天到前一天的高和低

时间:2017-11-20 07:00:42

标签: r indicator quantstrat back-testing

我想在我的quantstrat backtest中使用和指示器,但似乎无法弄清楚如何编写它。基本上我想比较从2天前到3天前的H& L的高低。如果第2天的H& L低于第3天,我会将其作为买入信号,如果不是,我会将其作为短信号。 在那之后我想做另一个指标来做同样的事情,但是提前一个时期,所以昨天的H& L比2天前的H& L低,依此类推。

最初我使用的是donichan频道,但意识到这不会起作用,因为它会保持相同的值,直到其中一个产生新的高或低。

我知道这是一个如此简单的问题,我在想它。

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,我建议使用dplyr上的滞后函数制作两个新变量,例如:

library(dplyr) 
df <- mutate(df, two.days.ago = lag(high.and.low, -2),
                 three.days.ago = lag(high.and.low, -3))


df <- mutate(df, buy.short = ifelse(two.days.ago < three.days.ago, 
                                   "buy", "short"))

答案 1 :(得分:0)

我设法使用@ Pete建议使用dylpr滞后功能。这是我的最终结果:

Rule3 <- function(lagH3,lagL3,lagH2,lagL2)
{ifelse(lagH3 & lagL3>lagH2 & lagL2,1,0)} 
add.indicator(strategy=strategyname,name="lag",
          arguments=list(x=quote(mktdata$High),n=3L),label="lagH3")
add.indicator(strategy=strategyname,name="lag",
          arguments=list(x=quote(mktdata$Low),n=3L),label="lagL3")
 add.indicator(strategy=strategyname,name="lag",
          arguments=list(x=quote(mktdata$High),n=2L),label="lagH2")
add.indicator(strategy=strategyname,name="lag",
          arguments=list(x=quote(mktdata$Low),n=2L),label="lagL2")

add.indicator(strategyname, name="Rule3", arguments=list(lagH3=quote(mktdata$High.lagH3),
lagL3=quote(mktdata$Low.lagL3),Close=quote(mktdata$Close),lagH2=quote(mktdata$High.lagH2),
lagL2=quote(mktdata$Low.lagL2)), label="Rule3Signal")