QUANTSTRAT - apply.paramset问题

时间:2016-04-13 17:00:51

标签: optimization quantstrat

我正在尝试为交易策略优化MACD参数,但不幸的是我坚持使用{maxmemory}值。这是代码:

paramset.label

当我运行它时,每个样本都会出现此错误:

################################# MACD PARAMETERS OPTIMIZATION

.fastMA <- (20:40)
.slowMA <- (30:70)
.nsamples = 10

strat.st <- 'volStrat'

# Paramset

add.distribution(strat.st,
                 paramset.label = 'EMA',
                 component.type = 'indicator',
                 component.label = 'macd.out', 
                 variable = list(n = .fastMA),
                 label = 'nFast'
)

add.distribution(strat.st,
                 paramset.label = 'EMA',
                 component.type = 'indicator',
                 component.label = 'macd.out', 
                 variable = list(n = .slowMA),
                 label = 'nSlow'
)

add.distribution.constraint(strat.st,
                            paramset.label = 'EMA',
                            distribution.label.1 = 'nFast',
                            distribution.label.2 = 'nSlow',
                            operator = '<',
                            label = 'nFast<nSlow'
)

results <- apply.paramset(strat.st, 
                          paramset.label = 'EMA', 
                          portfolio = portfolio2.st, 
                          account = account.st, 
                          nsamples = .nsamples, 
                          verbose = TRUE)

stats <- results$tradeStats

print(stats)

然后,对于最后一个,这是错误:

    evaluation # 1:
$param.combo
    nFast nSlow
379    23    51

[1] "Processing param.combo 379"
    nFast nSlow
379    23    51
result of evaluating expression:
<simpleError in strategy[[components.type]][[index]]: subscript out of bounds>
got results for task 1
numValues: 1, numResults: 1, stopped: FALSE
returning status FALSE

我真的不明白我该如何解决它。 任何人都可以解决这个问题吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

你没有在OPTIMIZATION部分之前提供代码,所以这里只是我的猜测方向。

我知道你要测试20:40和30:70,但是在你的OPTIMIZATION代码中,你添加了两个指向&#34; component.label =&#39; macd.out&#39; &#34;

我做了类似的测试,虽然它们都使用MA类型指标,但它们通常不应指向相同的MA数据(&#34; component.label =&#39; macd.out&#39;&#34;) ,这些代码将一个分发点用于&#34; component.label =&#39; fast&#39;&#34;另一个指向&#34; component.label =&#39; slow&#39;&#34;因为他们指向不同的数据,以便可以比较它们。

您可以尝试按此方向进行调试。

相关问题