如果一个参数组合 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)。
我在使用 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)。