Торговый бот становится все более изощренным

Мой торговый бот в его нынешнем виде пытается максимизировать рентабельность инвестиций и не более того. Я хочу обучить своего торгового бота, чтобы он стал более сложным. Например, в конечном итоге я хотел бы, чтобы мой торговый бот уменьшил продолжительность сделки, как показано выше. Чем дольше мой бот открыт, тем рискованнее становится сделка. Для этого мне нужно включить больше показателей. Я имею в виду:

0. ROI — уже есть

  1. + Средняя окупаемость инвестиций — окупаемость инвестиций в сделку, а не только в целом
  2. + Количество сделок — два исследования ROI равны, я хочу более активное исследование
  3. + Количество выигрышных сделок
  4. - Количество убыточных сделок
  5. + Wining Percent of Trades — количество выигрышных сделок/всего
  6. + Trade Rate — количество сделок в минуту, в среднем
  7. + Среднее количество минут на сделку — Средняя продолжительность времени, в течение которого сделка открыта.

Метрики со знаком + — это поведение, которое я хочу поощрять, а метрики со знаком - — это поведение, которое я хочу воспрепятствовать. Чтобы поощрять и препятствовать такому поведению в моем торговом боте, я изменю значение 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, оштрафованного секундой. Каждый желтый маркер – это минута.

Новый кодекс, который наказывает проигрышные сделки и длинные сделки, выглядит следующим образом.

Результаты.

А теперь об этой красоте…

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

Следующие шаги

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