如果一个参数组合 returns 没有,则 apply.paramset 没有结果

No results from apply.paramset if one parameter combination returns nothing

我在使用 quantstrat 中的 apply.paramset 函数优化策略时遇到了问题。

我遇到的问题似乎与这里的问题相同: Quantstrat: apply.paramset fails due to combine error for certain paramater distributions, but not others

如果所有参数组合 return 至少有一个交易,则优化效果很好,但是,如果其中一个组合没有 return 交易,则所有组合的结果是 lost/NULL,通常有以下错误:

"simpleError in match.names(clabs, names(xi)): names do not match previous names"

我在下面提供了一个简短的示例,其中它生成了一个成功的参数组合,该组合生成了许多事务(.nlist = 10 和 .sdlist = 1)和一个不生成任何事务的组合(.nlist = 10 和 .sdlist = 20).

我希望能够从 "results" 环境中提取此优化的 tradeStats,但由于错误,结果变为 NULL。

解决这个问题的最佳方法是什么?

# Demo from https://github.com/braverock/quantstrat/blob/master/demo/bbandParameters.R
require(foreach,quietly=TRUE)
require(iterators)
require(quantstrat)

demo('bbands',ask=FALSE)
strategy.st='bbands'

# Here I have chosen only a single parameter for the first distribution and two for the second, 1 will work but 20 will fail
.nlist  = 10
.sdlist = c(1, 20)

# Here are parameters that will successfully produce the results and tradeStats
#.nlist  = c(10,12)
#.sdlist = 1

# number of random samples of the parameter distribution to use for random run
.nsamples = 2 

add.distribution(strategy.st,
                 paramset.label = 'BBparams',
                 component.type = 'indicator',
                 component.label = 'BBands', 
                 variable = list(n = .nlist),
                 label = 'nFAST'
)

add.distribution(strategy.st,
                 paramset.label = 'BBparams',
                 component.type = 'indicator',
                 component.label = 'BBands', 
                 variable = list(sd = .sdlist),
                 label = 'nSLOW'
)


results <- apply.paramset(strategy.st, 
                          paramset.label='BBparams', 
                          portfolio.st=portfolio.st, 
                          account.st=account.st, 
                          nsamples=.nsamples, 
                          verbose=TRUE)

希望我提供了足够的信息,如果没有,请告诉我,我会尽力详细说明。

提前致谢

编辑:这个问题的明显答案是不要选择范围太大的参数,换句话说不要撒得太宽,但即使参数没有跨越这么大的范围,如果您对大量 assets/datasets 应用小参数优化,这个问题仍然可能出现。例如,在这种情况下,将参数:“.nlist = c(10,12)”和“.sdlist = 1”(在上例中成功)应用于许多不同的股票,它可能不适用于所有股票他们之中,因此也会遇到这个问题。

如有任何意见,我们将不胜感激。

20 个标准偏差指标导致没有交易,并且来自不同 param.combo 策略结果的 tradeStats 的 rbind() 生成错误。我们应该更优雅地处理这些错误,至少通知用户并允许代码继续执行。我在这里创建了一个问题 - https://github.com/braverock/quantstrat/issues/121

您的代码可以在更实际的标准偏差下正常工作,例如 .sdlist = c(1, 2)。