Главная Софт Анализ данных Видеоурок по MATLAB - Оптимальный рычаг по историческим данным
Видеоурок по MATLAB - Оптимальный рычаг по историческим данным
30.08.2010 08:00

Выбор размера рычага – крайне важная задача в управлении капиталом, поскольку именно рычаг оказывает определяющее влияние на возможные доходность и риск вложения денег. Существуют разные подходы к оптимизации рычага. Можно, например, использовать обобщенные статистические показатели торговой системы/инструмента, такие как средняя доходность, волатильность и т.п., подставлять их в специальные формулы и таким образом находить оптимальный рычаг. Здесь будет продемонстрирован другой, более прямолинейный подход к решению этой задачи – непосредственная оптимизация на истории котировок. В этом случае не требуется знание формул, но необходимо знание софта.


Оптимизация размера рычага решается в MATLAB буквально на лету. Для примера воспользуемся дневными ценами закрытия по паре EUR/USD за 2002 год (файл можно скачать из вложения в конце урока): с 7 января по 27 декабря – 51 полная торговая неделя или 255 торговых дней. В тот период евро демонстрировал очень бодрый восходящий тренд – посмотрим, как его можно было увеличить при помощи правильно выбранного размера рычага.

Примечание: Если вам необходимо оптимизировать рычаг для какой-либо торговой системы, а не просто для торговли по тренду, нужно иметь историю процентных доходностей сделок по этой системе. Если у вас есть только история пунктовой доходности, ее нужно перевести в процентный формат в соответствии со средним уровнем цен по инструменту. Напр., доходность в 200 пт. по EUR/USD при курсе 1.0000 переводим в процентный формат делением на 10000 (одна единица цены содержит в себе 10 тысяч пунктов) и получаем 0.02 (2%). Подобным образом нужно все сделки по системе преобразовать в процентный формат. Учитывайте также, что непосредственно для оптимизации используются доходности не помноженные на 100.



(Рекомендуется смотреть в полноэкранном режиме)


Комментарии


Основные выражения из командной строки:

  • p=price2ret(EUR,[],'Periodic');
  • L=fminbnd(@(L)-sum(log(1+p*L)),0,-1/min(p))
  • G=exp(sum(log(1+p*L)))
  • (G-1)*100
  • (G^(1/255)-1)*100
  • plot(exp(cumsum(log(1+p*L)))); hold all; plot(exp(cumsum(log(1+p*L/2))))

В этом видеоуроке использовались следующие функции:

  • price2ret() – конвертирует цены в доходности;
  • fminbnd() – находит минимум функции на интервале;
  • sum() – суммирует элементы массива;
  • cumsum() – накопленная сумма;
  • min() – находит минимальное значение в массиве;
  • plot() – строит график по табличным значениям;
  • exp() и log() – математические функции экспоненты и натурального логарифма.

Метод 'Periodic' означает, что расчитываются простые линейные доходности. Если пропустить эту входную переменную, по умолчанию будут расчитаны непрерывные логдоходности.


Рассмотрим более подробно функцию fminbnd(). Для поиска оптимального рычага (L) применялось следующее выражение:


L=fminbnd(@(L)-sum(log(1+p*L)),0,-1/min(p))


Особенностью оптимизатора MATLAB является то, что он по умолчанию ищет минимум функции. Нас же интересовал максимум – максимальный рост при оптимальном рычаге. В таких случаях перед целевой функцией, sum(log(1+p*L)) в нашем случае, ставится знак минус. Минимум такой функции соответствует максимуму исходной. Конструкция @(L) указывает MATLAB, что должны перебираться значения переменной L, которой мы обозначили рычаг, чтобы найти то единственное, при котором достигается максимальный рост капитала. После целевой функции через запятые указываются нижняя и верхняя границы возможных значений рычага. Нетрудно убедится, что верхней границей поиска является абсолютное значение числа обратного к минимальной доходности, поскольку при таком значении рычага происходит полное разорение. Более подробно об этом и целевой функции можно почитать в статье «Выбираем оптимальный рычаг».


После вычисления оптимального размера рычага – 19.77 – мы нашли прирост капитала при торговле по тренду с таким рычагом. Он составил 379% годовых (или 0.62% в день). Это очень внушительная цифра. Для сравнения: рост самой пары EUR/USD в тот период – 16.38% в год. Однако из построенного графика роста капитала при оптимальном рычаге (синяя линия) можно было наглядно убедиться в больших рисках такой стратегии. Просадка достигала 50% от начального депозита. В том же окне был построен график для половинного – 9.88 – рычага (зеленая линия). Он продемонстрировал более «гладкое» поведение с меньшим ростом, но и с меньшей просадкой.


Графики в MATLAB можно строить двумя способами: при помощи нажатия соответствующей кнопки на рабочем пространстве (Workspace) и из командной строки. Второй способ удобен, когда нужно построить график не исходных данных, а какого-либо их преобразования. В нашем случае таким преобразованием было воздействие рычага на доходности: p*L. Команда hold all позволяет отображать сразу несколько графиков в одном окне.


Итак, мы убедились, что оптимизация рычага в MATLAB осуществляется очень быстро и беспроблемно. На практике даже нет нужды вводить функции из командной строки – можно просто сохранить их в текстовом файле и при необходимости «копипастить» в MATLAB. Например, вы можете подгрузить историю доходностей по собственной торговой системе или интересующему вас инструменту в MATLAB, обозначить эти доходности сразу при импорте или потом в Workspace буквой p и копировать fminbnd(@(L)-sum(log(1+p*L)),0,-1/min(p)) в командную строку. MATLAB выполнит функцию, и вы узнаете значение рычага, при котором достигался максимальный рост.


Можно и еще более автоматизировать рутинные задачи, создавая для их решения пользовательские функции, но это уже тема для отдельного урока.



© q-trader

[обсудить на форуме]


Вложения:
ФайлОписаниеРазмер файлаЗагрузки
Скачать файл (EUR.txt)EUR.txtEUR/USD 20021 Kb633
 

Комментарии  

 
0 # BullAndBear 06.09.2010 20:42
а можно по-подробнее - что такое "cumsum() – накопленная сумма"?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # q-trader 07.09.2010 21:07
Объясню на простом примере. Есть исходный ряд цифр.
Допустим:
1, 2, 3, 4, 5

Применяя к нему функцию накопленной суммы получаем новый ряд цифр. Он формируется по так:

1, 1+2, 1+2+3, 1+2+3+4, 1+2+3+4+5 =
1, 3, 6, 10, 15

Суммы последовательно накапливаются. Осюда и название
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить



© 2010–2012. Все права защищены.
Копирование материалов, размещенных на сайте, разрешается только с рабочей ссылкой на источник.



| О проекте |  Правовая информация |
|  Напишите нам |  Карта сайта |



  

 Новости
главные новости экономики и финансовых рынков: события, мнения, прогнозы.

 Статьи
материалы по теханализу, фундаментальному анализу, управлению капиталом (манименеджмент) и др.

 Рынки
фондовый, валютный, товарный рынки: исторические обзоры, динамика, доходность, корреляции.

 Калькуляторы
xls-калькуляторы для оптимизации размера и структуры торговой позиции; опционные калькуляторы.

 Софт
торговые терминалы, программы для теханализа, оптимизации систем и др.: статьи, обзоры, видеоуроки.

 Архив котировок
индексы, валюты, сырье: многолетние истории котировок в форматах .xls и .txt.

 Индикаторы
ºSiX – индикатор настроения рынка на основе расчета соотношения количества опционных контрактов put и call.

 Библиотека
собрание книг, которые рекомендуется прочесть каждому трейдеру в первую очередь.

 Словарь
толкование основных экономических, финансовых терминов, трейдерский сленг.

 Форум
обсуждение материалов сайта и любых вопросов трейдинга и инвестирования.