Оценка оптимальных портфелей с целевыми портфельными рисками
[
оценивает оптимальные портфели с целевыми портфельными рисками для pwgt
,pbuy
,psell
]
= estimateFrontierByRisk(obj
,TargetRisk
)Portfolio
, PortfolioCVaR
, или PortfolioMAD
объекты. Для получения дополнительной информации о соответствующих рабочих процессах при использовании этих различных объектов смотрите Рабочий процесс объекта портфеля, Рабочий процесс объекта PortfolioCVaR и Рабочий процесс объекта PortfolioMAD.
[
добавляет аргументы пары "имя-значение" для pwgt
,pbuy
,psell
]
= estimateFrontierByRisk(___,Name,Value
)Portfolio
или PortfolioMAD
объекты.
Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk
функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 14% и 16%. Этот пример использует 'direct'
по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками.
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); pwgt = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]); display(pwgt);
pwgt = 4×3
0.3984 0.2659 0.1416
0.3064 0.3791 0.4474
0.0882 0.1010 0.1131
0.2071 0.2540 0.2979
Portfolio
Объект с BoundType
, MinNumAsset
, и MaxNumAsset
ОграниченияКогда любой, или любая комбинация ограничений из 'Conditional'
BoundType
, MinNumAssets
, и MaxNumAssets
активны, задача портфеля сформулирована как задача смешанного целочисленного программирования, и используется решатель MINLP.
Создайте Portfolio
объект для трех активов.
AssetMean = [ 0.0101110; 0.0043532; 0.0137058 ]; AssetCovar = [ 0.00324625 0.00022983 0.00420395; 0.00022983 0.00049937 0.00019247; 0.00420395 0.00019247 0.00764097 ]; p = Portfolio('AssetMean', AssetMean, 'AssetCovar', AssetCovar); p = setDefaultConstraints(p);
Использование setBounds
с полунепрерывными ограничениями, чтобы задать xi = 0
или 0.02
<= xi
<= 0.5
для всех i = 1
... NumAssets
.
p = setBounds(p, 0.02, 0.7,'BoundType', 'Conditional', 'NumAssets', 3);
При работе с Portfolio
объект, setMinMaxNumAssets
функция позволяет вам установить пределы на количество вложенных активов (так называемая кардинальность) ограничения. Это устанавливает общее количество распределенных активов, удовлетворяющих ограничениям Bound, которые находятся между MinNumAssets
и MaxNumAssets
. Путем настройки MinNumAssets
= MaxNumAssets
= 2, только два из трех активов инвестируются в портфель.
p = setMinMaxNumAssets(p, 2, 2);
Использование estimateFrontierByRisk
оценить оптимальные портфели с целевыми портфельными рисками.
[pwgt, pbuy, psell] = estimateFrontierByRisk(p,[0.0324241, 0.0694534 ])
pwgt = 3×2
0.0000 0.5000
0.6907 0
0.3093 0.5000
pbuy = 3×2
0.0000 0.5000
0.6907 0
0.3093 0.5000
psell = 3×2
0 0
0 0
0 0
The estimateFrontierByRisk
функция использует решатель MINLP, чтобы решить эту задачу. Используйте setSolverMINLP
функция для конфигурирования SolverType
и опции.
p.solverTypeMINLP
ans = 'OuterApproximation'
p.solverOptionsMINLP
ans = struct with fields:
MaxIterations: 1000
AbsoluteGapTolerance: 1.0000e-07
RelativeGapTolerance: 1.0000e-05
NonlinearScalingFactor: 1000
ObjectiveScalingFactor: 1000
Display: 'off'
CutGeneration: 'basic'
MaxIterationsInactiveCut: 30
ActiveCutTolerance: 1.0000e-07
IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
NumIterationsEarlyIntegerConvergence: 30
Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk
функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 14% и 16%. Этот пример использует 'direct'
по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками. The
'direct'
метод использует fmincon
решить задачу оптимизации, которая максимизирует возврат портфеля, удовлетворяющую целевому риску в качестве квадратичного нелинейного ограничения. setSolver
задает s olverType
и SolverOptions
для fmincon
.
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); p = setSolver(p, 'fmincon', 'Display', 'off', 'Algorithm', 'sqp', ... 'SpecifyObjectiveGradient', true, 'SpecifyConstraintGradient', true, ... 'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8); pwgt = estimateFrontierByRisk(p, [0.12, 0.14, 0.16]); display(pwgt);
pwgt = 4×3
0.3984 0.2659 0.1416
0.3064 0.3791 0.4474
0.0882 0.1010 0.1131
0.2071 0.2540 0.2979
Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk
функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 20% и 30%.
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; rng(11); p = PortfolioCVaR; p = simulateNormalScenariosByMoments(p, m, C, 2000); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.95); pwgt = estimateFrontierByRisk(p, [0.12, 0.20, 0.30]); display(pwgt);
pwgt = 4×3
0.5363 0.1387 0
0.2655 0.4991 0.3830
0.0570 0.1239 0.1461
0.1412 0.2382 0.4709
Функция rng
() сбрасывает генератор случайных чисел, чтобы получить задокументированные результаты. Не обязательно сбрасывать генератор случайных чисел, чтобы симулировать сценарии.
Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk
функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 20% и 25%. Этот пример использует 'direct'
по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками.
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; rng(11); p = PortfolioMAD; p = simulateNormalScenariosByMoments(p, m, C, 2000); p = setDefaultConstraints(p); pwgt = estimateFrontierByRisk(p, [0.12, 0.20, 0.25]); display(pwgt);
pwgt = 4×3
0.1610 0 0
0.4784 0.2137 0.0047
0.1116 0.1384 0.1200
0.2490 0.6480 0.8753
Функция rng
() сбрасывает генератор случайных чисел, чтобы получить задокументированные результаты. Не обязательно сбрасывать генератор случайных чисел, чтобы симулировать сценарии.
Чтобы получить эффективные портфели, имеющие целевые портфельные риски, estimateFrontierByRisk
функция принимает один или несколько целевых портфельных рисков и получает эффективные портфели с заданными рисками. Предположим, что у вас есть вселенная из четырех активов, где вы хотите получить эффективные портфели с целевыми рисками портфеля 12%, 20% и 25%. Этот пример использует 'direct'
по умолчанию метод оценки оптимальных портфелей с целевыми портфельными рисками. The
'direct'
метод использует fmincon
решить задачу оптимизации, которая максимизирует возврат портфеля, удовлетворяющую целевому риску в качестве квадратичного нелинейного ограничения. setSolver
задает s olverType
и SolverOptions
для fmincon
.
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; rng(11); p = PortfolioMAD; p = simulateNormalScenariosByMoments(p, m, C, 2000); p = setDefaultConstraints(p); p = setSolver(p, 'fmincon', 'Display', 'off', 'Algorithm', 'sqp', ... 'SpecifyObjectiveGradient', true, 'SpecifyConstraintGradient', true, ... 'ConstraintTolerance', 1.0e-8, 'OptimalityTolerance', 1.0e-8, 'StepTolerance', 1.0e-8); plotFrontier(p);
pwgt = estimateFrontierByRisk(p, [0.12 0.20, 0.25]); display(pwgt);
pwgt = 4×3
0.1613 0.0000 -0.0000
0.4777 0.2139 0.0037
0.1118 0.1381 0.1214
0.2492 0.6480 0.8749
obj
- Объект для портфеляОбъект для портфеля, заданный с помощью Portfolio
, PortfolioCVaR
, или PortfolioMAD
объект. Для получения дополнительной информации о создании объекта портфеля см.
Примечание
Если начальный портфель не задан в obj.InitPort
, принято следующим 0
так что pbuy = max(0,pwgt)
и psell = max(0,-pwgt)
. Для получения дополнительной информации о настройке начального портфеля см. setInitPort
.
Типы данных: object
TargetRisk
- Целевые значения портфельного рискаЦелевые значения портфельного риска, заданные как NumPorts
вектор.
Примечание
При наличии TargetRisk
значения находятся вне области значений рисков для эффективных портфелей, целевой риск заменяется минимальным или максимальным эффективным портфельным риском, в зависимости от того, ниже ли целевой риск или выше диапазона эффективных портфельных рисков.
Типы данных: double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[pwgt,pbuy,psell] = estimateFrontierByRisk(p,‘method’,‘direct’)
'Method'
- Метод оценки границы по риску Portfolio
или PortfolioMAD
объекты'direct'
(по умолчанию) | вектор символов со значением 'direct'
или 'iterative'
Метод оценки границы по риску Portfolio
или PortfolioMAD
объекты, заданные как разделенная разделенными запятой парами, состоящая из 'Method'
и вектор символов с одним из следующих значений:
'direct'
- Создайте одну задачу оптимизации, чтобы максимизировать возврат портфеля с целевым риском в качестве нелинейного ограничения и решить ее непосредственно используя fmincon
, вместо итерационного исследования эффективной границы. Для примера использования 'direct'
опция, см. Получение портфелей с целевыми рисками портфеля для объекта портфеля с помощью прямого метода и опций решателя и Получение портфелей с целевыми рисками портфеля для объекта портфеля MAD с помощью метода Direct и опций решателя.
'iterative'
- Одномерная оптимизация с использованием fminbnd
чтобы найти возврат портфеля между минимальным и максимальным возвратом на границе, которая минимизирует различие между фактическим риском и целевым риском. Затем веса портфеля получаются путем решения границы задачей возврата. Следовательно, 'iterative'
метод медленнее, чем 'direct'
.
Типы данных: char
pwgt
- Оптимальные портфели на эффективной границе с заданными целевыми рискамиОптимальные портфели на эффективной границе с заданными целевыми возвратами от TargetRisk
, возвращается как NumAssets
-by- NumPorts
матрица. pwgt
возвращается на Portfolio
, PortfolioCVaR
, или PortfolioMAD
входной объект (obj
).
pbuy
- Покупки относительно начального портфеля для оптимальных портфелей на эффективной границе Покупки относительно начального портфеля для оптимальных портфелей на эффективной границе, возвращенные как NumAssets
-by- NumPorts
матрица.
Примечание
Если начальный портфель не задан в obj.InitPort
, это значение принято как 0
таким образом pbuy = max(0,pwgt)
и psell = max(0,-pwgt)
.
pbuy
возвращается на Portfolio
, PortfolioCVaR
, или PortfolioMAD
входной объект (obj
).
psell
- Продажи относительно начального портфеля для оптимальных портфелей на эффективной границе Продажи относительно начального портфеля для оптимальных портфелей на эффективной границе, возвращенные как NumAssets
-by- NumPorts
матрица.
Примечание
Если начальный портфель не задан в obj.InitPort
, это значение принято как 0
таким образом pbuy = max(0,pwgt)
и psell = max(0,-pwgt)
.
psell
возвращается для Portfolio
, PortfolioCVaR
, или PortfolioMAD
входной объект (obj
).
Вы также можете использовать запись через точку для оценки оптимальных портфелей с целевыми рисками портфеля.
[pwgt,pbuy,psell] = obj.estimateFrontierByRisk(TargetRisk);
или
[pwgt,pbuy,psell] = obj.estimateFrontierByRisk(TargetRisk,Name,Value);
estimateFrontier
| estimateFrontierByReturn
| estimateFrontierLimits
| rng
| setBounds
| setInitPort
| setMinMaxNumAssets
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.