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

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

Как бы то ни было, существуют аспекты в данной сфере, без которых невозможно стабильное существование автоматизированной торговой системы. Одним из таких аспектов является оптимизация торговых алгоритмов, а также определения горизонтов их стабильной работы.

Понятие оптимизации торговых алгоритмов

Оптимизация – это процесс настройки исходной торговой системы путем корректировки ее параметров или группы параметров, которые в ней используются.

Процесс оптимизации торговой стратегии представляет из себя перебор параметров из заданных границ внутри какого-либо временного диапазона исторических данных для конкретного финансового инструмента.

Цель этого процесса – получение лучших результатов работы торговой системы для данного отрезка времени и финансового инструмента.

Результат оптимизации характеризуется значениями индикаторов / оценочных показателей работы системы для каждого значения оптимизируемых параметров. То есть видно при каких значения получались те или иные результаты работы системы. Другими словами, для каждого набора параметров производится тестирование торговой системы на определенном промежутке исторических данных и представляются результаты этого тестирования.

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

Под оптимизацией могут пониматься совершенно разные процедуры. Это может быть и учет особенностей финансового инструмента или его таймфрема (таймфрейм – это интервал времени группировки котировок при построении элемента ценового графика: бара, свечи или точки линейного графика), условий торговли предоставляемых брокером, изменение самого торгового алгоритма системы, добавление всякого рода фильтров или нахождение значений параметров той системы, которая уже создана.

Инструменты оптимизации

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

Существует действительно большое количество различных подобных программных продуктов. Их многочисленность во многом обусловлена следующими факторами:
1) Множество различных торговых площадок. Доступ к определенным площадкам обеспечивается различными провайдерами, которые имеют различные API (интерфейс прикладного программирования) для предоставления электронного доступа к торгам.

2) Множество языков описания торговых систем. Некоторые системы имеют внутренние специальные языки для описания торговых алгоритмов, другие могут использовать стандартные, такие как Python, C#, Java и др.

3) Различные подходы описания торговых систем. Существует два кардинально различных подходов описания торговых алгоритмов: текстовый и графический. Графический создан для тех трейдеров, которые не владеют навыками программирования, в таких программах код описания торгового алгоритма генерируется автоматически.

Наиболее распространенные программные продукты для описания и оптимизации торговых систем:

Название Торговые площадки Язык описания торговых систем Подход к описанию Доступность
TSLab Акции, Фьючерсы, Криптовалюта, FOКEX С# Графический/ Текстовый Бесплатно / Платно
Wealth Lab Акции, Фьючерсы С# Графический/ Текстовый Платно
NinjaTrader Акции, Фьючерсы, FOREX NinjaScript Текстовый Платно
MetaTrader4/5 FOREX MQL4/5 Текстовый Бесплатно
MetaStock MetaStock Language NinjaScript Текстовый Бесплатно

Для примера будем использовать программную платформу TSLab. Это программное обеспечение распространяется бесплатно, имеет встроенный мощный объектно-ориентированный язык программирования, а также средства оптимизации со всеми необходимыми возможностями. Доступ торговых площадок очень широк: криптовалютные биржи (Binance, OKX, Deribit, Bittrex, Bitfinex, Bitmex, Huobi, ByBit) с полным списком инструментов как SPOT так и фьючерсами или SWAP контрактами; один Forex брокер LMAX; Московская Биржа, СПб Биржа; брокер Interactive Brokers.

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

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

Более того, данная платформа имеет встроенный язык программирования С#. Этот язык позволяет существенно расширять функциональность платформы, персонализировать ее под личные стратегии и автоматизировать рутинные операции. Что можно создавать в редакторе TSLab:
1) Торговые роботы (Советники / Expert Advisor) – это по сути готовая механическая (автоматизированная) торговая система, которая позволяет анализировать рынок и совершать сделки согласно заложенному в ней торговому алгоритму. Этот робот при реализации может быть привязан к графику какого-либо финансового инструмента (а также к определенному таймфрейму) и работать только на нем. Торговый робот считывает рыночную информацию при каждом тике/ на каждой свече и прогоняет новую информацию по всему алгоритму. Также робот может просто информировать пользователя о торговых сигналах, например отправлять уведомления на почту или в Телеграм.

2) Пользовательский индикатор (Custom Indicator). Помимо множества встроенных технических индикаторов, TSLab позволяет писать собственные (как в визуальном редакторе, так и с помощью языка программирования C#), основанные на пользовательских алгоритмах анализа рынка. Индикаторы могут только выводить графическую и текстовую информацию на график и не могут торговать.

3) Скрипт (Script) – по сути может иметь структуру торгового робота, отличие состоит в том, что скрипты не срабатывают потиково, а лишь один раз исполняют алгоритм по запросу пользователя.

Тестирование и оптимизация торговых систем выполняются с помощью встроенного в TSLab «Тестера».

Этапы оптимизации

Для того чтобы оптимизировать торговую стратегию предлагается выполнить следующие этапы:
1) Описать стратегию на языке программирования, который позволит выполнить ее оптимизацию в выбранной программной среде. В нашем случае это будет выполнено в визуальном редакторе в среде разработки TSLab.

2) Далее следует подготовить написанную систему к тестированию. Подготовка заключается в том, что должны быть учтены все свойства выбранных торгового инструмента и таймфрейма для оптимизации. Это включает в себя размер спреда (для правильного учета затрат на проскальзывание), размер пункта, возможные размеры контрактов, волатильность, для некоторых систем это может быть время работы торговых площадок.

3) Предварительное тестирование системы на работоспособность. На данном этапе могут быть выявлены участки кода с ошибками и недочеты в описании торгового алгоритма.

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

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

6) Выбор метода тестирования. Можно производить тестирование потиковое, но это занимает огромные ресурсы системы и большие временные затраты, что в итоге совсем не гарантирует стопроцентную достоверность значений котировок для каждого тика в истории. Если система построена так, что работает только с уже сформированными барами истории, то можно выбрать тестирование по ценам закрытия или по Open-High-Low-Close свечей, в таком случае тестирование будет проходить намного быстрее.

7) Тестирование выбранной стратегии на определенном интервале исторических данных котировок.

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

9) Определение границ перебора (промежутков значений) для оптимизируемых параметров. На данном этапе необходимо выбрать те возможные значения параметров, которые не будут давать абсурдные результаты.

10) Этап оптимизации, в котором отражается ход оптимизации и результаты работы системы при каждой комбинации параметров, что позволяет выявить проблемные участки работы системы и, возможно, условия сокращения промежутков возможных значений параметров.

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

12) На последнем этапе оценивается устойчивость системы. Существует множество способов оценки надежности системы и определения значимости полученных значений параметров, например форвард-тест, бек-тест, стресс-тест и т.п.

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

Проблемы оптимизации

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

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

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

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

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

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

Человеческий фактор включает в себя намного более широкий спектр возможных проблем в связи с присутствием эмоций и нерациональности при оценке работы системы. Список возможных трудностей может быть бесконечным, ниже приведены только самые распространенные и сложно преодолимые из них:
1) Выбор непредставительного промежутка исторических данных для оптимизации. Как уже говорилось, для каждой системы и оптимизируемых параметров этот промежуток может быть разным, но выбор правильного часто представляет из себя далеко не тривиальную задачу.

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

3) Субъективные оценка результатов работы системы, выбор оптимизированных значений параметров и прогнозирование работоспособности системы. При неправильном выборе параметров или переоценке надежности системы, или доверчивости к показателям ее работы при тестировании возникает вероятная проблема сильного отклонения эффективности системы от тех значений, которые она демонстрировала на исторических данных.

4) Стремление к идеальным показателям работы системы. Как следствие снова проявляется переоптимизация системы, то есть подгон ее работы под исторические данные. Оценка же «идеальности» работы системы полностью субъективна, что практически гарантирует непрогнозируемость работоспособности системы.

Оценка результатов оптимизации

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

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

2) Прибыльность. Этот фактор рассчитывается как общая прибыль деленная на общий убыток. Данный показатель определяет величину разрыва между прибылью и убытками. Его можно учитывать как один из основных показателей прибыльности системы. Также с его помощью можно отсеять абсурдные результаты, такие, например, для которых этот показатель выше 5. Так как такие системы заранее будут переоптимизированы, то есть подогнаны под исторические данные.

3) Математическое ожидание выигрыша равен чистой прибыли деленной на количество сделок. Производный параметр, который указывает среднюю прибыльность каждой отдельной сделки. Достаточно важный параметр, так как может помочь определить, как подходящие наборы параметров, так и незначительные. Его значение полностью зависит от величины торгуемого лота, и это следует учитывать при оценке эффективности работы системы.

4) Количество сделок. Этот параметр следует использовать для отсева незначительных наборов параметров, так как результаты сделок, число которых меньше 50, просто непрезентативны, потому что не имеют статистической обоснованности, но тут надо еще заметить, что глубина исторических данных, за которую производится оптимизация, сильно влияет на общее количество сделок, а также исследуемый таймфрейм. Также исключаем те наборы параметров, где стратегия совершает слишком много сделок, что говорит о том, что у нас слишком часто срабатывает условие, т.е. фактически всегда, а еще большое количество сделок ведет к большим издержкам как по комиссиям так и по проскальзыванию.

5) Максимальная просадка – самая большая разница между соседними локальными максимум и минимумом значения величины депозита в ходе тестирования.

6) Фактор восстановления — Отношения чистой прибыли деленной на максимальную просадку. Данный показатель говорит об устойчивости системы.

Методы оценки и повышения надежности торговой системы

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

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

Устойчивость значений параметров системы

Под устойчивостью понимается незначительность отклонений показателей эффективности системы при изменении значений ее параметров.

Например, если взять простую классическую торговую систему, основанную на пересечении скользящих средних, то после оптимизации и выбора параметров, мы получим два периода скользящих средних. Если мы изменим на +- 2 период каждой из скользящей относительно выбранных после оптимизации, то график дохода принципиально не изменяется, значит параметры выбраны достаточно правильные и устойчивые.

Тестирование системы

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

При оценке результатов тестирования будут взяты во внимание оба аспекта результатов ее работы: график баланса (баланс – текущее значение величины депозита) и значения показателей ее эффективности.

Для начала рассмотрим контроль формы графика баланса (дохода). График баланса – это график на плоскости, где по оси Х обозначен временной промежуток, а по оси Y значения баланса.
Приведем критерии оценки формы графика баланса и их влияние на устойчивость системы:
1) Линейность. Чем более ровный график, и на нем отсутствуют визуальные локальные провалы, тем более устойчива и надежна система и тем стабильнее доход от каждой сделки.
Ровный-график-дохода

2) Просадки. Просадка – это разница между локальным максимумом значения баланса и следующим за ним локальным минимумом. Чем меньше визуальные просадки и чем они короче (баланс быстро возвращается к локальному максимуму), тем более надежна система.
Просадки-на-графике-дохода

3) Флэты. Флэт – боковое движение графика баланса, оно характеризовано отсутствием прибыли или наращивания значения баланса. Чем они короче и чем их меньше – тем стабильнее работа системы.
Застой-по-доходности

4) Локальные максимумы системы должны иметь восходящий характер. Другими словами, каждый новый максимум должен быть выше предыдущего. Это характеризует прибыльность системы.
максимумы-по-доходу

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

При тестировании оптимизированных комбинаций для выбора наиболее надежной комбинации следует в первую очередь уделять вниманием таким критериям работы системы:
1) Прибыльность. Ее значение должно быть выше 1,5. Для очень хороших систем, ее значение обычно равно 2 и более
2) Количество сделок. Чем больше сделок делает система при сохранении остальных показателей, таких как прибыльность, математическое ожидание выигрыша и просадки, тем лучше работает система, и тем более показательны значения ее индикаторов эффективности при тестировании. Но сделок не должно быть слишком много, чтобы они не открывались почти каждую свечу.
3) Максимальная просадка, которая характеризует размер максимального снижения значения депозита до восстановления. Чем меньше этот показатель – тем надежнее система.
4) Математическое ожидание выигрыша. Среднее значение каждой сделки системы. Чем выше – тем более прибыльная система.

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

Тестирование вне выборки

Тестирование системы вне выборки позволит оценить отклонение прогнозируемых показателей системы от реально полученных. Работа системы за рамками оптимизационного периода – это представление реальных условий торговли, то есть торговли в реальном времени. Либо заведомо из оптимизационного периода убрать процентов 10 данных и на них протестировать полученные параметры.

Прогнозирование временных границ работоспособности системы и оценка возможных отклонений показателей ее эффективности

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

Мы предлагаем оценивать временной горизонт работоспособности системы таким образом: оцененный временной горизонт – (оцененный временной горизонт * допущенное отклонение). Другими словами, если был оценен временной горизонт работоспособности равный одному году, то в реальной торговле система будет применяться всего 12*0.25, то есть 8 месяцев. После истечения этого периода, следует заново оптимизировать систему и оценить временной горизонт уже для новых оптимизированных значений параметров торговой системы.

Возможные отклонения показателей были определены при тесте системы вне выборке. Также для учета работоспособности системы следует учитывать рассчитанные показатели POR (Probability of Ruin) и PROM (The pessimistic return on margin), который занижает прогнозируемую прибыль и завышает возможные убытки согласно стандартному статистическому отклонению.
PROM

Допустим во время теста системы были получены такие результаты: общая прибыль равна 2500$, убыток 1000$, а депозит был равен 1000$. Тогда получается, что на тесте система дала 150% дохода на депозит. PROM же оценит предположительный доход равным 73,3%. Именно на такой доход и следует опираться при оценке предполагаемой прибыльности системы.

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


Вы уже сейчас можете начать изучать Видео курс- роботы в TSLab и научиться самому делать любых роботов!

Можно записаться на следующий поток ОнЛайн курса «Создание роботов в TSLab без программирования», информацию по которому можно посмотреть тут->

Также можете научиться программировать роботов на нашем Видео курсе «Роботы для QUIK на языке Lua»

Если же вам не хочется тратить время на обучение, то вы просто можете выбрать уже готовые роботы из тех, что представлены у нас ДЛЯ TSLab, ДЛЯ QUIK, ДЛЯ MT5, ДЛЯ КРИПТОВАЛЮТЫ!

Также можете посмотреть совершенно бесплатные наработки для МТ4, Квика, МТ5. Данный раздел также постоянно пополняется.