我想在我的quantstrat backtest中使用和指示器,但似乎无法弄清楚如何编写它。基本上我想比较从2天前到3天前的H& L的高低。如果第2天的H& L低于第3天,我会将其作为买入信号,如果不是,我会将其作为短信号。 在那之后我想做另一个指标来做同样的事情,但是提前一个时期,所以昨天的H& L比2天前的H& L低,依此类推。
最初我使用的是donichan频道,但意识到这不会起作用,因为它会保持相同的值,直到其中一个产生新的高或低。
我知道这是一个如此简单的问题,我在想它。
答案 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")