Введение. Методы оптимизации стратегий Как вы уже поняли из предыдущей статьи, оптимизация методом перебора не эффективна. Учитывая скорости тестирования, нецелесообразно перебирать все возможные параметры. Есть, конечно, уже готовые производительные оптимизаторы стратегий в других программных продуктах. Но как в них перевести свои стратегии? Все ли может этот тестировщик, что нам нужно? Будут ли тесты отражать реальность? Как правило, к ним нужны всякие коннекторы, конверторы и др. костыли, не относящиеся к нашим задачам. К тому же это «черные ящики» и как они там считают на самом деле, никто не знает. А когда дело касается денег не должно быть места всяким случайностям и неопределенностям. На слово производителям такого программного обеспечения я не верю. Сколько раз сталкивался в самых серьезных продуктах с всякими глюками и багами, письмами и звонками в техподдержку. При этом мы становимся зависимыми от совершенно не нужных нам людей. В общем, доверия у меня к ним никакого. Все эти проблемы сильно замедляют реализацию наших алгоритмов, и соответственно отнимают наше время и деньги. И я задался вопросом: «А почему бы не написать свой оптимизатор? Неужели так сложно?» Как оказалось сложно, но вполне реально. К тому же появляется уверенность в результатах и свобода в настройках и модернизациях и модификациях программы. Собственно с этими мыслями я взялся за работу. За основу взял стохастическую оптимизацию. Стохастическая оптимизация – это класс алгоритмов оптимизации, использующая случайность в процессе поиска оптимума. Алгоритмы стохастической оптимизации используются в случае, если целевая функция сложная, многоэкстремальная, с разрывами, с помехами и пр. При этом она позволяет исследовать только часть области вариантов стратегий и на основании полученных данных составить представление о пространстве в целом. Ознакомился с основными применяемыми стохастическими способами оптимизации – генетика, монте-карло их разновидностями и прочими методами. Вообще разновидностей стохастических методов как оказалось очень много. Например, метод «Роя частиц». Или столь популярные «Генетические алгоритмы». Есть элегантные решения типа алгоритма «Имитации отжига» Например, последний способ с высокой степенью гарантирует нахождение глобального экстремума. Так как при этом методе он периодически отклоняется от пути и дополнительно изучает соседние области. Но скорость исследования не самая высокая. Суть методов одна — мы выбираем случайные значения и так или иначе их анализируем. От способа к способу меняются только два параметра – скорость и точность исследования. Причем обратно пропорционально. Чем выше скорость тестирования, тем хуже качество результатов и наоборот. При выборе метода каждый решает сам, чем готов пожертвовать. Поиск экстремумов Например, метод «Имитации отжига» позволяет найти глобальный экстремум. Однако, если подумать, то сам глобальный экстремум нам ни к чему, если к нему нет сходимости. То есть если вокруг экстремума соседние условно равномерно не убывают, то очень вероятно, что этот глобальный экстремум носит случайный характер и пользы нам от него будет мало так как он неадекватный, а расчеты нам испортит. Поэтому так важно изучить параметры вокруг экстремума. Если есть сходимость, значит есть система и эту стратегию можно изучать дальше. Все стохастические методы оптимизации имеют один общий недостаток – могут упереться в какой-то локальный экстремум, а тот самый оптимальный упустить из вида. Чтобы этого избежать, нужно максимально увеличивать области выборок и количество итераций. Но от этого страдает скорость расчетов. Так что нужно всегда искать золотую середину. Из-за сложности и не очевидности расчетов, методы «Имитации отжиги» и прочие «Рои частиц» я отложил в сторону) В итоге пришел к выводу, что самый доступный и удобный способ в моем случае это оптимизация методом «Монте-Карло». Интерфейс тестера-оптимизатора «Монте-Карло»:
Продолжение читайте во второй части. Хотелось бы поблагодорить ребят из S#, за то что, помогли мне начать мой путь в алготрейдинг. Всем восходящего тренда! С уважением, Bond. Мой ник в Скайпе: bond_algotrade