Торговый бот становится все более изощренным
Мой торговый бот в его нынешнем виде пытается максимизировать рентабельность инвестиций и не более того. Я хочу обучить своего торгового бота, чтобы он стал более сложным. Например, в конечном итоге я хотел бы, чтобы мой торговый бот уменьшил продолжительность сделки, как показано выше. Чем дольше мой бот открыт, тем рискованнее становится сделка. Для этого мне нужно включить больше показателей. Я имею в виду:
0. ROI — уже есть
- + Средняя окупаемость инвестиций — окупаемость инвестиций в сделку, а не только в целом
- + Количество сделок — два исследования ROI равны, я хочу более активное исследование
- + Количество выигрышных сделок
- - Количество убыточных сделок
- + Wining Percent of Trades — количество выигрышных сделок/всего
- + Trade Rate — количество сделок в минуту, в среднем
- + Среднее количество минут на сделку — Средняя продолжительность времени, в течение которого сделка открыта.
Метрики со знаком + — это поведение, которое я хочу поощрять, а метрики со знаком - — это поведение, которое я хочу воспрепятствовать. Чтобы поощрять и препятствовать такому поведению в моем торговом боте, я изменю значение ROI, которое я возвращаю в свой механизм оптимизации Optuna. В настоящее время моя объектная функция просто возвращает значение ROI, как показано в моей истории https://medium.com/@william-c-hill/cross-validated-finance-727287f40058.
Исследование 0 — просто окупаемость инвестиций
Чтобы понять, где заканчивается приведенный выше код, я добавляю следующую логику для получения вышеупомянутых метрик.
Для начала я проведу исследование, которое возвращает только рентабельность инвестиций.
Исследование 1. Препятствуйте проигрышу
Для следующего исследования я хочу наказать своего торгового бота за проигрышные сделки. Чтобы воспрепятствовать такому поведению, мне нужно уменьшить значение, возвращаемое моей целевой функцией. Я играл с делением ROI на различные делители, полученные из процента выигрышей по сделкам.
Я решил разделить ROI на удвоение журнала процента выигрышей плюс 1. Мне нравится, как этот штраф быстро уменьшает возвращаемое значение, когда процент выигрышей приближается к 50%.
Проведите исследование
Мой ROI снизился с 2% до 1,4%.
Я могу жить с этим, пока у меня нет убыточных сделок.
Я не вижу убыточных сделок, но время каждой сделки выглядит дольше. Позвольте мне проверить мою статистику.
Как и ожидалось, я сократил количество убыточных сделок до нуля, но среднее время открытия сделки увеличилось с 178 до 465 секунд. Время исправить это.
Исследование 2 — Сокращение времени победы
Моя попытка наказать торговую подверженность состоит в том, чтобы сначала определить разумное время, когда сделка должна произойти. Среднее время торговли в первом исследовании составляет 178 секунд. Я продолжу и использую 3 минуты или 180 секунд в качестве отправной точки. Каждая секунда свыше 180 начнет штрафовать возвращаемое значение целевой функции. Я умножаю ROI на 180, деленное на количество секунд сделок.
ROI x (180 / торговых секунд)
Вот график 5% ROI, оштрафованного секундой. Каждый желтый маркер – это минута.
Новый кодекс, который наказывает проигрышные сделки и длинные сделки, выглядит следующим образом.
Результаты.
А теперь об этой красоте…
Таким образом, несколько убыточных сделок вернулись, но они небольшие и недолговечные. Кроме того, общее время на сделку приятное и малое, поскольку наклон по всем сделкам очень крутой.
Следующие шаги
Я думаю, что готов связать все это в многопоточную систему для подготовки к реальной торговой системе в реальном времени. Мне также понадобится пользовательский интерфейс, чтобы следить за работой системы и управлять ею.