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

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