Gekko Quant 的移动平均线程序

问题描述 投票:0回答:2

我正在尝试实现 Gekko Quant 的移动平均规则程序 - http://gekkoquant.com/2012/08/29/parameter-optimization-backtesting-part-2/

但是我不断收到相同的错误 - 错误:“}”中出现意外的“}”

我稍微修改了代码以匹配我的数据,如下;

TradingStrategy <- function(mktdata,mavga_period,mavgb_period){

runName <- paste("MAVGa",mavga_period,".b",mavgb_period,sep="")
print(paste("Running Strategy: ",runName))

returns <- diff(log(ES$Close))

mavga <- SMA(ES$Close),1=mavga_period)
mavgb <- SMA(ES$Close),5=mavgb_period)

signal <- mavga / mavgb

signal <- apply(signal,1,function (x) { if(is.na(x)){ return (0) } else { if(x>1){return (1)} else {return (-1)}}})

tradingreturns <- signal * returns
colnames(tradingreturns) <- runName

return (tradingreturns)
}

我的数据位于“关闭”列中的数据框“ES”中。一些示例数据是;

50
51
52
59
54
49
50
50
40
45
46
50
51
52
59
54
49
50
50
40
45
46
r moving-average
2个回答
1
投票

您应该查看第一个错误,修复它并转到下一个第一个错误,而不是查看最后一个错误:

 mavga <- SMA(ES$Close),1=mavga_period)
Error: unexpected ',' in:

您用第一个结束括号完成了对

SMA
的函数调用:

  mavga <- SMA(ES$Close),1=mavga_period)
                    here^    

下一行有相同的语法错误。如果将它们取出,当您尝试将某些内容分配给数字

1
时,就会出现语义错误。我猜原来是字母
"l"
,但使用的字体并没有说明这一点。但是查看您没有忠实复制的原始内容会显示有效的代码:

 #Calculate the moving averages
  mavga <- SMA(Op(mktdata),n=mavga_period)
  mavgb <- SMA(Op(mktdata),n=mavgb_period)

0
投票

引用的博客文章不再可用。但是,我推断您想要这样的东西:

library(tidyquant)

TradingStrategy <- function(mktdata, mavga_period, mavgb_period) {
  returns <- c(NA, diff(log(mktdata$Close)))
  
  mavga <- SMA(mktdata$Close, mavga_period)
  mavgb <- SMA(mktdata$Close, mavgb_period)
  
  signal <- mavga / mavgb
  signal <- ifelse(is.na(signal), 0, ifelse(signal > 1, 1, -1))

  data.frame(return = signal * returns)
}

创建一些虚拟数据并进行测试。

data <- tribble(
  ~Close,
  50,
  51,
  52,
  59,
  54,
  49,
  50,
  50,
  40,
  45,
  46,
  50,
  51,
  52,
  59,
  54,
  49,
  50,
  50,
  40,
  45,
  46
)

TradingStrategy(data, 1, 5)

输出:

        return
1           NA
2   0.00000000
3   0.00000000
4   0.00000000
5  -0.08855340
6   0.09716375
7  -0.02020271
8   0.00000000
9   0.22314355
10 -0.11778304
11 -0.02197891
12  0.08338161
13  0.01980263
14  0.01941809
15  0.12629373
16 -0.08855340
17  0.09716375
18 -0.02020271
19  0.00000000
20  0.22314355
21 -0.11778304
22 -0.02197891

您可能想要调整列名称。

© www.soinside.com 2019 - 2024. All rights reserved.