rss

Профиль компании

Финансовые компании

Блог компании StockSharp | Пишем тестер-оптимизатор своими руками! часть 1

                                                      Введение.

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

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

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

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

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


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

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

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

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

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

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

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

О «Имитации отжига» первый раз слышу, киньте ссылку, где можно больше почитать?
avatar
Udgin, Вы движетесь в правильном направлении!
В следующих частях и статьях все эти моменты будут рассмотрены более подробно. Просто статьи объемные и все не помещается за раз.
Ссылки:
«Рой частиц» — jenyay.net/Programming/ParticleSwarm
«Генетика» — habrahabr.ru/post/171751/
«Имитация отжига» — ru.wikipedia.org/wiki/%C0%EB%E3%EE%F0%E8%F2%EC_%E8%EC%E8%F2%E0%F6%E8%E8_%EE%F2%E6%E8%E3%E0
avatar
Есть еще метод pattern search. Он не стохастический, но вроде и не тупой перебор
avatar
Заинтересовали, жду 2 части
avatar
Алексей, впереди еще довольно объемное исследование) Тема на мой взгляд очень интересная!
avatar
Использую самописный «моделятор» для иммитации сделок на истории + генетический алгоритм для оптимизации. По некоторым книжным данным генетика выигрывает у отжига и значительно лучше монте-карло (последнее явно вижу на результатах). В ГА мутация это аналог отжига, введение рандомной хромосомы — монте-карло, но есть еще скрещивание что вроде как делает ГА более эффективным. Т.е. в некотором смысле ГА универсален.
Монте-карло в плане степени оптимизации совсем плох. Ну только представь, что нащупав вроде бы хороший максимум он не будет стремиться исследовать окрестности, а продолжит тыкаться случайно по всему пространству.
Другое дело что для поиска стратегий оптимизация это не главное, важнее борьба с подгонкой.
avatar
ivanovr, Все верно. Борьба с переоптимизацией это вообще отдельное исследование, но существуют такие приемы как walk-forward, которые помогают частично решить эту проблему.
Такие методы как генетика, Монте-Карло, Рой частиц и прочие их модификации используют один и тот же математический принцип оптимизации — стохастический. Просто в каждом методе это реализовано со своей спецификой. Кто-то быстрее, кто-то точнее, но нельзя утверждать, что кто-то лучше, потому что принципиально это все одно и тоже)
Позже я пришел к выводу, что в классическом варианте применительно к трейдингу метод «Монте-Карло» не совсем рационален и использовал новый алгоритм. Но об этом в следующих частях)
avatar
Bond, от того что разные вещи назвали одним словом они одинаковыми не становятся. Вся соль в деталях.
Если к целевой ф-ии не применимо правило, что малое изменение параметров приводит (в среднем, чаще всего) к малому изменению ф-ии, то нет ничего лучше монте-карлы. Но в оптимизации стратегий это не так, а если бы было так, то торговать такой результат было бы рискованно т.к. малейшее изменение условий приводило бы к резкому изменению результата.
А раз все-таки целевая ф-я в нашей задаче имеет оптимальные области, а не отдельные точки, то нужны алгоритмы которые стремятся исследовать окрестности вокруг перспективных точек. Т.е. отжиг, ГА и подобные.
avatar
Похоже, у вас 8 параметров оптимизации. По моему опыту это верный путь переподгонке. 4 — 5 самое оно.Я ищу сейчас по 4 и если поиск не даёт результата — стратегия фуфло
avatar
messerschmit, скорее даже 9 параметров. Можно тестировать сразу на нескольких таймфреймах.
Это, конечно, много, но я решил сразу сделать с запасом «на будущее». Тестер-оптимизатор в итоге получился универсальным и эти параметры могут занять другие величины, например, величина стопа и прочее.
Переоптимизация — это бесспорно проблема, но ее можно решить проверкой на кластерицацию, walk-forward и др.
avatar
Bond, walk-forward нам всем в помощь )))
avatar
messerschmit, мысль верная ;)
Но как тогда используют нейросети у которых сотни настраиваемых параметров?
avatar
messerschmit, есть даже формулы, для оценки влияния количества параметров на подгонку и они оперируют «числом параметров». Но не понятно как учесть тот факт, что параметр как правило дискретный т.е. число значений ограничено, а часто параметр может быть вобще булевый «да или нет». В своей практике вычисляю «сложность» системы как логарифм числа возможных перебираемых комбинаций.
Есть идеи на этот счет?
avatar
ivanovr, насчет нейросетей не знаю. По своему опыту могу сказать, что если написать совершенно бессмысленный алгоритм и снабдить его десятком параметров (каждый, допустим, в integer диапазоне 0-20), то на тестовой выборке параметры подгоняются аж до космических эквити. А вот повторяемости у такой системы нет, сразу на следующем периоде результат не предсказуем. А вот показать повторяемость с малым числом параметров могут лишь «толковые» стратегии.
avatar
более подробна статья на хабре habrahabr.ru/post/209198/
avatar
vinipuh, на Смартлабе попробуем раскрыть тему подробнее, чем на Хабрахабре)
avatar

теги блога AlgoTrading

....все тэги



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