Bond
Bond Блог компании StockSharp
17 января 2014, 17:36

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


Часть 2

Новая версия тестера-оптимизатора 
«Исследователь»
 

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

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

В классических методах оптимизации в каждой новой итерации ищется лучшее значение и уже вокруг него проводятся дальнейшие исследования. В моем случае относительно него я обрезал матрицу вариантов стратегий.

Условная схема работы стохастического алгоритма поиска максимума по методу Монте-Карло:
 
Пишем тестер-оптимизатор своими руками! Часть 3

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

Пишем тестер-оптимизатор своими руками! Часть 3 
На самом деле матрица многомерная (в моем случае максимум 9 измерений), но для объяснения принципа работы воспользуемся всеми нами любимыми тремя измерениями.
 
Ось Х – параметры «длинной» скользящей средней.
Ось Y – параметры «короткой» скользящей средней.
Ось Z – результат тестирования стратегии пересечения «короткой» и «длинной» скользящих средних, в данном случае я взял матожидание.

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

В принципе это можно было изобразить и в двух координатах: 
 Пишем тестер-оптимизатор своими руками! Часть 3


Но в трех координатах мне нравится больше – нагляднее.
 
Так вот. Черные точки в пространстве это худшие стратегии по результатам тестирования. Линии их соединяющие путь движения алгоритма от точки к точке. Серые точки в плоскости – это стратегии, которые мы удаляем из области исследования. Линии между ними – это путь движения алгоритма удаления стратегий из матрицы. Линии между черными точками и серыми – это проекция худшей стратегии на плоскость. Одиночные серые точки на плоскости это проекции уже протестированных стратегий на плоскость.
 
Здесь видно как алгоритм идет от одной худшей стратегии к другой, начиная с самой плохой:

Пишем тестер-оптимизатор своими руками! Часть 3
 
Преимущества алгоритма:
 
Мы осмысленно удаляем худшие стратегии из пространства исследования. Тем самым при следующих итерациях мы исследуем области с более прибыльными стратегиями и не тратим драгоценное время тестирования на изучение не нужных нам областей. В конечном итоге наша область исследования сходится ко всем максимумам пространства.
 
В итоге получаем что-то такое:

Пишем тестер-оптимизатор своими руками! Часть 3
 
Интерполяцию прикрутить пока не получилось, поэтому поверхности нет, довольствуюсь точками.
 
Все приложения написаны на С#, в основе тестера лежит архитектура S#.

Окончание статьи читайте в следующей части.

Всем восходящего тренда! С уважением, Bond.

Мой ник в Скайпе: bond_algotrade
2 Комментария
  • HideYourRichess
    18 января 2014, 12:25
    зашибись, а торговать то когда?

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

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