anatolyutkin
anatolyutkin личный блог
13 января 2014, 13:58

О программном инструментарии для исторического тестирования торговых систем

Единственное, что есть у трейдера--это история. Будущего никто не знает. Соответственно, одним из основных навыков трейдера должно быть умение обрабатывать исторические данные. Именно путем анализа истории создаются и предварительно тестируются торговые системы. В настоящей заметке я бы хотел описать свои программные технологии для предварительного исторического тестирования систем.

Прежде всего несколько общих слов про софт и вообще про жизнь. Бытие определяет сознание. Говоря менее общо, технологии определяют сознание. И чем красивей и проще используемые технологии--тем четче функционирует мозг, а значит--лучше будут результаты. Из моего и не моего опыта следует, что любая хорошая вещь--красива (обратное неверно). Поэтому мне всегда нравились красивые, простые и понятные вещи, будь то автомобиль, торговая система или квантовая механика :)

В мой комплекс софта для исторического тестирования входят:

1) Wealth-Lab 3.
Это программа из счастливого trend is your friend прошлого. Чак Лебо, доктор Элдер, Вильямсы, Велшлаб--все эти слова вызывают у меня скупую слезу умиления. Когда мы были молодыми и чушь прекрасную несли… Велшлаб--вторая программа, которую я освоил для торговли на бирже (первая была Метасток--но по современным меркам это полное убожество, которым я много лет не пользуюсь вообще. Хотя вотчлисты и вообще виндовая заточка в Метастоке смотрелась неплохо). В принципе, хорошая, годная программа. Нормальный язык программирования (Паскаль) позволяет написать все, что угодно. Неплохо реализовано портфельное тестирование, в отличие от всего другого, известного мне. Из минусов--ужасно медленная, тестировать интрадей не в кайф из-за тормознутости. Для некоторых вещей использую и поныне, так как язык программирования наиболее прозрачен и гибок из известных мне готовых тестирующих софтин. Есть некоторое количество глюков, некоторые запрятаны далеко и глубоко. В свое время даже написал на велше опционный тестер--страшно подумать. 


2) TradeStation
Основной инструмент для тестирования таймфреймовых вещей. Имхо, программа просто супер. Позволяет за пару минут реализовывать большинство мыслей, а стало быть--освобождает время для раздумий. Достаточно быстра, тестирование на минутках делает вполне за разумное время. Мне очень в ней нравится явное разделение генерации сделок и расчета эквити по этим сделкам. Оценил это, когда свой софт стал писать. Также весьма удобно множество различных оценок для результатов тестирования. Куча всяких полезных функций, упрощающих жизнь. Имхо, из готового софта это number one--нумеро уно. 

3) Тиковый тестер. Тестирует на тиках. Естественно, самописный--ибо это уже другой уровень требований к софту. Сделано все на VBA Excel. Позволяет заглянуть внутрь любого таймфрейма и дает гораздо более глубокое понимание, кто, когда и почему. Можно использовать как совместно с TS или WL для отшлифовки входов/выходов, так и как самостоятельный тестер для прогона оригинальных стратегий. Особенность--работа с большими массивами данных. Например, характерный размер тиковых данных для RI--сто миллионов сделок в год. Стало быть, даже при более или менее нормальном коде высоки требования к железу, особенно к ОЗУ и процессору. 
   Краткая схема работы:
а) Подготовка данных на жестком диске. Никаких разделителей и прочего--стринговая переменная жрет слишком много ОЗУ. Только числа, желательно integer.
б) Загрузка данных  с винта в ОЗУ (при правильном выполнении пункта а) занимает минуту-две на квартал тиков RI на обычном ноуте с расходами ОЗУ в районе 500 Мб) 
в) Построение позиций. Данные только из ОЗУ. Занимает несколько десятков секунд.
г) Маржирование позиций и расчет всяких профитфакторов. Делается, естественно, не по всем тикам, а по таймфреймам. Практически мгновенно. 
    Тиковый тестер очень полезная вещь для улучшения понимания того, что творится на рынке. При правильном его использовании генерируется куча идей. Имхо, практически необходим в современном, все сильнее убыстряющемся трейдинге. Кроме того, тики--это первичная информация о рынке, в отличие от любых OHLC. 

4) Опционный тестер
Тестирует опционные стратегии. Естественно, самописный--опять же, требования к прозрачности и гибкости не позволяют использовать что-то не свое. Сделано все на VBA Excel. Заточен под FORTS, но путем небольших переделок можно заточить и под другие рынки. Краткая схема работы:
а) Генерация и запись позиций
б) Построение эквити методом вариационного маржирования и определение параметров стратегии
Цены опционов могут быть взяты из:
а) Исторической волатильности. Преимущество--в том, что ничего, кроме ЦБА не надо. Недостаток--цена опциона в этой модели иногда сильно отличается от реальной цены, особенно во времена резкого роста волатильности.
б) В инетах есть OHLC дневки опционов. Метод не особо хорош, но как улучшение HV метода пойдет. 
в) Истории улыбки волатильности. Самый хороший метод из мне известных. Недавно один хороший человек надоумил меня, что на сайте биржи есть исторические данные часового таймфрейма для улыбки волатильности. Эти данные гораздо ближе к реалу, чем HV. Недостаток--улыбки есть только с середины 2010 года, что, имхо, маловато.
   Вообще, к опционике у меня достаточно настороженное отношение. Как ни крути, а зачастую получается, что опционика связана с редкими событиями. Классический пример--ООМ опционы, некоторые события для них наступают раз в годы. Тестировать такое формально невозможно--пока наберешь статистику по этим редким событиям, рынок уже поменяется. Поэтому надо либо идею какую-то изначально иметь (помимо страха перед армагеддоном у покупателей путов), либо делать так, чтобы редких событий не было, что сложно. Но тем не менее, кое-чего нарыть удалось, тета капает :) Если кто-то захочет подобную вещь сделать--совет рассчитывать функцию нормального распределения через так называемый T алгоритм--эта асимптотическое разложение, считает с точностью пять знаков за три итерации.

5) Стаканный тестер. Его возникновение связано с тем, что мне надоело терять время и деньги на живом тестировании стаканных идей. Пока находится в стадии разработки--ибо требует быстрой работы с огромными массивами данных--а значит, на дурачка не проскочишь и код надо писать с самого начала правильный. 

В заключение хотел бы отметить синергетический эффект от наличия широкого спектра тестеров. Зная только велшлаб, никогда в жизни не создашь того, что можно сделать, зная еще и TS. А зная только эти две программы и не вникая в тики, куча всего полезного останется за кадром. Опционика--это своеобразная вещь--но и ее знание приводит к интересным опционным и не опционным идеям. Стакан--это вообще маленькая жизнь :) В общем, тут как профессиональный водитель должен открыть все категории, так  и профессиональный трейдер должен постоянно расширять свой спектр навыков и  умений. 
32 Комментария
  • GHJK
    13 января 2014, 14:10
    а у меня листок бумаги и ручка :D
  • Kir
    13 января 2014, 14:16
    Спасибо.
  • SergeyJu
    13 января 2014, 14:48
    На тиках не пробовали с опционами работать?
  • SergeyJu
    13 января 2014, 15:03
    Я не о скорости торговли, а о точности анализа данных. Наличие двух тиковых потоков, опционного и базового актива, позволяет более точно одновременно измерять цену опциона как функцию значения базового актива. Ведь по нему тиковый поток намного быстрее.
  • ab_trader
    13 января 2014, 18:06
    Не пробовали амиброкер?
  • старый трейдер
    13 января 2014, 19:27
    Третий Велш, ностальжи…

    Аналогично склоняюсь к самописному, однако посетую на то, что всё действительно эффективное, что удается изобрести в последнее время, живет около года-полугода, а «не очень эффективное» с лёгкостью обставляю вручную. Такое ускорение.
  • bocha
    13 января 2014, 20:12
    Очень и очень интересно. Структурированность, логика, стиль и безупречная орфография порождают дополнительную приятность от прочтения.
    Вопросы конечно тоже порождают, но об этом попозже.
    Содержательные вопросы, не выходящие за рамки умеренной деликатности, их ведь тоже моментально не сформулируешь :-)
  • bocha
    13 января 2014, 20:49
    Ну что ж, коли можно, то и нужно :)
    1. Интересен Ваш тиковый формат данных. Как ни крути, а тик без времени — что бомж безымянный. Это с одной стороны. С другой, можно конечно разделять временными метками группы тиков размером, скажем, в одну минуту. Не сомневаюсь, Вы немало над этим думали, а стало быть придумали прекрасный компромисс… Вот он и интересен :)
    2. Совсем не по теме поста, но тоже интересно. За 7 лет исследовательской работы на рынке, да при таком вдумчивом отношении, стратегий наплодилось более, чем много. Из них и хороших, работоспособных процент вероятно велик. Неужели руками торгуете? А если роботы, то в рамках какой оболочки (движка)?
      • iuiu
        14 января 2014, 13:58
        anatolyutkin, А сейчас разве доступны тиковые данные на ftp.rts.ru, что-то не найду?
          • bocha
            06 февраля 2014, 21:39
            anatolyutkin, похоже нет больше такого ресурса. Или только сегодня. Даже просто адрес www.rts.ru автоматом переадресовывается на майсекс
  • Bond
    14 января 2014, 10:11
    anatolyutkin,
    Хорошая статья! Вы оптимизацией стратегий не занимаетесь? Или только тестируете?
    Я написал свой тестер-оптимизатор на С#, который работает с любыми таймфремами, в том числе и с тиками.
    На заметку:
    stocksharp.com/forum/yaf_postst4363_Pishiem-tiestier-optimizator-svoimi-rukami--Vviedieniie.aspx
    stocksharp.com/forum/yaf_postsm31008_Pishiem-tiestier-optimizator-svoimi-rukami--Prodolzhieniie.aspx#post31008
      • Bond
        14 января 2014, 10:42
        anatolyutkin,
        Оптимизация позволяет исследовать все пространство вариантов стратегии. Можно оценить адекватность и стабильность стратегии. Получить интересные статистические данные ее работы.
        В настоящий момент от классического «Монте-Карло» в моем алгоритме ничего не осталось. Только основные принципы нелинейной стохастической оптимизации. Генетика — это таже стохастическая оптимизация.
        У вас не возникали проблемы переноса протестированной стратегии в реального робота? Результаты тестов соответствуют реальной торговле? Вообще результаты одной и той же стратегии в разных тестировщиках отличаются?
        П.С. Согласен с вами. Красивый самолет и летает лучше)
          • Bond
            14 января 2014, 11:19
            anatolyutkin, а как вы защищаетесь от подгонки результатов? Тем более если широкое окно параметров. Индикаторы используете? Как их настраиваете? Или все на интуиции?
              • Bond
                14 января 2014, 11:43
                anatolyutkin, спасибо за ссылки. Довольно любопытно. Но мне кажется вы не много не дооцениваете машинное обучение и путаете его с оптимизацией. Оптимизация — это определение лучших параметров готовой стратегии для увеличения прибыли. А машинное обучение это поиск каких-то закономерностей иногда не явных. Вот здесь легко натолкнуться на подгонку. Но и на это есть решения типа walk-forwarda.
  • Bigbig
    25 февраля 2014, 16:03
    ftp.moex.ru/pub/info/stats/history/F/ — там только вечерняя сессия

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

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