Легко тестируйте, обучайте и тестируйте свои стратегии для достижения максимального успеха

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

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

Включает:

1. Создание собственных тестов на истории

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

2. Обучение вашей модели

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

3. Тестирование вашей модели

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

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

Использование

Написание стратегии

Мы используем Шаблон разработки стратегии, чтобы предоставить единый интерфейс для применения различных торговых стратегий в тестах на исторических данных. Фактическая логика каждой отдельной торговой стратегии реализована в производном классе интерфейса и поэтому легко взаимозаменяема. Для этой цели мы реализуем абстрактный класс с именем *Strategy*, который реализует только те методы, которые есть у всех стратегий, а именно _long, _short, _close_long_trade и _close_short_trade. В то же время он также предоставляет два абстрактных метода next_candle_setup и next_candle_trade, которые предоставляют интерфейс для пользователей этого класса, которые должны быть реализованы каждым производным классом.

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

В то время как класс абстрактной стратегии находится в каталоге backtest/src, фактическая реализация конкретной стратегии находится в каталоге backtest/src/strategies.

Итак, для реализации нашей стратегии продолжения тренда мы создаем новый файл в каталоге backtest/src/strategies. В нашем случае он называется ContinuationTrade.py. В этом файле мы реализуем торговую логику в классе, который наследуется от Strategy.

Базовый класс Strategy имеет два абстрактных метода, которые мы должны реализовать в нашем дочернем классе.

Методы next_candle_setup и next_candle_trade предоставляют общедоступный интерфейс для наших модулей тестирования на исторических данных.

Метод next_candle_trade проверяет, установлен ли новый триггер или существует ли существующая позиция, и вызывает методы _long, _short, _exit_long_trade или _exit_short_trade соответственно.

Если вызывается _long или _short, проверяются некоторые дополнительные условия, такие как достаточное соотношение вознаграждения/риска. Если эти условия соблюдены, сделка записывается в торговый журнал для тестирования на исторических данных.

Если вызывается _exit_long_trade или _exit_short_trade, текущая сделка отмечается в журнале сделок как закрытая.

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

Написание бэктестов

Написание бэктестов отдельной стратегии

Чтобы инкапсулировать торгуемые тикеры, таймфреймы и стратегии, мы собираем каждый из них в Enum соответственно.

Если вы хотите торговать на рынках, не включенных в текущий код, обязательно определите их в перечислении Tickers и загрузите необходимые данные о ценах.

В настоящее время поддерживается бессрочный фьючерс на 9 различных парах BUSD, которые вы можете увидеть ниже.

class Tickers(Enum):
"""Tickers available for backtesting."""

BTCBUSD = ('BTCBUSD', 3)
ETHBUSD = ('ETHBUSD', 3)
SOLBUSD = ('SOLBUSD', 0)
BNBBUSD = ('BNBBUSD', 2)
DOGEBUSD = ('DOGEBUSD', 0)
LINKBUSD = ('LINKBUSD', 1)
LTCBUSD = ('LTCBUSD', 2)
MATICBUSD = ('MATICBUSD', 0)
XRPBUSD = ('XRPBUSD', 1)

Для этих торговых пар доступны ценовые данные на следующих таймфреймах:

class Timeframes(Enum):
"""Timeframes available for backtesting."""

FIVE_MINUTES = '5m'
FIFTEEN_MINUTES = '15m'
THIRTY_MINUTES = '30m'
ONE_HOUR = '1h'
FOUR_HOURS = '4h'
ONE_DAY = '1d'

После импорта собственных стратегий вы добавляете их в перечисление Strategies, которое в настоящее время содержит только включенную стратегию Continuation Trade.

class Strategies(Enum):
"""Strategies available for backtesting."""

CONTINUATION_TRADE = (ContinuationTrade(), 'Continuation Trade')

Чтобы настроить новый бэктест для отдельной стратегии, вам нужно только установить нужные параметры в модуле backtest.py.

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

# Fees for the exchange
exchange_fees = 0.0004
# Assets to be backtested
ticker = Tickers.BTCBUSD.value
# Strategy to be backtested
strategy, test_name = Strategies.CONTINUATION_TRADE.value
# Percentage of the dataset to be used for training
train_test_split = 0.75
# Risk samples to be used for the backtest
risk_samples = np.linspace(0.01, 0.1, 5)
# Leverage samples to be used for the backtest
leverage_samples = [1, 3, 5, 10]
# Risk reward samples to be used for the backtest
risk_reward = [2.0, 3.0]
# Timeframe to be used for the backtest
timeframe = Timeframes.ONE_HOUR.value

Отчет о вашем тестировании на исторических данных будет сохранен в каталоге backtest/src/backtest_reports, включая кривые капитала и важные показатели производительности, такие как коэффициент Шарпа, коэффициент Сортино и максимальная просадка вашего тестового прогона.

Модульные тесты

Чтобы запустить включенные модульные тесты, выполните

pytest-3 -v

Лицензия

Права и ограничения лицензии см. в файле LICENSE.txt (GNU GPLv3).