Если PortfolioCVaR уничтожается при изменении, не забудьте передать существующий объект в PortfolioCVaR если требуется изменить объект, в противном случае создается новый объект. Дополнительные сведения см. в разделе Создание объекта CVaR.
Если вы получаете несовместимость матрицы или «несоответствующие» ошибки, представление данных в инструментах следует определенному набору основных правил, описанных в конвенциях для представления данных.
Если '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