У меня есть структура вложенного цикла, чтобы сгенерировать большое количество backtests, изменяя значение 4 переменных oq, aq, lev и val. Идея состоит в том, чтобы выполнить каждую комбинацию переменных ниже в пределах указанных диапазонов.условное вложенное для цикла выполнение кода, даже если условие не выполнено
Без ограничения этот цикл, таким образом, будет выполняться в сумме 5 * 6 * 5 * 5 = 750 раз, что на ~ 5-10 секунд каждый займет несколько часов. Однако существует ограничение, которое состоит в том, что все веса должны составлять ровно 1 (tot_wgt). Добавив оператор if, я надеялся просто отказаться от таких случаев.
if (tot_wgt != 1):
continue
К сожалению, код по-прежнему кажется, выполнить иногда, когда tot_wgt не имеет значения 1. Это, кажется, происходит каждый раз, когда цикл вала завершил цикл (и, предположительно, также происходит, когда каждый из других 3 петли завершили цикл).
Проблема решена: у меня была ошибка с отступом: мне нужно быть на уровне инструкции if. Но см. Отличный ответ на распознавание чисел с плавающей запятой.
mom = 0
for oq in [0.3, 0.4, 0.5, 0.6, 0.7]:
for aq in [0.05, 0.1, 0.15, 0.2, 0.25, 0.3]:
for lev in [0.0, 0.05, 0.1, 0.15, 0.2]:
for val in [0.0, 0.05, 0.1, 0.15, 0.2]:
tot_wgt = oq + aq + lev + val + mom
if (tot_wgt != 1): #we only want to backtest where the weights add up to 1. If <1 or >1, simply skip
continue
<MAIN BACKTEST CODE HERE>
Спасибо. Да, я думал, что это тоже может быть проблемой, ваше решение элегантно. – Carl