Алгоритмічний торговий робот: розробка, тестування та результати
Повна технічна реалізація торгової стратегії з використанням бібліотек backtesting та quantstats-lumi: побудова сигналів на основі SMA та RSI, динамічне управління позицією, адаптивний ризик-менеджмент та глибокий аналіз ефективності стратегії через ключові фінансові метрики.
Побудова торгової стратегії з аналізом через backtesting і quantstats
У цій статті представлено повний процес створення торгової стратегії — від генерації сигналів до детального аналізу результатів. Основна увага приділена саме реалізації логіки торгівлі, адаптивному управлінню ризиками та використанню спеціалізованих інструментів Python.
🛠 Інструменти, використані в проекті:
backtesting— симуляція стратегії на історичних даних із урахуванням комісій, стопів, ринкових ордерівquantstats-lumi— генерація звітів із ключовими метриками: CAGR, Sharpe, просадки, волатильність тощо
📈 Ключові компоненти реалізованої стратегії:
- Сигнали на основі SMA + RSI — чіткі умови входу/виходу з позицій
- Динамічний розмір позиції — залежить від волатильності, сили тренду та RSI
- SL/TP контроль — адаптивний рівень обмеження збитків і фіксації прибутку
- Оцінка продуктивності — через стандартні фінансові метрики та інтерактивні графіки
🎯 Мета: Створити стратегічний фреймворк, який можна розширювати під будь-який актив або тип ринку — без прив’язки до конкретного інструменту.
Try it yourself: запустіть Google Colab-ноутбук із повним кодом за 🔗 цим посиланням
Архітектура стратегії: ключові моделі
AdvancedSmaStrategy – це не просто набір правил, а система взаємопов’язаних моделей, кожна з яких виконує свою функцію.
Альфа Модель (генерація сигналів)
Відповідає за ідентифікацію потенційних точок входу та виходу.
- Основа: Комбінація 4-х ковзних середніх (SMA) з різними періодами (
n1,n2,n_enter,n_exit). - Сигнали Входу:
- Long: Перетин ціною (
Close) короткої SMA (sma_enter) знизу вгору, за умови підтвердження тренду (середняsma1> довгоїsma2). - Short: Перетин ціною короткої SMA (
sma_enter) зверху вниз, за умови підтвердження тренду (sma1<sma2).
- Long: Перетин ціною (
- Фільтр Сигналів: Індекс Відносної Сили (RSI).
- Long: Тільки якщо
RSI < 70(уникнення перекупленості). - Short: Тільки якщо
RSI > 30(уникнення перепроданості).
- Long: Тільки якщо
- Сигнали Виходу: Перетин ціною “дуже короткої” SMA (
sma_exit) у напрямку, протилежному відкритій позиції.
Модель Оцінки Ризиків (управління позицією)
Критично важливий компонент для захисту капіталу та оптимізації прибутку.
- Stop Loss (SL) та Take Profit (TP): Відсоткові, встановлюються для кожної угоди (
stop_loss_pct,take_profit_pct). - Динамічний Розмір Позиції:
- Базовий ризик: 2% від поточного капіталу на угоду.
- Коригування: Розмір позиції додатково модулюється
current_marginмультиплікатором. current_marginрозраховується динамічно:margin = min_margin + (max_margin - min_margin) * norm_vol * rsi_factor * trend_factornorm_vol(нормалізована волатильність): Інвертована волатильність (менша волатильність ринку → більший розмір позиції).rsi_factor: Залежить від RSI (нейтральний RSI → більший розмір, екстремальний → менший).trend_factor: Залежить від сили тренду (різниця міжsma1таsma2).
Результати в цифрах: Стратегія vs. Buy & Hold
Оптимізація параметрів проводилася за допомогою backtesting.py та методу sambo. Ось ключові показники ефективності:
| Метрика | Стратегія | Buy & Hold |
|---|---|---|
| Загальна Дохідність | +176% | +31% |
| CAGR (Середньорічна) | +39.34% | +9.15% |
| Максимальна Просадка | -19.65% | -91.88% |
| Коефіцієнт Шарпа | 1.44 | 0.60 |
Стратегія не тільки значно перевершила пасивне утримання активу за прибутковістю, але й зробила це з набагато меншими ризиками.
Висновок
Цей проект демонструє, як комбінація перевірених технічних індикаторів, доповнена продуманою моделлю управління ризиками та динамічним розміром позиції, може дати чудові результати. Ретельне бектестування та оптимізація є ключем до створення ефективних торгових алгоритмів.
Планую і надалі вдосконалювати стратегію, зокрема через впровадження адаптивних SL/TP та дослідження інших факторів впливу.
