ConSetОба hedgeopt и hedgeslf принять необязательный входной аргумент, ConSet, что позволяет указать набор линейных ограничений неравенства для инструментов в портфеле. Примеры в этом разделе являются краткими. Дополнительные сведения о спецификациях ограничений портфеля см. в разделе Анализ портфелей.
Для первого примера установки ограничений вернитесь к использованному примеру полностью хеджированного портфеля. hedgeopt определить минимальную стоимость получения одновременной дельты, гамма и вегетарианской нейтральности (целевые чувствительности все 0). Напомним, что когда hedgeopt вычисляет затраты на ребалансировку портфеля, заданные входные целевые чувствительности рассматриваются как ограничения равенства в процессе оптимизации. Ситуация воспроизводится далее для удобства.
TargetSens = [0 0 0]; [Sens, Cost, Quantity] = hedgeopt(Sensitivities, Price,... Holdings, FixedInd, [], [], TargetSens);
Результаты обеспечивают полностью хеджированный портфель
Sens =
-0.00 -0.00 -0.00
на сумму более 23 000 долл. США.
Cost =
23055.90
Позиции, необходимые для достижения этого полностью хеджированного портфеля, являются
Quantity' =
100.00
-182.36
-19.55
80.00
8.00
-32.97
40.00
10.00
Предположим, что теперь вы хотите поместить некоторые верхние и нижние границы на отдельные инструменты в вашем портфеле. Эти ограничения, наряду с различными общими линейными ограничениями неравенства, можно задать с помощью функции portcons.
В качестве примера предположим, что в дополнение к фиксированным инструментам хранения 1, 4, 5, 7 и 8, как и ранее, необходимо привязать позицию всех инструментов к +/- 180 договорам (для каждого инструмента нельзя коротко или длиннее 180 договоров). Применение этих ограничений запрещает текущее положение во втором инструменте (короткое 182.36). Все остальные инструменты в настоящее время находятся в верхних/нижних границах.
Можно создать эти ограничения, сначала указав нижний и верхний векторы границ, а затем вызвав portcons.
LowerBounds = [-180 -180 -180 -180 -180 -180 -180 -180];
UpperBounds = [ 180 180 180 180 180 180 180 180];
ConSet = portcons('AssetLims', LowerBounds, UpperBounds);
Чтобы наложить эти ограничения, вызовите hedgeopt с ConSet в качестве последнего входного сигнала.
[Sens, Cost, Quantity] = hedgeopt(Sensitivities, Price,... Holdings, FixedInd, [], [], TargetSens, ConSet);
Проверьте выходные данные и убедитесь, что для всех них установлено значение NaN, указывая, что проблема, учитывая ограничения, не может быть решена. Интуитивно результаты означают, что вы не можете получить одновременную дельту, гамма и вегетарианскую нейтральность с этими ограничениями любой ценой.
Чтобы узнать, насколько близко вы можете достичь нейтральности портфеля с этими ограничениями, позвоните hedgeslf.
[Sens, Value1, Quantity] = hedgeslf(Sensitivities, Price,... Holdings, FixedInd, ConSet);
Sens =
-352.43
21.99
-498.77
Value1 =
855.10
Quantity =
100.00
-180.00
-37.22
80.00
8.00
-31.86
40.00
10.00
hedgeslf обеспечивает соблюдение нижней границы для второго инструмента, но чувствительность далека от нейтральной. Стоимость получения этого портфеля составляет
Value0 - Value1
ans =
22819.52
В качестве последнего примера ограничений, определяемых пользователем, выполните ребалансировку портфеля с использованием второй цели хеджирования hedgeopt. Предположим, что вы готовы потратить до 20 000 долларов на ребалансировку своего портфеля, и вы хотите знать, какие минимальные чувствительности портфеля вы можете получить за свои деньги. В этой форме следует напомнить, что целевая стоимость (20 000 долл. США) рассматривается как ограничение неравенства в процессе оптимизации.
Для справки, запуск hedgeopt без каких-либо заданных пользователем ограничений линейного неравенства.
[Sens, Cost, Quantity] = hedgeopt(Sensitivities, Price,... Holdings, FixedInd, [], 20000);
Sens =
-4345.36 295.81 -6586.64
Cost =
20000.00
Quantity' =
100.00
-151.86
-253.47
80.00
8.00
-18.18
40.00
10.00
Этот результат соответствует 20 000 долларов США по профилю чувствительности портфеля, показанному на рисунке Затраты на ребалансировку.
Предположим, что в дополнение к фиксированным инструментам хранения 1, 4, 5, 7 и 8 вы хотите связать положение всех инструментов в +/- 150 контрактах (для каждого инструмента вы не можете сократить более 150 договоров и не можете увеличить более 150 договоров). Эти границы запрещают текущее положение во втором и третьем приборах (-151,86 и -253,47). Все остальные инструменты в настоящее время находятся в верхних/нижних границах.
Как и ранее, эти ограничения можно создать, задав сначала нижний и верхний векторы границ, а затем вызвав portcons.
LowerBounds = [-150 -150 -150 -150 -150 -150 -150 -150];
UpperBounds = [ 150 150 150 150 150 150 150 150];
ConSet = portcons('AssetLims', LowerBounds, UpperBounds);
Чтобы наложить эти ограничения, снова вызовите hedgeopt с ConSet в качестве последнего входного сигнала.
[Sens, Cost, Quantity] = hedgeopt(Sensitivities, Price,... Holdings,FixedInd, [], 20000, [], ConSet);
Sens =
-8818.47 434.43 -4010.79
Cost =
19876.89
Quantity' =
100.00
-150.00
-150.00
80.00
8.00
-28.32
40.00
10.00
С этими ограничениями, hedgeopt обеспечивает соблюдение нижней границы для второго и третьего документов. Понесенные расходы составляют 19 876,89 долл. США.