【发布时间】:2017-06-29 02:37:48
【问题描述】:
好的,所以我正在使用 R 重新测试交易信号。这是我的代码的 sn-p,它显示了 z 分数的创建、接近收盘的回报(使用 TTR 包)、多头信号和 Lag()第二天发出信号。
require(quantmod)
require(TTR)
require(zoo)
# Calculate n period close price z-scores indicator using TTR package
new.df$roll.mean.n3 <- runMean(new.df$Close, n=3, cumulative = FALSE)
new.df$roll.sd.n3 <- runSD(new.df$Close, n=3, cumulative = FALSE)
new.df$roll.z.score.n3 <- apply(new.df[,c('Close','roll.mean.n3', 'roll.sd.n3')], 1, function(x) { (x[1]-x[2])/x[3] } )
# Calculate Close-to-Close returns
new.df$clret <- ROC(new.df$Close,1)
new.df$clret[1] <- 0
# Create the long (up) signal
new.df$sigup <- ifelse(new.df$roll.z.score.n3 < -1, 1, 0)
# Lag signals to align with days in market not days when signals were generated
new.df$sigup <- Lag(new.df$sigup,1) # Note k=1 implies a move *forward*
上面的当前设置产生如下输出:
roll.z.score.n3 sigup
1 NA 0
2 NA 0
3 -1.135974424 0
4 0.193311168 1
5 0.714285714 0
6 -1.148753543 0
7 -0.942160394 1
8 -0.695763683 0
9 1.140646864 0
10 0.985196899 0
11 -0.768766574 0
12 -1.011293858 0
13 -0.516703612 1
14 -1.120897077 0
15 1.091089451 1
当 zscore 值
如果我只交易 1 个持有日,这种设置非常好。
然后,我可以乘以 sigup 1 x % 的每日回报率来获得一条权益曲线。
我想进一步详细说明进入/退出信号。我希望在 zscore 1 时退出。
输出看起来像这样:
roll.z.score.n3 sig long
1 NA 0
2 NA 0
3 -1.135974424 0
4 0.193311168 1
5 0.714285714 1
6 -1.148753543 1
7 -0.942160394 1
8 -0.695763683 1
9 1.140646864 1
10 0.985196899 0
11 -0.768766574 0
12 -1.011293858 0
13 -0.516703612 1
14 -1.120897077 1
15 1.091089451 1
16 0.968364052 0
17 0.872871561 0
18 1.099524999 0
19 0.918397948 0
第 3 行显示了一个
我想提供一些有关当前编码的背景信息,这是为了进一步推动 FOSS 交易博客上的 post。
感谢您查看此内容。
【问题讨论】:
-
当
row 9是1.140646864时,为什么你的信号不为零? -
感谢您在我的输出示例中指出这一点
-
你从哪里得到你的
Lag函数? -
quantmod / TTR / zoo 是必需的包。
标签: r