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 долл. США.