Блог им. jk555

Тестирование опционных стратегий в Excel.

    • 12 апреля 2013, 22:49
    • |
    • jk555
  • Еще
Всем привет! 

  У опционных трейдеров очень часто возникает вопрос, как тестировать опционные стратегии? Попробую описать самый простой способ.
И так. Нам понадобится:
1.Excel (уменя Microsoft Office Excel 2003)
2.Данные с биржи РТС (ftp://ftp.rts.ru/pub/FORTS/volat_coeff/) вфайле ftp://ftp.rts.ru/pub/FORTS/volat_coeff/Volat_description.doc подробно описан формат данных.
3.Конвертор. Необходимо извлечь и обработать нужные нам данные.
Приступим.
Создаем на диске папку option (у меня она будет на диске h:\)
Скачиваем в неё файл ftp://ftp.rts.ru/pub/FORTS/volat_coeff/201303.7z. В нем данные за март 2013 года. Распаковываем архив в эту же папку.
Открываем Excel. Создаем новый файл. Называем лист «1». Сохраняем его как Конвертор.xls. На листе «1» создаем кнопку и называем ее, например, Старт. Кнопка должна исполнить функцию StartSplitTextFile.
В ячейке A1 указываем путь к нужному файлу H:\optiom\201303.csv. В ячейке A2 указываем необходимый нам контракт RTS-3.13. Создаем лист «2» потом он нам пригодится.
Жмем кнопку старт и ждем (ждать придется долго, минуты 3). После работы конвертора будет создан файл 201303(1).csv. Открываем его в Excel. Выделяем столбцы D:K, жмем Ctrl+F, выбираем вкладку Заменить. Заменяем точку на запятую. Выделяем столбцы A:K, жмем Ctrl+C, переходим к файлу Конвертор.xls, выбираем лист «2», ячейку A1 и жмем Ctrl+V.
У нас получилось 5080 строк. А нам столько надо? Допустим нам нужны данные только каждый час. Удалим все лишнее. Создадим на листе «2» кнопку «1 час». Она оставит нам только нужные данные. (140 строк).
Все, данные готовы, можем писать тестер.
Создаем файл тестер.xls. Одну страничку называем «архив», вторую тест. В архив вставляем очищенные данные из файла конвертор.
Приступаем к самому интересному. Нам понадобятся формулы кривой улыбки биржи РТС, и формула расчета стоимости опциона.
Идем на сайт РТС за формулой. 
1)  http://fs.rts.ru/files/5570
2)  http://fs.rts.ru/files/5562
Осталось самую малость, написать все это на VB.
Создаем функции Volat и OPrice. Первая будет рассчитывать текущую волатильность опциона, а вторая его цену.
Создаем кнопку старт, StepByStepи CheckBox. Пишем небольшой код и… Ура! Все работает.
Если нужно прогнать не сразу, а шаг за шагом, есть кнопка StepByStep. Ставим галочку рядом с кнопкой, жмем Старт, и дальше StepByStep.
Кстати расчет прошел за 3 секунды.
Кому интересно, пишите комментарии. Позднее, всем заинтересовавшимся скину ссылки на сами файлы.


  Тестирование опционных стратегий в Excel.
★117
36 комментариев
При желании можно тестировать любую стратегию. Дельта, Гамма-хеджирование, роллирование… и т.д.
avatar
jk555, Скажите пожалуйста, а как тестировать дельта/гвмма хеджирование в данном тестере? Из настроек это неочевидно…
avatar
Andy Hudson, нужно написать код на VBA для начала в этом тестере
avatar
jk555, Да, я так и понял, просто подумал что это уже есть, а как использовать не нашел.
Я перебил код на С++ и добавил дельта хедж…
avatar
скиньте ссылку на файлы, спасибо за статью
avatar
прикольно
www.fayloobmennik.net/2782953
www.fayloobmennik.net/2782957

не забудьте проверить антивирусом, я этим обменником файлов первый раз пользуюсь.
avatar
Здорово получилось!
Но есть небольшие вопросы по коду
1. почему для нормального распределения использовалась приблизительная функция, а не готовая функция excel
2. код не совсем оптимален (сложное ветвление в зависимости от кола-пута, можно обойтись флажком (-1), определение премии — аналогично, и еще есть моменты)
Это сознательно, целью не задавались — оптимизировать?
потому как исправив эти не оптимальности — скорость расчетов возрастет, да и лаконичнее код будет
avatar
AlexeyT, код написал за «пару» часов… Какая тут оптимальность? :)
avatar
AlexeyT, я норм.расп. вставлял из другой проги. И по поводу кода сразу скажу, что я самоучка, первую программу писал в первом классе на бейсике, поэтому у профи программистов могут быть претензии. Я в приципе не против, если кто-то перепишет как «надо» и выложит здесь.
avatar
jk555, Application.NormSDist()
вот и все;), и не надо приблизительных аппроксимизирующих расчетов в код.
Да я тоже сам самоучка, и тоже начинал с бейсика, не в первом классе, постарше конечно, и т.к. я очень похожее с опционами в Excel-VBA делаю, поэтому вижу пути оптимизации;)
avatar
AlexeyT, спасибо. я когда робота в экселе писал, то использовал Application.NormSDist, потом переписывал его на кюпайл, а потом на луа… ну короче скопировал, не оптимизировал, признаю! :) мне важнее были итоговые цифры, вот еслиб их кто проверил…
avatar
очень интересная тема, спасибо.
вот пройдёт экспир, погоняю — отпишу впечатления.
Гусев Михаил(debtUM), сравнить бы получаемые теоретические цены с реальными сделками…
avatar
спасибо, интересно, нужно разобраться!
avatar
А кто-то делал что-то подобное уже?
avatar
если вставить в кнопку старт еще это:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
считает все за полсекунды
ну и в конце кода:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
avatar
www.fayloobmennik.net/2783236

оптимизировал как мог :)
avatar
jk555, нод32 заблокировал страницу, перезалейте на другой ресурс плиз
avatar
ZooR, там реклама открывается в новом окне, наверно поэтому, можно и разрешить однократно, иначе там не качает. другой ресурс — какой?
avatar
jk555, скинте на мыло плиз [email protected]
avatar
Спасибо, классная вещь! давно пытаюсь что-то подобное сделать в Екселе, но так как с программированием не очень дружу, получается туго. надеюсь с твоим решением будет все проще.
avatar
kamrad, программирование в экселе проще простого, да и справочного материала и примеров и интернете навалом, куча готовых примеров, бери и переделывай под себя. :)
avatar
www.fayloobmennik.net/2783236 не скачивается
avatar
valera, скачали 48 раз. и у меня скачивается. когда нажимаете скачать, открывается новое окно. после того как оно открылось (там реклама) переходите назад на окно где нажимали скачать, и жмете сохранить.
avatar
перезалил на свой Яндекс.Диск
Ссылка для скачивания
тестер yadi.sk/d/kD6BZdq041VUu
конвертор yadi.sk/d/nCoN64Th41VUe
avatar
качается норм, спасибо! будем разбираться
avatar
Ну если уж делать так делать — необходимо втиснуть формулу расчёта ГО портфеля. Казалось бы прекрасная стратегия может дать дуба если в реале не хватило ГО.
avatar
Simix, формулу дадите для расчета или ссылку на нее
avatar
Я-то надеялся вы этот вопрос прорабатывали. Хотел на готовенькое. ))
Поделюсь чем знаю: когда я полез на РТС смотреть как они считают ГО, то на первый раз сломал мозг.
www.rts.ru/s846
Через некоторое время вернулся и ещё раз перечитал ибо без ГО никуда. Понял что есть клиентский модуль, но я не готов за него платить. И так раз 5 я перечитывал этот документ, пока не уловил главную идею: ГО это необходимая сумма, которая должна быть у клиента при максимальном движении БА за день. Эта цифра находится в таблицах РТС на сайте и составляет порядка макс_ход=9800 пт. За день есть 2 сессии, поэтому берётся 2*макс_ход. Естественно БА ходит и вверх и вниз. Так что у нас 2 сценария. Далее берём 3 сценария волатильности +15% -15% и 0. Теперь берём не менее 10 точек по профилю портфеля и делаем просчёт в этих точках в 2х3 сценариях (2 по БА и 3 по волатильности). находим точку наибольшего убытка и пол-дела сделано. Затем добавляем сумму премий по купленным опционам, добавляем константный риск на дальние проданные опционы и вот у нас подобие ГО. Не забывайте из пунктов перевести в рубли. Для оценки портфеля по крайней мере я это подобие успешно использую. Примечательно что такой подход методологически соответствует тому что делает РТС, но ключевым является риск проданных дальних опционов. От его учёта зависит точность совпадения вашего ГО с тем что насчитает биржа. Я себе этот риск увеличил, чтобы не получилось как в 2011г.
Единственно это всё у меня на С++, внутри моей проги и как отдельный модуль использовано быть не может.
На что я облизываюсь: это сайт option.ru. Они говорят что считают по алгоритмам очень близким к РТС, и это действительно так и выглядит — очень похожие значения выдаёт. Но попросить этот алгоритм я до сих пор стесняюсь. Может быть потому что пошлют… учить матчасть, а она уже мне поднадоела.
avatar
Simix, я читал этот документ :). Все что могу это посчитать лимиты от БГО и «ГО»… Как считать когда биржа границы раздвинула? На истории это тяжело моделировать. Упомянутый вами сайт считает ГО на текущиц момент. А может он посчитать ГО на любой день 2011 года?
avatar
Евгений (jk555), Да, если идёт увеличение ГО на праздники то это конечно фиг посчитаешь, а это сразу в полтора раза. Поэтому при тестинге в стратегию надо закладывать где-то двойное ГО. Иначе я не знаю как это обойти не разбирать же позу на праздники, а затем опять собирать :))
avatar
Simix, «макс_ход=9800 пт. За день есть 2 сессии, поэтому берётся 2*макс_ход. Естественно БА ходит и вверх и вниз. Так что у нас 2 сценария. Далее берём 3 сценария волатильности +15% -15% и 0. Теперь берём не менее 10 точек по профилю портфеля и делаем просчёт в этих точках в 2х3 сценариях (2 по БА и 3 по волатильности). находим точку наибольшего убытка и пол-дела сделано. Затем добавляем сумму премий по купленным опционам, добавляем константный риск на дальние проданные опционы и вот у нас подобие ГО. Не забывайте из пунктов перевести в рубли. „

Надо обдумать…
avatar
Хочу уточнить, но вы наверно правильно поняли — ГО — это максимальный убыток по позиции в диапазоне дневного хождения фьюча. Естественно есть позиции, у которых максимальная просадка не по краям, а в середине диапазона.
Естественно, если у нас есть все данные, график фьюча, улыбка, волатильности, то ГО мы можем посчитать на любой этот момент. Берём все компоненты из того момента времени и считаем.
— У меня уточнение по сигме, которую считает формула улыбки РТС. Вы это значение/100, я видел, прямо подставляете в Блэка Шоулза? Возьмите текущую доску опционов и попробуйте получить таким образом транслируемые теоретические цены. Вы удивитесь, но этого не получится. У меня не получилось, проверьте пожалуйста, могу ошибаться но вопрос принципиальный.
avatar
опс, извиняюсь, у меня формула для дней, а на РТС время — доли года. Всё нормально считается.
avatar

теги блога jk555

....все тэги



UPDONW
Новый дизайн