Как я сделал тестер-оптимизатор для нахождения прибыльных стратегий на бирже

Введение


image

В алгоритмическом трейдинге при создании механических торговых систем (МТС) очень важен вопрос времени жизни торговых алгоритмов. Да, и найти их в принципе достаточно сложно. В условиях постоянно меняющегося рынка рано или поздно наступает момент, когда даже самый совершенный и прибыльный алгоритм начинает приносить убытки. И его нужно, что называется, «подкручивать» или оптимизировать под текущие условия рынка. Одними из самых распространенных являются торговые системы (ТС), работающие со свечными графиками с их многообразием индикаторов для технического анализа.

image

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

Методы оптимизации стратегий


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

Есть уже готовые оптимизаторы стратегий в других программных продуктах типа Wealth-Lab, AmiBroker. Но в них применяются свои скриптовые языки и как правило возникают какие-то другие ограничения, и протестировать стратегии полностью не получается. Как в них перевести свои стратегии? Все ли может этот тестировщик, что нам нужно? Будут ли тесты отражать реальность? И еще много других вопросов возникает, когда начинаешь изучать эту тему подробнее.

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

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

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

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

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

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


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

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

Первая версия тестера-оптимизатора «Монте-Карло»


Классический поиск максимума

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

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

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

Но как я уже выше заметил важно изучить область вокруг экстремума, и поэтому, решил сходиться до конца, и на последней итерации проверить полностью все соседние стратегии. Я не стал мудрить с градиентами и сделал сходимость статичной в процентах от начальной выборки. То есть на сколько резать многомерную матрицу после каждой итерации на 1% или на 20% мы решаем в самом начале. Также, мы сразу, учитывая наши возможности по времени, решаем, сколько стратегий мы будем брать из матрицы на каждой итерации для тестирования. Таким образом, нам вообще не важен размер матрицы, мы точно знаем сколько итераций и в каком объеме проведем! В этом и есть вся прелесть стохастических методов.
Основываясь на вышесказанном, написал программу для поиска лучших параметров стратегий.
Исходные данные для оптимизации:
  • тестируемый торговый инструмент,
  • диапазон истории,
  • таймфреймы свечек (хоть все, от 5 сек до нескольких часов),
  • диапазоны рассматриваемых параметров стратегии,
  • шаг в этих диапазонах,
  • процент уменьшения области выборки после итерации,
  • количество элементов в выборке,
  • количество стратегий отправляемых для тестирования.

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

Интерфейс тестера-оптимизатора «Монте-Карло»:

image

В работе:

image

Конец, тестирования. Лучший результат стал с матожиданием 88%. Причем из 6060 вариантов протестировали только 778, из них 116 повторилось.

image

Стратегии перед тестированием проверяются, не тестировались ли они раньше, потому что к экстремуму плотность увеличивается и в конце полностью покрывается область вокруг максимума. А одно и тоже повторно тестировать мы не будем. Все результаты тестирования без проблем обрабатываются программой для визуализации стратегий «Анализатор». Всегда можно в ручную подправить ГО (гарантированное обеспечение), комиссию или изменить стартовый депозит:

image

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

Окно результатов тестирования:

image

Все вместе:

image

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

Условная схема работы стохастического алгоритма поиска максимума по методу Монте-Карло:
image

Усовершенствованный алгоритм


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

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

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

Как тогда обрезать матрицу? Будем обрезать только те области, которые исследовали! То есть мы будем удалять микро области вокруг худших исследованных стратегий. Суть алгоритма сводится к тому, что мы не исследуем хорошие области стратегий, мы не исследуем плохие. А лучшие стратегии мы дополнительно можем исследовать в конце оптимизации.

Здесь показана работа такого алгоритма:

image

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

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

В принципе это можно было изобразить и в двух координатах:

image

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

Здесь видно как алгоритм идет от одной худшей стратегии к другой, начиная с самой плохой:

image

Преимущества алгоритма:


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

В итоге получаем что-то такое:

image

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

«Длинная — матожидание»

image

«Короткая — матожидание»

image

Внешний вид тестера-оптимизатора «Исследователь»:

image

Все приложения были написаны полностью на С#. Перед запуском оптимизации настраиваем следующие параметры:
  • диапазоны параметров стратегии, а также шаг этих параметров,
  • на каких таймфреймах будем исследовать (можно выбрать сразу несколько),
  • диапазон истории,
  • инструмент,
  • путь для сохранения результатов оптимизации,
  • параметры расчёта комиссии и др.
  • критерий останова исследования в процентах от начального размера матрицы,
  • на сколько % мы будем уменьшать область выборки после каждой итерации. От этого зависит общее число итераций и точность оптимизации.
  • сколько случайных стратегий мы будем исследовать из области выборки на каждой итерации,
  • сколько стратегий будем отправлять в тестеры (возможно несколько заходов). Зависит от мощности ПК, объема оперативной памяти, глубины исторических данных.
  • вокруг скольких худших стратегий будем удалять локальные области,
  • сколько лучших стратегий будем исследовать на сходимость,
  • размер локальной области вокруг лучших стратегий, которые будем исследовать дополнительно.

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

image

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

P.S. Не много о себе. С трейдингом познакомился около года назад, сначала торговал вручную, потом понял, что это не мое. Пришел к выводу, что лучше торговать по чётким правилам и автоматизировано. Первый алгоритм написал на скриптовом языке терминала Quik, но этот язык (qpile) оказался невероятно убогим. Потом начал знакомиться с С# и на нем писать своих первых торговых роботов. В данный момент создаю многофункциональную платформу для алгоритмической торговли.

Всем удачи! С уважением, Алексей.
Поделиться публикацией
Комментарии 61
    +5
    Класс! Респект за такую работу!
      +1
      Спасибо! Приятно, что оценили мой труд)
        +3
        Да, работа хорошая. У меня лично вообще особая тяга к рассматриванию красивых графиков вещей, в которых я ни черта не понимаю. Что-то такое загадочное в них притягивает, не могу даже объяснить.
        +1
        Огромное спасибо за статью! есть куда развиваться при разработке ботов для торговли криптовалютам :)
          0
          Я подобных тесторов со своей командой много написал для проверки стратегий торговли криптовалютами :)
          Только вот визуализации красивой у нас не было — алгоритм по итогам просто выдавал самые оптимальные варианты для стратегий :(

          Кстати, подбор параметров для самой прибыльной стратегии (>%40/мес) занял около двух недель на пяти довольно мощных машинах :)
            0
            Без визуализации тяжело. Я когда десятый лист в блокноте графиками начал замалевывать представляя себе 9-мерный массив, понял что без нее не обойтись) Да, и поведение алгоритма становится яснее и нагляднее.
            Скорость оптимизации зависит от многих параметров. От архитектуры приложений, глубины исторических данных, формы их хранения, от «обвеса» стратегии, вычислительных мощностей и т.д. К тому же оптимизированные параметры действуют ограниченный интервал времени и для многих стратегий эту операцию нужно проводить регулярно.
            А на чем вы тестировали? Тики, свечки, стакан? Самописный софт или готовый продукт?
              0
              Для многих стратегий :) но выяснилось, что не для всех.

              Тестировали на истории тикеров за последний год — поэтому немного много времени заняло.
            0
            Все писалось в основном для торговли на срочном и фондовом рынке, но в принципе ничего не мешает использовать эти механизмы для торговли криптовалютой! Алгоритмам все равно торгуем мы биткоинами или фьючерсами на пшеницу)
            +1
            Тем же увлекаюсь, но с чуть менее математическим подходом. Было интересно прочитать, полностью согласен с последним абзацем — совершенно жутко бесит что практически все реальные торговые терминалы брокеров гордо несут на себе рекламную метку «скриптовый язык для автоматического трейдинга», при этом это такой убогий огрызок которым можно чуть ли не только делить и складывать и все. Хоть бы кто дал хорошие условия трейдинга и API к данным и заключению сделок — вот это был бы разговор…
              0
              Про криврукость скриптовых языков можно отдельный пост написать. Скорость ужасная, функционал обрезанный, везде какие-то ограничения. Либо приходится всякие костыли к ним прикручивать и потом уже не можешь разобраться почему ничего не работает!
              После этих скриптов я испытал колоссальное удовольствие от всех открывшихся возможностей, когда мне удалось перейти на C# с применением S#. Любые таймфреймы, хоть тики и секунды. Можно делать самые разнообразные графики и таблицы, проводить сложные операции с большими массивами данных на высоких скоростях, всевозможные статистические исследования и т.д. Например, ту же оптимизацию) Так можно пойти дальше и сделать оптимизацию динамической и адаптивной! Но это уже, наверное, в следующих статьях)
                0
                Просто добавлю сюда: WLD использует чистый C#, и есть возможность его подключения к VS для отладки стратегий. Поэтому я бы не был таким категоричным ;)
                А в целом работа достойная!
                З.Ы. Планируете ли открывать в свободный доступ/продавать свое творение?
                  0
                  Вопрос есть: скажите, имеется ли возможность тестирования маржинальной торговли?
                    0
                    WLD на C#, Квик на C#, если не ошибаюсь TSLab тоже на С#. А что толку. Код чужой, закрытый, все равно под API платформы приходится подстраиваться и если у них баги, то вы их будете терпеть и ждать, когда разработчики соизволят их устранить. Это сплошь и рядом. К тому же в WLD серьезные проблемы с таймфреймами до 1 минуты.
                    Вот маржинального тестирования пока нет, но ничего не мешает его туда прикрутить) Пара формул в расчет статистики и комиссии. В этом вся прелесть своих разработок!
                    ПО пока не планировал распространять, но в перспективе есть такая идея. Если интересно оставайтесь на связи, если что будем сотрудничать.
                      +1
                      Конечно интересно! Сам мучаюсь от различных недостатков разных платформ для тестирования. И Амиброкер ковырял, и ВЛД, про МТ вообще молчу.
                      Из последнего очень понравился встроенный тестер в платформе JForex Dukascopy. Чистая ява, куча возможностей, и тестирование по реальным бидам и аскам. Пока, правда, у них только валюты, но вроде получили лицензию на фьючи, так что жду с нетерпением.
                +7
                Меньше полугода назад прошел обучение в StockSharp, тогда я впервые открыл Visual Studio и написал свои первые строчки на С#


                Курс за 30 тыс. по С# и библиотеке с открытым API. И через полгода готовая программа уровня профи с 2-3 летним опытом программирования? Талант, что тут скажешь. Ну и ребята из stocksharp тоже молодцы — не стесняются свои продукты рекламировать, пусть даже таким топорным способом.

                Ну и по сути — что дала оптимизация? Доходность с ней и без нее на сколько различается?
                  +1
                  И через полгода готовая программа уровня профи с 2-3 летним опытом программирования? Талант, что тут скажешь.

                  Вы мне льстите) На самом деле прошло всего лишь 5 месяцев с момента написания первой строчки в VS! Я вообще не программист и для меня все было в новинку. В начале было сложно, все раздражало, когда не мог самостоятельно разобраться в чем ошибка. Все давалось с большиииим трудом, я буквально затеррорезировал техподдержку Стокшарпа) Можете проверить по истории сообщений на их форуме)
                  Потом стал более самостоятельным, в Google всегда находился ответ на какое-то программное затруднение. Все таки С# очень распространенный язык программирования.
                  На самом деле ничего принципиально сложно, просто очень много работы. Каждый день несколько часов уходило на изучение языка, исследования и тестирование программ.
                  Ну и по сути — что дала оптимизация? Доходность с ней и без нее на сколько различается?

                  Основное время трейдера всегда уходит на исследование рынка. Оптимизация помогает попасть в правильное русло исследований и двигаться в сторону прибыльных стратегий без траты времени на изучение изначально неудачных стратегий. Доходность, конечно, увеличивает. На то она и оптимизация, чтобы выбрать самое лучшие.
                  +3
                  Так самого главного нет — что это все дало на практике? Доходность?
                    –1
                    Все зависит от стратегии. Если в ней нет фундаментального начала и логичной системы, то ты ее сколько не оптимизируй, она тебе будет выдавать подогнанный под исторический диапазон вариант. А если стратегия со смыслом, то бесспорно грамотная оптимизация увеличит ее доходность.
                      +6
                      Вопрос в том, что именно она дала вам, а не в том, что она может дать при соответствующей фазе луны.
                        –1
                        Оптимизация дает мне большой объем статистической информации при исследовании стратегии. После нее я знаю чего ожидать от стратегии, как она себя поведет при различных условиях на рынке. Как ее правильно настраивать в этом многообразии вариантов параметров и прочее. В алготрейдинге это немаловажно.
                    +2
                    Серьезный подход :) Сам тоже подобные тестеры писал, только проще, так глубоко в математику не уходил. Про тестеры в торговых платформах — основным конечно недостатком как раз является зоопарк скриптовых языков и свою стратегию, необходимо переписывать на этих языках с их же ограничениями и проблемами.

                    Планируете свою тулу выкладывать/продавать? Пощупать можно как-то?
                      0
                      Планируете свою тулу выкладывать/продавать? Пощупать можно как-то?

                      Сейчас многие приложения еще в разработке. Но уже готово приложение для визуализации стратегий «Анализатор», чтобы наглядно по графикам изучить свою стратегию, посчитать статистику. Тестер-оптимизатор «Исследователь» описанный в этой статье(я на него пару месяцев убил). Модуль трехмерной графики. И сейчас с коллегой веду разработку приложения для автоматической загрузки исторических данных с серверов. Чтобы история сама каждый день обновлялась и сохранялась сразу в нужном формате.
                      А вообще задумок много! Написать свой проторговщик портфеля стратегий, выйти на очень маленькие таймфреймы и т.д. Вообще я изначально пошел по пути создания полного комплекса приложений для алготрейдинга, не только самого торгового робота. Довольно сложный путь. Но пока вроде получается)
                      Да, в перспективе планирую перевести на коммерческую основу свои разработки. Но пока все по фану! Приятно открывать что-то неизведанное) Если интересно, добавляйтесь в Скайп bond_algotrade.
                      0
                      Какую модель использовали для цены?
                        0
                        Тестер-оптимизатор работает со свечной моделью цены любого таймфрейма. Можно одновременно тестировать сразу по нескольким таймфреймам. С тиками после небольшой подкрутки тоже сможет работать, но в такие диапазоны при наших интернет каналах и глюках QUIKa пока не рискую лезть. Тестировать на них вполне можно, но очевидно дольше.
                          0
                          Я имел ввиду модель реализации цены. Иначе говоря, откуда свечи, что за данные вы квантизируете?
                            0
                            Какие данные зададите, то и будете квантовать. Алгоритм универсальный и позволяет гибко настраиваться. Торговый инструмент — любой. Сохраняете исторические данные по нужному вам инструменту, делаете из них свечи любого таймфрейма. По этим свечкам тестируете в нужном вам диапазоне. В перспективе планирую добавить walk-forward для защиты от переоптимизации для не динамических систем. Оптимизирую в конкретных примерах по матожиданию, хотя можно настроить и другие критерии, в том числе комплексные.
                            0
                            Я имел ввиду модель реализации цены. Иначе говоря, откуда свечи, что за данные вы квантизируете?

                            Edit: а, тьфу, так вы на исторических данных все это протестировали. А смысл? Тут мне кажется правильный подход чтобы сначала модель под эти данные скалибрировать, там факторы подобрать как надо, и только уже потом можно заниматься реализациями цены. Так это получается труъ Монте-Карло а не слепое применение стратегий к истории, которое чревато, собственно, тем что оно только на истории и работает.
                              0
                              Все верно. Смотрите Walk Forward.
                                0
                                Нет, walk forward это когда имея 10 лет данных вы оптимизируете на первых 9 годах и тестируете на 10м. Более реалистично сначала выделить тот процесс (например в бондах это Васичек, CIR, и другие) который лучше всего отражает действительность. Потом используем этот процесс чтобы сгенерировать много абсолютно случайных реализаций цены, и вот уже на этих данных, а не в коем случае не на исторических, тестируем наш подход.
                                  0
                                  Полностью с вами не согласен) Хозяин — барин! У каждого свое личное видение рынка)
                          0
                          Прям слеза накатила, нечто подобное делал 7 лет назад для просчета коэффициентов скальперов и прочих роботов.
                            0
                            И чем все закончилось?)
                              0
                              Тем что в компания встали в очередь дядьки с налом и она проработала пол года с достаточно хорошим «выхлопом», но для более выгодной торговле надо было увеличивать портфель, и мы побоялись ответственности и закончили работу. Все были довольны.
                                0
                                Happy end! Редкость в нашей области! Обычно все заканчивается сливом)))
                                  0
                                  слив направленный — это надо сделать бота такого еще, что бы он сливал бабло на неверных сделках, хотя в момент слива стоит знак местами поменять, что бы он начал зарабатывать.
                                  На скальперах все упиралось в портфель и акции 2-го эшелона с динамикой по цене
                                    0
                                    Как, оказывается, всё просто, достаточно знак поменять… а с разницей между покупкой и продажей что делать?
                                      0
                                      А на это есть спец люди, кто искал валюты/акции с большими колебаниями. скальперу в принципе меньший разброс нужен, но пинг до серваков ММВБ не более 5мс точно нужен
                                        0
                                        А в чём проблема собственно, там есть колокейшн и производные от оного(если поспрашивать мелких брокеров за всегда договориться можно), я в своё время свою железяку там размещал, ближе некуда а цена не принципиальна если стратегия без рисковая (а ситуация была именно такая)…
                                        … и я бы не сказал что это расходы какие-то неподъёмные
                            +1
                            Что-то не так с этим
                            «подкручивать» или оптимизировать под текущие условия рынка

                            Как же в таких условиях гарантировать, что выработанный алгоритм не устареет на следующий день после своего рождения? Ведь чтобы это понять нужен не один месяц.
                              0
                              А никак. Все зависит от стратегии. Они бывают самыми разными. Какие-то нужно динамически переоптимизоровать каждую минуту, а какие-то годами работают на одних настройках. Чтобы хоть как-то понять как поведет себя стратегия ее нужно подробно исследовать, и на основании полученных статистических данных можно уже говорить о каких-то вероятностях. В трейдинге нельзя контролировать свою прибыль, можно только оперировать вероятностями и контролировать свои риски.
                              +1
                              Обычно такая оптимизация даёт замечательный результат, но только на исторических данных, после чего на реальной торговле делает прибыль брокеру. Так что автор, если Вы не брокерский маркетолог, а реально научились зарабатывать алготрейдингом, поделитесь, как Вы решаете эту проблему.
                                0
                                Все верно, но существуют механизмы для защиты от переоптимизации. Подобные исследования уже давно шагнули вперед. Тоже машинное обучение, нейронные сети.
                                Вопрос в том, чтобы все это правильно применить и грамотно оценить результаты работы таких программ. В настоящий момент разрабатываю комплекс ПО для торговли, анализа и оптимизации алгоритмических стратегий. Торгового робота написать не сложно, сложно заставить его приносить прибыль. А для этого ему нужны хорошие проверенные алгоритмы, которые нужно досконально исследовать и настроить.
                                  +1
                                  > Все верно, но существуют механизмы для защиты от переоптимизации.
                                  Вот с этого места поподробнее пожалуйста. Знаю, что существуют, и свои велосипеды наизобретал, но интересно что у Вас получилось.
                                    0
                                    Я делаю акцент на изучение сходимости, кластеризации. Если параметры хороших стратегий сгруппированы и «тусуются» рядом в пространстве, значит в их расположении есть какая-то система, а если это хорошая стратегия отбита от общей массы, значит она случайная и внесистемная. Такие параметры проторговывать, конечно, не стоит. При этом эти стратегии стоит проверять на исторических диапазонах не учавствоваших в оптимизации. Если в конце исследования что-то останется, то можно с более высокой уверенностью говорить, что стратегия рабочая.
                                0
                                Так на площадках-то опробовали? Ну там демо-счёт и все дела.
                                  0
                                  Оптимизация проводится на исторических данных, здесь реального подключения не требуется. Пока изучал алгоритмы оптимизации и тестирования. Результат вы видели в статье. Создал приложения для работы со стратегиями, для их изучения и написания. А прибыль приносить должны сами стратегии. Если стратегия бессмысленная, то ничего не поможет)
                                    0
                                    Логично. :)
                                      0
                                      А вообще как торгуете: купил и тут же продал или акции как инструмент для долговременного хранения используете?
                                        +1
                                        В основном спекулирование на маленьких таймфреймах. Но эти алгоритмы можно применить и для долгосрочных стратегий, например, для оптимизации портфеля торговых инструментов.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      +1
                                      Чем больше таймфрейм стратегий и если они носят долгосрочный характер, то на них в большей степени влияет фундаментальный анализ. Чем меньше времени между сделками, тем сильнее работают статистические закономерности.
                                      Например, где-то в Венесуэле террористы взорвали нефтеперерабатывающий завод и на этом фоне цены на нефть стали расти. Если вы были в среднесрочной сделке и играли на понижение, то вы понесете убытки и для вас такие новости важны. А если вы занимаетесь высокочастотной торговлей и за секунду совершаете с десяток разнонаправленных сделок, то вам совершенно все равно взорвали тот завод или нет.
                                      0
                                      Торгую руками на американке, но всегда интересовали роботы. Если не секрет, какой месячный выхлоп (%)?
                                        –2
                                        «Выхлоп» зависит от торгуемых вами стратегий. От правильного манименджмента и сформированного портфеля стратегий. А чтобы изучить стратегии и повысить их прибыльность используют тестирование и оптимизацию.
                                          0
                                          спасибо, открыли Америку прям :)
                                        +1
                                        Хорошая статья, спасибо!

                                        Поделитесь, каким контролом рисуете графики? Особенно трехмерные порадовали.
                                          –1
                                          Спасибо за отзыв!)
                                          Код написан на С# на основе бесплатной торговой платформы StockSharp.
                                          Трехмерная графика реализована на базе ILNumerics.
                                            +1
                                            Спасибо, интересно, красиво и на первый взгляд грамотно.

                                            Но очень жаль, что ни в статье, ни в комментариях
                                            — нет ни слова численной конкретики (например, сколько $$ или % принесла худшая из лучших и лучшая из лучших стратегия «вживую»)
                                            — нет ни слова о принципах тестируемых стратегий
                                            — нет данных о времени жизни «рабочих» стратегий
                                            — нет ссылок на «попробовать»
                                            — нет просто-напросто ничего, что можно было бы проверить

                                            И по итогам, непонятно:
                                            — если кнопка «бабло» найдена, то где ссылки на «проинвестировать»? или «купить»?
                                            — если не найдена, почему нет вывода «попробовал — пока не вышло».

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

                                            Ждем продолжения…
                                              0
                                              Спасибо за комментарий!

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

                                              Я понимаю нетерпение многих читателей, которые после статьи задаются вопросом: «Ну, и зачем я все это прочитал?» «Где сверхприбыли от таких алгоритмов?» «Это вообще работает?»

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

                                              Алготрейдинг – это целая наука, где тесно переплетаются программирование, трейдинг, математика, статистика, аналитика и другие направления. Каждый из этих пунктов требует колоссальной отдачи и вложения сил. Нет такой кнопки «Получить бабло по умному алгоритму». Поэтому не так много людей справляется с объемом и сложностью поставленных задач и добиваются успеха в этой области.

                                              Будут другие статьи в продолжение этой темы. Со временем постараюсь глубже раскрыть нюансы этой профессии. Появятся ссылки и на «протестировать», «купить», «скачать». Но не все сразу.

                                              А пока мы рассмотрели довольно сложную и при этом очень важную область алгортейдинга – оптимизацию. Все впереди! Удачи!
                                                0
                                                Я вам по секрету скажу, из личного опыта, когда вы сделаете кнопку «бабло», меньше всего вам будут нужны какие-то инвесторы, а уж о продаже и публикации не будет и речи…
                                                … правда в том, что у конкретной торговой ситуации, есть вполне конкретный объём который можно проторговать, причём это справедливо не только в скальперских масштабах, но и длинных инсайдерских играх, когда люди заливаются за дооолго и сливаются мееедленно… А при том что вы не один единственный «умник», главная проблема для вас будет куда бы приткнуть свои кровные, а не как бы привлечь чужие!
                                                0
                                                Ох, прочитал, а в голове вертится теперь только одна фраза: «Очень сильное колдунство».
                                                  0
                                                  Спасибо за статью, вдохновляет!

                                                  У меня как у многих тоже возникли вопросы :-)

                                                  — Что используете для отображения графиков в C#. Это S# или что-то другое.
                                                  — Как получить S#. Зарегистрировался но не получил подтверждения.

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое