AlgoTrading
AlgoTrading Блог компании StockSharp
16 января 2014, 17:30

Пишем тестер-оптимизатор своими руками! часть 2

Первая версия тестера-оптимизатора «Монте-Карло».
Классический поиск максимума.
За основу своего первого тестера-оптимизатора решил взять логику из статьи «Нелинейная стохастическая оптимизация методом Монте-Карло»  из сборника Санкт-Петербургского Государственного Университета. Кого интересует это направление, советую почитать их сборники. Много интересных разноплановых статей про оптимизацию в самых разных областях.

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


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

Но как я уже выше заметил важно изучить область вокруг экстремума, и поэтому, решил сходиться до конца, и на последней итерации проверить полностью все соседние стратегии. Я не стал мудрить с градиентами и сделал уменьшение выборок статичной в процентах от начального размера матрицы. То есть на сколько резать многомерную матрицу после каждой итерации на 1% или на 20% мы решаем в самом начале. Также, мы сразу, учитывая наши возможности по времени, решаем, сколько стратегий мы будем брать из матрицы на каждой итерации для тестирования. Таким образом, нам вообще не важен размер матрицы, мы точно знаем сколько итераций и в каком объеме проведем! В этом и есть вся прелесть стохастических методов)))

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

При этом все параметры и результаты выводятся на главное окно программы «Монте-Карло». Так что, чего там происходит все видно и понятно. Есть окно логирования и окно с итогами тестирования. После каждой итерации программа открывает сериализованные файлы, считает по ним статистику, сортирует и выводит на экран.

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

Тестер-оптимизатор в работе.
Пишем тестер-оптимизатор своими руками! часть 2
Конец, тестирования. Лучший результат с матожиданием 88%. Причем из 6060 вариантов протестировали только 778, из них 116 повторилосьПишем тестер-оптимизатор своими руками! часть 2
Стратегии перед тестированием проверяются, не тестировались ли они раньше, потому что к экстремуму плотность выбора случайных стратегий увеличивается и в конце полностью покрывается область вокруг максимума. А одно и тоже повторно тестировать мы не будем.

Все результаты тестирования обрабатываются Анализатором. Всегда можно в ручную подправить ГО, комиссию или изменить стартовый депозит:
Пишем тестер-оптимизатор своими руками! часть 2
В окне результатов тестирования выводится большая статистическая таблица по всем результатам тестирования и оптимизации. Любой параметр можно сортировать по столбцу. При двойном щелчке по любой строке все параметры уходят на окно визуалицации, так что ничего в ячейки забивать не нужно(сам не нарадуюсь)!
Окно результатов тестирования:
Пишем тестер-оптимизатор своими руками! часть 2

Все вместе:
Пишем тестер-оптимизатор своими руками! часть 2
Ребята, весь этот путь я прошёл начиная с того, что проходить эти курсы, кому будет интересно, обращайтесь… могу сам рассказать про них.

Все приложения написаны на С#, в основе тестера лежит архитектура S#.

Всем восходящего тренда! С уважением, Bond.
Мой ник в Скайпе: bond_algotrade

P.S. Часть 1
3 Комментария
  • anatolyutkin
    16 января 2014, 18:14
    В какого типа стратегиях подобные методы наиболее уместны?
    • Bond
      17 января 2014, 11:14
      anatolyutkin, пока тестировал на индикаторных стратегиях. Но в принципе ничего не мешает использовать для оптимизации любых других параметров.
      В настоящий момент полностью отделил стратегию от кода и вынес в отдельную библиотеку-стратегию.Таким образом одну и ту же dll-стратегию можно прооптимизировать, получить лучшие параметры и так же легко подключить к роботу. Прописать в интрфейсе полученные прооптимизированные параметры и торговать в реле.
      • anatolyutkin
        17 января 2014, 13:44
        Bond,
        Мое видение таково.
        1) Вы проделали хорошую работу. Так понимаю, это хороший, удобный софт, построенный человеком, понимающим, что он делал.
        2) Такие вещи, безусловно, могут быть очень полезны в трейдинге. Но, имхо, не могут стать его основой.
        3) Имхо, пока это уровень математических преобразований над временными рядами (но очень неплохой уровень, надо сказать). Хотелось бы связи всего этого с реальными торгами. Либо приведите такую связь, если уже торгуете в реале, либо попробуйте поторговать для получения опыта. Потому что в таком виде все это смотрится как сложная, высокоуровневая математика с непонятной областью применения.

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

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