Если a PortfolioCVaR
объект уничтожается при изменении, не забудьте передать существующий объект в PortfolioCVaR
объект, если вы хотите изменить его, в противном случае он создает новый объект. Для получения дополнительной информации см. раздел Создание объекта PortfolioCVaR.
Если вы получаете матричную несовместимость или «несоответствующие» ошибки, представление данных в инструментах следует определенному набору основных правил, описанных в Соглашениях о представлении данных.
Если на 'cuttingplane'
решатель выводит следующее предупреждение:
Warning: Max iterations reached. Consider modifying the solver options, or using fmincon. > In @PortfolioCVaR\private\cvar_cuttingplane_solver at 255 In @PortfolioCVaR\private\cvar_optim_min_risk at 85 In PortfolioCVaR.estimateFrontier at 69
Это предупреждение обычно связано с портфелями в левом нижнем конце эффективной границы. Решатель секущей плоскости мог приблизиться к решению, но может быть слишком много портфелей с очень похожими рисками и возвратами в этом районе, и у решателя заканчиваются итерации, прежде чем достигать желаемой точности.
Чтобы исправить эту проблему, вы можете использовать setSolver
для внесения любых из следующих изменений:
Увеличьте максимальное количество итераций ('MaxIter'
).
Ослабьте допуски на остановку ('AbsTol'
и/или 'RelTol'
).
Используйте другой алгоритм главного решателя ('MasterSolverOptions'
).
Также можно попробовать 'fmincon'
решатель.
Когда максимальное по умолчанию количество итераций 'cuttingplane'
достигается решатель, решателю обычно нужно намного больше итераций, чтобы достичь точности, необходимой для допусков остановки по умолчанию. Можно хотеть объединить увеличение количества итераций (например, умножение на 5) с ослаблением допусков остановки (например, умножение на 10 или 100). Поскольку CVaR является стохастической задачей оптимизации, точность решения относительно выборки сценария, поэтому более свободный допуск остановки может быть приемлемым. Следует иметь в виду, что время решения может значительно увеличиться, когда вы увеличите количество итераций. Для примера удвоение количества итераций более чем в два раза увеличивает время решения. Иногда с использованием другого главного решателя (например, переключение на 'interior-point'
если вы используете 'simplex'
по умолчанию) может получить
'cuttingplane'
решатель для сходимости, не меняя максимальное количество итераций.
Кроме того, 'fmincon'
решатель может быть быстрее, чем 'cuttingplane'
решатель для задач, в которых секущая плоскость достигает максимального количества итераций.
Если на 'cuttingplane'
решатель генерирует следующую ошибку:
Error using cvar_cuttingplane_solver (line 251) Could not solve the problem. Consider modifying the solver options, or using fmincon. Error in cvar_optim_by_return (line 100) [x,~,~,exitflag] = cvar_cuttingplane_solver(... Error in PortfolioCVaR/estimateFrontier (line 80) pwgt = cvar_optim_by_return(obj, r(2:end-1), obj.NumAssets, ...
Чтобы исправить эту проблему, вы можете использовать setSolver
для внесения любых из следующих изменений:
Измените опции главного решателя ('MasterSolverOptions'
), например, изменить алгоритм ('Algorithm'
) или допуск прекращения ('TolFun'
).
Также можно попробовать 'fmincon'
решатель.
Если данные возврата основных средств отсутствуют или NaN
значений, simulateNormalScenariosByData
функция со 'missingdata'
флаг установлен на true
может потерпеть неудачу либо со слишком большим количеством итераций, либо с сингулярной ковариацией. Чтобы исправить эту проблему, рассмотрим следующее:
Если у вас есть данные возврата активов без отсутствующих или NaN
значения, можно вычислить матрицу ковариации, которая может быть сингулярной без трудностей. Если вы пропали или NaN
значения в ваших данных, поддерживаемая функция отсутствующих данных требует, чтобы ваша ковариационная матрица была положительно-определенной, то есть несингулярной.
simulateNormalScenariosByData
использует настройки по умолчанию для отсутствующей процедуры оценки данных, которая может быть не подходящей для всех задач.
В любом случае можно хотеть оценить моменты возврата активов отдельно с помощью функций оценки ECM, таких как ecmnmle
или с вашими собственными функциями.
cvar_optim_transform
ОшибкиЕсли вы получаете ошибки оптимизации, такие как:
Error using cvar_optim_transform (line 276) Portfolio set appears to be either empty or unbounded. Check constraints. Error in PortfolioCVaR/estimateFrontier (line 64) [AI, bI, AE, bE, lB, uB, f0, f, x0] = cvar_optim_transform(obj);
Error using cvar_optim_transform (line 281) Cannot obtain finite lower bounds for specified portfolio set. Error in PortfolioCVaR/estimateFrontier (line 64) [AI, bI, AE, bE, lB, uB, f0, f, x0] = cvar_optim_transform(obj);
estimateBounds
изучить свой портфельный набор и использовать checkFeasibility
чтобы убедиться, что ваш начальный портфель является или допустимым, и, если это недопустимо, что у вас есть достаточный оборот, чтобы получить от вашего начального портфеля к набору портфелей.
Совет
Чтобы исправить эту проблему, попробуйте решить проблему с большими значениями для оборота и постепенно уменьшите до того значения, которое вы хотите.
Если вы получаете эффективные портфели, которые, кажется, не имеют смысла, это может произойти, если вы забудете задать определенные ограничения или вы установите неправильные ограничения. Для примера, если вы позволяете весам портфеля падать между 0
и 1
и не устанавливайте бюджетное ограничение, можно получить портфели, которые на 100% инвестируются в каждый актив. Хотя это может быть трудно обнаружить, лучшее, что нужно сделать, это просмотреть ограничения, которые вы установили с отображением PortfolioCVaR
объект. Если вы получаете портфели со 100% инвестированием в каждый актив, можно просмотреть отображение вашего объекта и быстро увидеть, что никакие ограничения бюджета не установлены. Кроме того, вы можете использовать estimateBounds
и checkFeasibility
определить, имеют ли смысл ограничения для вашего портфеля, и определить, являются ли полученные вами портфели допустимыми относительно независимой формулировки вашего портфеля.
checkFeasibility
| estimateScenarioMoments
| PortfolioCVaR