exponenta event banner

Устранение неполадок при оптимизации портфеля CVaR

Объект CVaR, уничтоженный при изменении

Если PortfolioCVaR уничтожается при изменении, не забудьте передать существующий объект в PortfolioCVaR если требуется изменить объект, в противном случае создается новый объект. Дополнительные сведения см. в разделе Создание объекта CVaR.

Несовместимость матрицы и «несоответствующие» ошибки

Если вы получаете несовместимость матрицы или «несоответствующие» ошибки, представление данных в инструментах следует определенному набору основных правил, описанных в конвенциях для представления данных.

Оптимизация портфеля 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' решатель для задач, в которых секущая плоскость достигает максимального числа итераций.

Ошибки оптимизации портфеля CVaR с сообщением «Не удалось решить»

Если '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);
Поскольку инструменты оптимизации портфолио требуют ограниченного набора портфолио, эти ошибки (и подобные ошибки) могут возникнуть, если набор портфолио либо пуст, либо, если он не пуст, неограничен. В частности, алгоритм оптимизации портфеля требует, чтобы набор портфеля имел по крайней мере конечную нижнюю границу. Наилучшим способом решения этих проблем является использование функций проверки в окне Проверка проблемы портфеля CVaR. В частности, использование estimateBounds для проверки набора портфолио и использования checkFeasibility чтобы гарантировать, что ваш первоначальный портфель либо осуществим, и, если невозможно, что у вас есть достаточный оборот, чтобы получить от вашего первоначального портфеля к набору портфелей.

Совет

Чтобы исправить эту проблему, попробуйте решить проблему с большими значениями для оборота и постепенно уменьшитесь до нужного значения.

Эффективные портфолио не имеют смысла

Если вы получаете эффективные портфели, которые, кажется, не имеют смысла, это может произойти, если вы забыли установить определенные ограничения или вы установили неправильные ограничения. Например, если допускается падение веса портфеля между 0 и 1 и не устанавливайте бюджетное ограничение, вы можете получить портфели, которые на 100% вложены в каждый актив. Хотя это может быть трудно обнаружить, лучше всего проверить ограничения, которые вы установили с отображением PortfolioCVaR объект. При получении портфелей со 100% инвестициями в каждое основное средство можно просмотреть просмотр объекта и быстро увидеть, что бюджетное ограничение не установлено. Также можно использовать estimateBounds и checkFeasibility определить, имеют ли ограничения для набора портфелей смысл, и определить, являются ли полученные портфели выполнимыми по отношению к независимой формулировке набора портфелей.

См. также

| |

Связанные примеры

Подробнее

Внешние веб-сайты