jk555
jk555 личный блог
12 апреля 2013, 22:49

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

Всем привет! 

  У опционных трейдеров очень часто возникает вопрос, как тестировать опционные стратегии? Попробую описать самый простой способ.
И так. Нам понадобится:
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.
36 Комментариев
    • Andy Hudson
      24 июля 2014, 21:48
      jk555, Скажите пожалуйста, а как тестировать дельта/гвмма хеджирование в данном тестере? Из настроек это неочевидно…
        • Andy Hudson
          03 августа 2014, 22:06
          jk555, Да, я так и понял, просто подумал что это уже есть, а как использовать не нашел.
          Я перебил код на С++ и добавил дельта хедж…
  • valera
    12 апреля 2013, 22:58
    скиньте ссылку на файлы, спасибо за статью
  • Александр (Maklay)
    12 апреля 2013, 23:04
    прикольно
  • AlexeyTikhonov
    12 апреля 2013, 23:42
    Здорово получилось!
    Но есть небольшие вопросы по коду
    1. почему для нормального распределения использовалась приблизительная функция, а не готовая функция excel
    2. код не совсем оптимален (сложное ветвление в зависимости от кола-пута, можно обойтись флажком (-1), определение премии — аналогично, и еще есть моменты)
    Это сознательно, целью не задавались — оптимизировать?
    потому как исправив эти не оптимальности — скорость расчетов возрастет, да и лаконичнее код будет
      • AlexeyTikhonov
        13 апреля 2013, 00:05
        jk555, Application.NormSDist()
        вот и все;), и не надо приблизительных аппроксимизирующих расчетов в код.
        Да я тоже сам самоучка, и тоже начинал с бейсика, не в первом классе, постарше конечно, и т.к. я очень похожее с опционами в Excel-VBA делаю, поэтому вижу пути оптимизации;)
  • Гусев Михаил(debtUM)
    13 апреля 2013, 02:08
    очень интересная тема, спасибо.
    вот пройдёт экспир, погоняю — отпишу впечатления.
  • ZooR
    13 апреля 2013, 03:08
    спасибо, интересно, нужно разобраться!
    • ZooR
      13 апреля 2013, 13:13
      jk555, нод32 заблокировал страницу, перезалейте на другой ресурс плиз
  • kamrad
    13 апреля 2013, 14:49
    Спасибо, классная вещь! давно пытаюсь что-то подобное сделать в Екселе, но так как с программированием не очень дружу, получается туго. надеюсь с твоим решением будет все проще.
  • valera
    13 апреля 2013, 17:10
    www.fayloobmennik.net/2783236 не скачивается
  • Сергей
    17 июня 2013, 22:34
    качается норм, спасибо! будем разбираться
  • Simix
    18 июня 2013, 00:57
    Ну если уж делать так делать — необходимо втиснуть формулу расчёта ГО портфеля. Казалось бы прекрасная стратегия может дать дуба если в реале не хватило ГО.
  • Simix
    18 июня 2013, 12:08
    Я-то надеялся вы этот вопрос прорабатывали. Хотел на готовенькое. ))
    Поделюсь чем знаю: когда я полез на РТС смотреть как они считают ГО, то на первый раз сломал мозг.
    www.rts.ru/s846
    Через некоторое время вернулся и ещё раз перечитал ибо без ГО никуда. Понял что есть клиентский модуль, но я не готов за него платить. И так раз 5 я перечитывал этот документ, пока не уловил главную идею: ГО это необходимая сумма, которая должна быть у клиента при максимальном движении БА за день. Эта цифра находится в таблицах РТС на сайте и составляет порядка макс_ход=9800 пт. За день есть 2 сессии, поэтому берётся 2*макс_ход. Естественно БА ходит и вверх и вниз. Так что у нас 2 сценария. Далее берём 3 сценария волатильности +15% -15% и 0. Теперь берём не менее 10 точек по профилю портфеля и делаем просчёт в этих точках в 2х3 сценариях (2 по БА и 3 по волатильности). находим точку наибольшего убытка и пол-дела сделано. Затем добавляем сумму премий по купленным опционам, добавляем константный риск на дальние проданные опционы и вот у нас подобие ГО. Не забывайте из пунктов перевести в рубли. Для оценки портфеля по крайней мере я это подобие успешно использую. Примечательно что такой подход методологически соответствует тому что делает РТС, но ключевым является риск проданных дальних опционов. От его учёта зависит точность совпадения вашего ГО с тем что насчитает биржа. Я себе этот риск увеличил, чтобы не получилось как в 2011г.
    Единственно это всё у меня на С++, внутри моей проги и как отдельный модуль использовано быть не может.
    На что я облизываюсь: это сайт option.ru. Они говорят что считают по алгоритмам очень близким к РТС, и это действительно так и выглядит — очень похожие значения выдаёт. Но попросить этот алгоритм я до сих пор стесняюсь. Может быть потому что пошлют… учить матчасть, а она уже мне поднадоела.
      • Simix
        18 июня 2013, 17:51
        Евгений (jk555), Да, если идёт увеличение ГО на праздники то это конечно фиг посчитаешь, а это сразу в полтора раза. Поэтому при тестинге в стратегию надо закладывать где-то двойное ГО. Иначе я не знаю как это обойти не разбирать же позу на праздники, а затем опять собирать :))
  • Simix
    18 июня 2013, 17:45
    Хочу уточнить, но вы наверно правильно поняли — ГО — это максимальный убыток по позиции в диапазоне дневного хождения фьюча. Естественно есть позиции, у которых максимальная просадка не по краям, а в середине диапазона.
    Естественно, если у нас есть все данные, график фьюча, улыбка, волатильности, то ГО мы можем посчитать на любой этот момент. Берём все компоненты из того момента времени и считаем.
    — У меня уточнение по сигме, которую считает формула улыбки РТС. Вы это значение/100, я видел, прямо подставляете в Блэка Шоулза? Возьмите текущую доску опционов и попробуйте получить таким образом транслируемые теоретические цены. Вы удивитесь, но этого не получится. У меня не получилось, проверьте пожалуйста, могу ошибаться но вопрос принципиальный.
  • Simix
    18 июня 2013, 19:04
    опс, извиняюсь, у меня формула для дней, а на РТС время — доли года. Всё нормально считается.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн