Блог им. anatolyutkin

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

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

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

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

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. А зная только эти две программы и не вникая в тики, куча всего полезного останется за кадром. Опционика--это своеобразная вещь--но и ее знание приводит к интересным опционным и не опционным идеям. Стакан--это вообще маленькая жизнь :) В общем, тут как профессиональный водитель должен открыть все категории, так  и профессиональный трейдер должен постоянно расширять свой спектр навыков и  умений. 
★18
32 комментария
а у меня листок бумаги и ручка :D
avatar
GHJK, Это тоже, безусловно, нужные вещи :)
avatar
Спасибо.
avatar
it-fin, Так мы и движение планет знаем только в прошлом, а предсказываем с высочайшей точностью.
И на много сотен лет вперед
Причем это умели делать уже египетские жрецы.
А у них только исторические данные были в распоряжении.

Не надо плохо думать о ценности исторических данных
Впрочем, а других у нас и нет
avatar
На тиках не пробовали с опционами работать?
avatar
SergeyJu, Нет, не пробовал. Из быстрых вещей в опционах только котировалки пользую--да и то пока в стадии тестирования.
avatar
Я не о скорости торговли, а о точности анализа данных. Наличие двух тиковых потоков, опционного и базового актива, позволяет более точно одновременно измерять цену опциона как функцию значения базового актива. Ведь по нему тиковый поток намного быстрее.
avatar
SergeyJu, В опционной котировалке, естественно, учитываются тики базового актива. Иначе как отделить нетерпеливых желающих совершить опционную сделку (то есть хлеб котировалки) от движений цены БА (которые могут привести к ненужному накоплению позиции)?

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

Вообще, у меня такой подход сейчас--легче самому сделать, чем чужое изучать. Велш и TS я уже знаю--так исторически получилось. Но изучать что-то еще уже не вижу особого смысла.
avatar
Третий Велш, ностальжи…

Аналогично склоняюсь к самописному, однако посетую на то, что всё действительно эффективное, что удается изобрести в последнее время, живет около года-полугода, а «не очень эффективное» с лёгкостью обставляю вручную. Такое ускорение.
старый трейдер, Конкуренция. Куда же денешься, это рынок.
avatar
Очень и очень интересно. Структурированность, логика, стиль и безупречная орфография порождают дополнительную приятность от прочтения.
Вопросы конечно тоже порождают, но об этом попозже.
Содержательные вопросы, не выходящие за рамки умеренной деликатности, их ведь тоже моментально не сформулируешь :-)
avatar
bocha, Спасибо!

Ошибки в русском языке у меня бывают, но их количество, конечно, гораздо меньше среднего по больнице :) Вопросы задавайте, это же публичный ресурс.
avatar
Ну что ж, коли можно, то и нужно :)
1. Интересен Ваш тиковый формат данных. Как ни крути, а тик без времени — что бомж безымянный. Это с одной стороны. С другой, можно конечно разделять временными метками группы тиков размером, скажем, в одну минуту. Не сомневаюсь, Вы немало над этим думали, а стало быть придумали прекрасный компромисс… Вот он и интересен :)
2. Совсем не по теме поста, но тоже интересно. За 7 лет исследовательской работы на рынке, да при таком вдумчивом отношении, стратегий наплодилось более, чем много. Из них и хороших, работоспособных процент вероятно велик. Неужели руками торгуете? А если роботы, то в рамках какой оболочки (движка)?
avatar
bocha,
1) на ftp.rts.ru лежат нормальные тики всего фортса. Там прямо настоящее время--формат записи выглядит как 5 лот РИ по 155500 в 14:25:56.123. Время--с точностью до 1 мс.

2) Руками я вообще ничего системного не торгую. Все автоматически, даже системы дневного фрейма. Роботы разные, не хочу особенно распространяться на эту тему. Грубо говоря, все торговые терминалы наших брокеров можно настроить на автоматику. Где API есть, где свой язык, где DDE.
avatar
anatolyutkin, А сейчас разве доступны тиковые данные на ftp.rts.ru, что-то не найду?
avatar
iuiu, ftp.rts.ru/pub/info/stats/history/F/ внутри каждого года все сделки FORTS за каждый день.
avatar
anatolyutkin, похоже нет больше такого ресурса. Или только сегодня. Даже просто адрес www.rts.ru автоматом переадресовывается на майсекс
avatar
bocha, Ну вы чего. А фантазию проявить? :) ftp.moex.ru/pub/info/stats/history/F/
avatar
anatolyutkin, Ой! :)
avatar
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
avatar
Алексей, Оптимизацию я не особо люблю. Я поклонник физического, а не майнингового подхода. То есть процесс поиска системы должен иметь идею, а не просто перебор правил и параметров. Но с темой немного знаком.

1) Оптимизацию на тиках--не пробовал. Это может быть интересно.
2) Насколько понял, вы Монте-Карло используете. Я использовал в свое время встроенный в велшлаб монте-карло оптимизатор. А сейчас генетику. Могу сказать, что генетика считает быстрее и лучше. Хотя, это в большей мере от системы зависит, а не от оптимизатора.
avatar
anatolyutkin,
Оптимизация позволяет исследовать все пространство вариантов стратегии. Можно оценить адекватность и стабильность стратегии. Получить интересные статистические данные ее работы.
В настоящий момент от классического «Монте-Карло» в моем алгоритме ничего не осталось. Только основные принципы нелинейной стохастической оптимизации. Генетика — это таже стохастическая оптимизация.
У вас не возникали проблемы переноса протестированной стратегии в реального робота? Результаты тестов соответствуют реальной торговле? Вообще результаты одной и той же стратегии в разных тестировщиках отличаются?
П.С. Согласен с вами. Красивый самолет и летает лучше)
avatar
Алексей, Я пляшу от реальной торговли. По мере набора опыта появляется понимание, где в реале будет похоже на тест, а где нет. А вообще, более или менее общая технологическая цепочка (для не редких событий) такая:
1) Придумываем что-нибудь с понятной идеей и широкими окнами параметров.
2) Ставим малым лотом на полгодика (это условно, если зверек десятки сделок в день клепает, то полгода можно и не ждать). Обтачиваем все косяки и несоответствия, которые скорее всего обязательно будут.
3) Выводим на боевой лот.
Для редких событий пункта 2) я не делаю, но реализовывать стараюсь покупкой опционов.
avatar
anatolyutkin, а как вы защищаетесь от подгонки результатов? Тем более если широкое окно параметров. Индикаторы используете? Как их настраиваете? Или все на интуиции?
avatar
anatolyutkin, спасибо за ссылки. Довольно любопытно. Но мне кажется вы не много не дооцениваете машинное обучение и путаете его с оптимизацией. Оптимизация — это определение лучших параметров готовой стратегии для увеличения прибыли. А машинное обучение это поиск каких-то закономерностей иногда не явных. Вот здесь легко натолкнуться на подгонку. Но и на это есть решения типа walk-forwarda.
avatar
Bond,
1) Общее. Я не против машинного обучения, оптимизации и прочего. Богу молясь, компьютер выигрывает в шахматы, распознает образы, моделирует реальную графику, итд. Миллиард операций в секунду--это не шутка. Имхо, нет вообще никакой принципиальной разницы, каким образом создать торговую систему. Но это должна быть именно торговая система, учитывающая какие-то особенности торгующих, а не набор математических операций с временными рядами. Потому что иначе реальная ее торговля с большой долей вероятности выявит кучу неприятных сюрпризов.
2) Оптимизация. Лично у меня обычно получаются системы, в которых либо все параметры влияют независимо друг от друга, либо можно выделить некие независимые блоки параметров. В первом случае оптимизация делается простым перебором. Во втором внутри блока, конечно, нужно посмотреть, но обычно там хватает чего-нибудь простенького типа отжига или Монте-Карло.
avatar
ftp.moex.ru/pub/info/stats/history/F/ — там только вечерняя сессия
avatar

теги блога anatolyutkin

....все тэги



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