Поиск и устранение проблем результаты оптимизации портфеля CVaR

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

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

Матричная несовместимость и "несоответствующие" ошибки

Если вы получаете матричную несовместимость или "несоответствующие" ошибки, представление данных в инструментах следует за определенным набором основных правил, описанных в Соглашениях для Представления Данных.

Оптимизация портфеля CVaR предупреждает об “итерациях Max”

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

Смотрите также

| |

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

Больше о

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