Комментарии
- В рамках БШ арбитраж не возможен. Безрисковые прибыльные комбинации су...
q-trader - не уверен в отсутствии арбитража при данной схеме вычисления стоимости...
Руслан - Работа предстоит огромная
EVVA - Хорошо пишете, жизненно. Все-таки, для того, чтобы делать по-настоящем...
Харита - Рекомендую также ознакомится с продолжением темы http://q-trading.ru/i...
q-trader
Видеоурок по MATLAB - Оптимальный портфель c ограничениями на короткие продажи |
13.01.2011 11:13 |
Формула оптимального портфеля без ограничений на структуру весов и размер рычагов – очень элегантная и очень простая математическая конструкция, учитывая сложность самой проблемы. Однако на практике, при оптимизации инвестиционного портфеля приходится сталкиваться с целым рядом ограничений. Это могут быть институциональные лимиты на размер финансового рычага (нормы по марже, ГО) или его знак – запрет «коротких продаж» или стилистические правила: инвестор может потребовать у управляющего, напр., чтобы не меньше половины средств было вложено в такой-то класс активов и т.п. В таких ситуациях оптимизацию портфеля невозможно свести к какой-либо простой формуле как в случае полного отсутствия ограничений. Здесь требуется использование специальных программных средств, выполняющих численную оптимизацию портфеля. В этом уроке мы рассмотрим возможности портфельной оптимизации в MATLAB в условиях ограничений при помощи функции quadprog(). С математической точки зрения эта функция решает проблему т.н. «квадратичного программирования» – именно к ней можно свести в общем случае задачу портфельной оптимизации. Функция quadprog() при помощи специальных алгоритмов перебирает значения весов, чтобы при данных ограничениях был достигнут максимум роста капитала. Данный урок является полностью самостоятельным материалом, однако читателю также настоятельно рекомендуется ознакомиться и с предыдущим уроком, посвященным оптимальному портфелю без ограничений на короткие продажи и т.п. Интересно также сравнить результаты обоих уроков, поскольку в них используются одни и те же активы. Для примера рассмотрим портфель российских «голубых фишек» из индекса ММВБ10, а именно:
В 2009 году ММВБ10 дважды менял структуру активов. Неизменными в течение года были 8 акций. Префы Сбербанка были исключены по причине очень сильной корреляции с обыкновенными акциями СБ. Итого осталось 7 акций. Файл с котировками этих инструментов за 2009 год можно скачать в конце урока. Для простоты будем искать оптимальный портфель фьючерсов на эти активы. В таком случае можно воспользоваться концепцией безрисковой ставки. Это подразумеваемая участниками фьючерсного рынка усредненная процентная ставка, близкая к ставке рефинансирования. Для того периода достаточно реалистичной будет цифра 10% годовых. Мы рассмотрим два варианта ограничений: запрет коротких продаж и лимиты на размер рычагов.
(Рекомендуется смотреть в полноэкранном режиме) Комментарии Основные выражения из командной строки:
В этом видеоуроке использовались следующие функции:
Рассмотрим более подробно конструкцию функции quadprog(), поскольку она – сердце этого урока. В полном виде она выглядит следующим образом: quadprog(K,r-m,A,b,Aeq,beq,lb,ub). K – матрица ковариаций активов; r – безрисковая ставка; m – вектор доходностей; A и b – ограничения вида «вложить не меньше n% в такие-то активы»; Aeq и beq – ограничения вида «вложить ровно столько-то в такие-то активы», сформулированные в матричной форме, lb и ub – нижняя и верхняя границы для весов (рычагов) портфеля. Чтобы запретить короткие продажи, мы задали lb=0 для всех активов. Чтобы не вводить 7 нулей вручную, использовалась функция zeros(7,1). Аналогичным образом для указания верхнего лимита 2 мы применили функцию ones(7,1)*2. При необходимости можно задавать и ограничения вида вложить не меньше, скажем, 50% в Газпром. Для простоты рассмотрим портфель из 3 акций, первая по порядку GAZP. Тогда в матричной форме это можно записать так: A = [1 0 0; 0 0 0; 0 0 0], b = [0.5 0 0]. В итоге выражение будет выглядеть: quadprog(K,r-m,-A,-b,[],[],lb,ub). Знак минус перед A и b необходим, поскольку функция quadprog() по умолчанию настроена на ограничения вида «не больше чем». Аналогичным образом в матричной форме можно задать и ограничения равенства весов каким-то целевым значениям. В этом случае, естественно, знак минуса перед Aeq и beq ставить не надо. Из урока мы узнали, что при запрете коротких продаж и отсутствии лимитов на размер рычагов (весов) из портфеля могут быть выкинуты некоторые активы. В данном конкретном случае обнулились веса даже по всем акциям, кроме Сбербанка. Это объясняется очень сильной корреляцией между отечественными фишками. Эта корреляция приводит к тому, что выгоднее продать слабые активы для создания хеджа сильным, при этом волатильность снижается больше, чем доходность, можно агрессивнее задействовать финансовый рычаг, и в итоге получить больший рост при том же уровне риска. Если же короткие продажи по тем или иным причинам неприемлемы, то не остается ничего другого как вообще выкинуть слабые активы (с низким отношением Шарпа) из портфеля. Полученный оптимальный портфель будет содержать только длинные позиции. Он будет давать максимальный рост при любом уровне волатильности, который можно регулировать, снижая совокупный рычаг портфеля. Однако ситуация меняется, если есть существенные ограничения на размер маржи, как было показано на шаге №4. В этом случае следует указывать верхние границы весов портфеля. Если какие-то из них оказываются ниже, чем у портфеля без лимитов на размер рычагов, часть выброшенных активов может «реабилитироваться». Их включение в портфель может увеличить потенциальный рост, но достигается это не бесплатно – увеличивается и волатильность. Следует отметить, что оптимальный портфель без лимитов на размер рычагов при той же волатильности дал бы больший рост, в чем мы убедились в конце урока, но его использование в данной ситуации невозможно, поскольку его веса превышают эти лимиты. © q-trader
|
Комментарии
(m=mean(p)*248+s.^2/2;), и что значат степень и делитель?
m=mean(p)*248+s.^2/2
Этой командой находим "мгновенный коэфициент сноса" (drift rate). Это арифметический средний рост. Эта математичка произрастает из модели броуновского движения, которая, напр., используется в моделях ценообразования опционов. Когда имеем дело с выборочными данными математически так уж получается, что чтобы найти мгновенный коэфициент сноса нужно: 1) работать с логдоходностями ; 2) к средней логдоходности еще прибавлять половину дисперсии (s^2/2).
Точка после s это на самом деле точка перед знаком степени ^ Это уже особенность синтаксиса матлаба. Матлаб по умолчанию все операции выполняет как матричные. В данном случае если бы не стояла точка он бы пытался вектор волатильностей возвести в степень по матричным правилам а нам надо было просто каждую волатильность возвести в квадрат. Знак точки перед оператором ^ или * говорит матлабу что нужно действия выполнять поэлементно
>> A=[1.0000;2.0000;];
>> p=price2ret(A)
p =
0.6931
price2ret(A,[], 'Periodic')
RSS лента комментариев этой записи