2016-04-13 1 views
1

Я пытаюсь оптимизировать параметры MACD для торговой стратегии, но, к сожалению, я застрял в цене paramset.label. Это код:QUANTSTRAT - apply.paramset issue

################################# 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 

И потом, для последнего, это ошибка:

evaluation # 10: 
$param.combo 
    nFast nSlow 
585 40 60 

[1] "Processing param.combo 585" 
    nFast nSlow 
585 40 60 
result of evaluating expression: 
<simpleError in strategy[[components.type]][[index]]: subscript out of bounds> 
got results for task 10 
numValues: 10, numResults: 10, stopped: FALSE 
first call to combine function 
evaluating call object to combine results: 
    fun(result.1, result.2, result.3, result.4, result.5, result.6, 
    result.7, result.8, result.9, result.10) 
error calling combine function: 
<simpleError in fun(result.1, result.2, result.3, result.4, result.5, result.6,  result.7, result.8, result.9, result.10): attempt to select less than one element> 
numValues: 10, numResults: 10, stopped: TRUE 

Я действительно не понимаю, как я могу это исправить. Может ли кто-нибудь решить эту проблему?

Спасибо большого

ответ

0

Вы не дали кода до ОПТИМИЗАЦИИ части, поэтому здесь только мое направление догадки.

Я понимаю, что вы хотите проверить 20:40 и 30:70, но в вашем коде OPTIMIZATION вы добавите 2 дистрибутива, указав на «component.label = 'macd.out».

Я сделал аналогичный тест, хотя оба они используют индикаторы типа МА, как правило, они не должны указывать на одни и те же данные MA («component.label = 'macd.out»), этот код работал с одной точкой распространения на «компонент .label = 'fast' ", а другой указывает на" component.label = 'slow' ", поскольку они указывают разные данные, чтобы их можно было сравнить.

Вы можете попробовать отладить в этом направлении.

 Смежные вопросы

  • Нет связанных вопросов^_^