AlgoTrading
AlgoTrading Блог компании StockSharp
15 января 2014, 18:12

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

                                                      Введение.

                                   Методы оптимизации стратегий
Пишем тестер-оптимизатор своими руками! часть 1
     Как вы уже поняли из предыдущей статьи, оптимизация методом перебора не эффективна. Учитывая скорости тестирования, нецелесообразно перебирать все возможные параметры.
     Есть, конечно, уже готовые производительные оптимизаторы стратегий в других программных продуктах. Но как в них перевести свои стратегии? Все ли может этот тестировщик, что нам нужно? Будут ли тесты отражать реальность? Как правило, к ним нужны всякие коннекторы, конверторы и др. костыли, не относящиеся к нашим задачам.

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

     За основу взял стохастическую оптимизацию. Стохастическая оптимизация – это класс алгоритмов оптимизации, использующая случайность в процессе поиска оптимума. Алгоритмы стохастической оптимизации используются в случае, если целевая функция сложная, многоэкстремальная, с разрывами, с помехами и пр. При этом она позволяет исследовать только часть области вариантов стратегий и на основании полученных данных составить представление о пространстве в целом.
     Ознакомился с основными применяемыми стохастическими способами оптимизации – генетика, монте-карло их разновидностями и прочими методами.
     Вообще разновидностей стохастических методов как оказалось очень много.
Например, метод «Роя частиц».
Или столь популярные «Генетические алгоритмы».
Есть элегантные решения типа алгоритма «Имитации отжига»
Например, последний способ с высокой степенью гарантирует нахождение глобального экстремума. Так как при этом методе он периодически отклоняется от пути и дополнительно изучает соседние области. Но скорость исследования не самая высокая.

     Суть методов одна — мы выбираем случайные значения и так или иначе их анализируем. От способа к способу меняются только два параметра – скорость и точность исследования. Причем обратно пропорционально. Чем выше скорость тестирования, тем хуже качество результатов и наоборот. При выборе метода каждый решает сам, чем готов пожертвовать.

                                             Поиск экстремумов


     Например, метод «Имитации отжига» позволяет найти глобальный экстремум. Однако, если подумать, то сам глобальный экстремум нам ни к чему, если к нему нет сходимости. То есть если вокруг экстремума соседние условно равномерно не убывают, то очень вероятно, что этот глобальный экстремум носит случайный характер и пользы нам от него будет мало так как он неадекватный, а расчеты нам испортит. Поэтому так важно изучить параметры вокруг экстремума. Если есть сходимость, значит есть система и эту стратегию можно изучать дальше.
     Все стохастические методы оптимизации имеют один общий недостаток – могут упереться в какой-то локальный экстремум, а тот самый оптимальный упустить из вида. Чтобы этого избежать, нужно максимально увеличивать области выборок и количество итераций. Но от этого страдает скорость расчетов. Так что нужно всегда искать золотую середину.
     Из-за сложности и не очевидности расчетов, методы «Имитации отжиги» и прочие «Рои частиц» я отложил в сторону)
В итоге пришел к выводу, что самый доступный и удобный способ в моем случае это оптимизация методом «Монте-Карло».

Интерфейс тестера-оптимизатора «Монте-Карло»:
Пишем тестер-оптимизатор своими руками! часть 1

Продолжение читайте во второй части.

Хотелось бы поблагодорить ребят из S#, за то что, помогли мне начать мой путь в алготрейдинг.

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

18 Комментариев
  • sema
    15 января 2014, 18:44
    Дай угадаю, а может посчитаю, где подобное я уже видел. Пройдись по ютубу пятилетней давности, там есть, были дядьки, довольно серьезно работали. Ведь как сейчас, вот я в своем городе и области не смог найти программера. Дело в том, что есть На территории России, в крайне случае странах СНГ, люди, которые МОГУТ, НО ТОЛЬКО ПИСАТЬ ГОТОВЫЙ АЛГОритм. А есть светлые головы, их тоже крайне мало. Вот я. Мне очень понравилась эта буковка «я». А вот кто может описАть то, что он увидел, прочитав этот текст? Уверен, если кто то и найдет сигнал, то чисто методом «выжженой земли».
  • Евгений
    15 января 2014, 19:25
    Откуда качать?
  • Udgin
    15 января 2014, 20:01
    Хорошая статья.
    По себе скажу, что тоже ищу оптимальные параметры системы методом Монте-Карло и к полученным 10-15 лучшим результатам применяю генетические алгоритмы, что-бы выйти к оптимуму. Технически это все не сложно, реализовать можно даже в Excel.

    Сложнее выбрать по какому критерию проводить оптимизацию — хочется и доходность повыше, и просадки пониже, и стабильность результата на соседних наборах параметров.

    О «Имитации отжига» первый раз слышу, киньте ссылку, где можно больше почитать?
  • q-trader
    15 января 2014, 20:58
    Есть еще метод pattern search. Он не стохастический, но вроде и не тупой перебор
  • Алексей
    15 января 2014, 22:06
    Заинтересовали, жду 2 части
    • Bond
      16 января 2014, 10:54
      Алексей, впереди еще довольно объемное исследование) Тема на мой взгляд очень интересная!
  • Roman Ivanov
    16 января 2014, 00:02
    Использую самописный «моделятор» для иммитации сделок на истории + генетический алгоритм для оптимизации. По некоторым книжным данным генетика выигрывает у отжига и значительно лучше монте-карло (последнее явно вижу на результатах). В ГА мутация это аналог отжига, введение рандомной хромосомы — монте-карло, но есть еще скрещивание что вроде как делает ГА более эффективным. Т.е. в некотором смысле ГА универсален.
    Монте-карло в плане степени оптимизации совсем плох. Ну только представь, что нащупав вроде бы хороший максимум он не будет стремиться исследовать окрестности, а продолжит тыкаться случайно по всему пространству.
    Другое дело что для поиска стратегий оптимизация это не главное, важнее борьба с подгонкой.
    • Bond
      16 января 2014, 11:05
      ivanovr, Все верно. Борьба с переоптимизацией это вообще отдельное исследование, но существуют такие приемы как walk-forward, которые помогают частично решить эту проблему.
      Такие методы как генетика, Монте-Карло, Рой частиц и прочие их модификации используют один и тот же математический принцип оптимизации — стохастический. Просто в каждом методе это реализовано со своей спецификой. Кто-то быстрее, кто-то точнее, но нельзя утверждать, что кто-то лучше, потому что принципиально это все одно и тоже)
      Позже я пришел к выводу, что в классическом варианте применительно к трейдингу метод «Монте-Карло» не совсем рационален и использовал новый алгоритм. Но об этом в следующих частях)
      • Roman Ivanov
        16 января 2014, 11:26
        Bond, от того что разные вещи назвали одним словом они одинаковыми не становятся. Вся соль в деталях.
        Если к целевой ф-ии не применимо правило, что малое изменение параметров приводит (в среднем, чаще всего) к малому изменению ф-ии, то нет ничего лучше монте-карлы. Но в оптимизации стратегий это не так, а если бы было так, то торговать такой результат было бы рискованно т.к. малейшее изменение условий приводило бы к резкому изменению результата.
        А раз все-таки целевая ф-я в нашей задаче имеет оптимальные области, а не отдельные точки, то нужны алгоритмы которые стремятся исследовать окрестности вокруг перспективных точек. Т.е. отжиг, ГА и подобные.
  • messerschmit
    16 января 2014, 01:11
    Похоже, у вас 8 параметров оптимизации. По моему опыту это верный путь переподгонке. 4 — 5 самое оно.Я ищу сейчас по 4 и если поиск не даёт результата — стратегия фуфло
    • Bond
      16 января 2014, 11:10
      messerschmit, скорее даже 9 параметров. Можно тестировать сразу на нескольких таймфреймах.
      Это, конечно, много, но я решил сразу сделать с запасом «на будущее». Тестер-оптимизатор в итоге получился универсальным и эти параметры могут занять другие величины, например, величина стопа и прочее.
      Переоптимизация — это бесспорно проблема, но ее можно решить проверкой на кластерицацию, walk-forward и др.
      • messerschmit
        16 января 2014, 23:44
        Bond, walk-forward нам всем в помощь )))
    • Roman Ivanov
      16 января 2014, 11:30
      messerschmit, мысль верная ;)
      Но как тогда используют нейросети у которых сотни настраиваемых параметров?
    • Roman Ivanov
      16 января 2014, 11:43
      messerschmit, есть даже формулы, для оценки влияния количества параметров на подгонку и они оперируют «числом параметров». Но не понятно как учесть тот факт, что параметр как правило дискретный т.е. число значений ограничено, а часто параметр может быть вобще булевый «да или нет». В своей практике вычисляю «сложность» системы как логарифм числа возможных перебираемых комбинаций.
      Есть идеи на этот счет?
      • messerschmit
        16 января 2014, 23:40
        ivanovr, насчет нейросетей не знаю. По своему опыту могу сказать, что если написать совершенно бессмысленный алгоритм и снабдить его десятком параметров (каждый, допустим, в integer диапазоне 0-20), то на тестовой выборке параметры подгоняются аж до космических эквити. А вот повторяемости у такой системы нет, сразу на следующем периоде результат не предсказуем. А вот показать повторяемость с малым числом параметров могут лишь «толковые» стратегии.
  • Алексей
    16 января 2014, 13:21
    более подробна статья на хабре habrahabr.ru/post/209198/
    • Bond
      17 января 2014, 11:18
      vinipuh, на Смартлабе попробуем раскрыть тему подробнее, чем на Хабрахабре)

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

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