Мои усилия по поиску оптимальных параметров ADX для получения наибольшей доходности пока увенчались успехом. Во-первых, мне удалось найти хороший источник данных в реальном времени, доступных через Python API. Я определил, что Альпака была лучшей, как описано здесь. Во-вторых, я создал систему для тестирования гипотетического торгового бота на основе ADX, но на статических данных. Вот тот пост.

В-третьих, я выложил свое расследование упущенных возможностей торгового бота. Я провел поиск по сетке по более чем 20 000 комбинаций параметров и различным токенам, таким как биткойн, эфириум и догекоин. Вот тепловая карта для Polygon (MATIC/USD), показывающая, как различные параметры ADX коррелируют с доходностью.

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

Оптимизация AutoML

Я возьму код и результаты и воспользуюсь AutoML для точной настройки параметров ADX. В какой-то момент я расширим свой подход к использованию других алгоритмов индикаторов, таких как MACD, но это будет позже. На данный момент я по-прежнему стремлюсь к повышению доходности с помощью ADX, чтобы продолжать получать повторений для моего торгового робота с искусственным интеллектом. Я предпочитаю AutoML API Оптуна. Мне нравится этот проект с открытым исходным кодом. Я использую его на протяжении многих лет, как здесь. Optuna продолжает улучшаться, выпуск за выпуском, добавляя такие функции, как встроенные визуальные эффекты, информационные панели и простые интеграции с несколькими базами данных OTLP.

Потребности в хранилищах Optuna

Первый шаг к использованию Optuna — это… что еще?

> pip install optuna

Вы можете сразу начать пользоваться Оптуной, а результаты сохраняются в памяти. К сожалению, это делает ваши результаты эфемерными и пустой тратой времени. Вы также можете использовать SQLite, но при масштабировании вы столкнетесь с некоторыми разочаровывающими ударами по производительности. На другом конце спектра производительности будет что-то вроде Google Cloud Spanner, но давайте просканируем, прежде чем бежать. Что такое хороший баланс между производительностью и простотой использования? Как насчет Postgres, работающего в контейнере Docker? После этого я, вероятно, буду использовать Google Cloud SQL Postgres, но пока я буду придерживаться своего локального экземпляра Docker. Вот мои заметки для этого в минимальном количестве команд. Это предполагает, что у вас установлен Docker. Во всех фрагментах кода используется углерод.

Чтобы убедиться, что Postgres работает и доступен, вот тестовый скрипт Python.

Приведенный выше код Python должен возвращать pandas DataFrame.

Криптовалюта + ADX + Optuna = Доходность

В моем предыдущем посте Objective Function взял набор параметров ADX и таймфрейм для данных токена. Однако на этот раз параметры за меня выберет Оптуна. Изначально я скажу Оптуне использовать параметры из моего предыдущего проекта, а не все 20К. Вместо этого я выберу 100 параметров из набора 20 000 параметров. Затем я позволил Optuna выбрать следующие 200, в общей сложности 300 испытаний параметров ADX на токен.

Важность параметра — поиск по сетке против Optuna

Optuna предоставляет панель инструментов, которую очень легко установить и запустить. Чтобы начать использовать Optuna, первый шаг… что еще?

pip install optuna-dashboard

Если переменные среды Postgres были созданы, как описано выше, запустите панель инструментов Optuna с помощью этой команды:

optuna-dashboard \

postgresql://${pg_user}:${pg_pw}@localhost:5432/${pg_db}

Открыв браузер на localhost:8080, вы увидите страницу вида:

Если я нажму на исследование Polygon (adx-MATIC/USD) и прокрутлю вниз до «Важность гиперпараметра», мы увидим следующий виджет панели инструментов со следующим списком важности параметра ADX:

(1)minus_di_timeperiod, (2)adx_threshold, (3)plus_di_timeperiod, (4)adx_timeperiod, (5)n_history_days

А вот тепловая карта корреляции параметра Grid Search ADX ~ ROI со следующим списком важности параметров, проиндексированным списком важности Optuna:

(2)adx_threshold, (5)n_history_days, (4)adx_timeperiod, (3)plus_di_timeperiod, (1)minus_di_timeperiod

Что интересно, порядок важности для Optuna и Grid Search почти противоположный. Это сводит меня с ума. Я оставил числовые показатели одинаковыми из приведенного выше списка для сравнения.

Оптуна

(1)minus_di_timeperiod, (2)adx_threshold, (3)plus_di_timeperiod, (4)adx_timeperiod, (5)n_history_days

Поиск по сетке

(2)adx_threshold, (5)n_history_days, (4)adx_timeperiod, (3)plus_di_timeperiod, (1)minus_di_timeperiod

adx_threshold — единственный параметр, который остается важным в обоих методах.

Доходность — поиск по сетке против Optuna

Итак, теперь, когда я знаю, что Optuna имеет разные приоритеты параметров ADX, я хочу знать, какой метод поиска параметров имеет лучший ROI. Оказывается, это даже не близко. Вот гистограмма средних значений ROI от Grid Search и Optuna.

Как видите, ROI оптимизации параметров Grid Search ADX практически не заметен. Из любопытства вот минимальные ROI для каждого токена.

А вот максимальный выигрыш для каждого токена, Grid v Optuna

Покажи мне параметры

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

И вот лучшие параметры ADX для каждого токена.

Зная, что Optuna превосходит мой поиск по сетке, давайте посмотрим, почему. Вот мои лучшие параметры поиска по сетке.

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

Оптуна ›››› Поиск по сетке

Мой вывод довольно очевиден. Лучший способ получить более высокий доход — использовать машинное обучение. Просмотр моих параметров поиска по сетке занял более 5 минут. В следующий раз добавьте в Optuna пробные версии Grid Search. Создание начальных испытаний, а затем выборка из них также является лучшей практикой по моему опыту, которую я не видел больше нигде, но я думаю, что мы должны.

В следующий раз

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