Подбор оптимальных параметров торговой стратегии
Задача: автоматизировать подбор оптимальных параметров торговой стратегии.
Клиенты пришли с готовым торговым алгоритмом, описанным на pine-script. От разработчика требовалось реализовать решение, позволяющее в разумные сроки перебирать сотни тысяч комбинаций параметров алгоритма и проверять результат работы алгоритма с этими параметрами на исторических данных.
Решение:
Разработан набор скриптов, который:
в автоматическом режиме скачивает исторические данные с помощью API бирж Binance и Bybit.
Производит подбор набора параметров, обеспечивающий максимальную прибыль при заданной максимальной величине просадки капитала на заданном наборе исторических данных. (Например — поиск комбинации, дающей максимальную прибыль при просадке не выше 15% на данных с 01.01.2020 по 01.01.2024 г.)
Для верификации качества подбора используется форвард-тестирование. Т.е. После того, как получается очередной набор, удовлетворяющий заданным показателям прибыли/просадки, параметры тестируются на новом диапазоне дат, с целью снижения эффекта “переобучения” алгоритма. И если форвард-тестирование также показывает удовлетворительные результаты, набор параметров сохраняется в список результатов.
Полученные результаты сохраняет в текстовый файл в виде списка значений параметров. А также сохраняет в текстовый файл код стратегии на pine script с наилучшими подобранными параметрами. Код можно скопировать в TradingView и запустить.
Особенности решения:
Для поиска оптимального набора параметров используется генетический алгоритм, который находит решение значительно быстрее прямого перебора всех возможных комбинаций параметров.
Для дополнительного ускорения было реализовано распараллеливание вычислений на доступные ядра CPU.
Вычисления производятся с помощью библиотеки Numba, что позволило сократить время расчётов в 1000 раз по сравнению с традиционными методами (pandas, numpy), принятыми в python для работы с данными.
Решение упаковано в Docker-контейнер, что позволяет быстро разворачивать его на любом современном сервере или персональном компьютере.
Решение позволяет одновременно (параллельно) производить расчёты для любого количества торговых пар.
Параметры расчёта — список торговых пар, максимально допустимая просадка, минимальный уровень прибыли, диапазон бэк-тестирования и диапазон форвард-тестирования задаются в файле. После чего можно запустить скрипт который всю дальнейшую работу выполнит автономно. Т.е. Пользователь может запустить скрипт на ночь или на выходные дни и вернуться к работе, когда все результаты будут подсчитаны.
Язык программирования — Python 3.11
Есть возможность расширить решения для поиска параметров под другие популярные крипто-биржи.