如果一个参数组合不返回任何内容,则apply.paramset不会产生结果

在quantstrat中使用apply.paramset函数优化策略时,我一直遇到一个问题。

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

如果所有参数组合都返回至少一个事务,则优化效果良好,但是,如果其中一个组合不返回事务,则所有组合的结果都将丢失/为NULL,通常会出现以下错误:

“ match.names(clabs,names(xi))中的simpleError:名称与以前的名称不匹配”

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

我希望能够从“结果”环境中提取用于此优化的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,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)

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

预先感谢

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

任何输入将不胜感激。

iCMS 回答:如果一个参数组合不返回任何内容,则apply.paramset不会产生结果

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

您的代码可以更合理地使用标准偏差,例如.sdlist = c(1,2)。

本文链接:https://www.f2er.com/2283651.html

大家都在问