Розробка алгоритму grid trading з динамічними рівнями
Grid trading — стратегія виставлення сітки ордерів вище та нижче поточної ціни. При русі ціни вниз — купуємо, при русі вверх — продаємо. Прибуток накопичується на кожному «кроці» сітки. Динамічна сітка відрізняється від статичної тим, що адаптується до зміни волатильності та тренду.
Базова механіка grid trading
Статична сітка (для розуміння): встановлюємо діапазон $40,000–$50,000, 10 рівнів. Крок: $1,000. Виставляємо:
- Buy ордери: 40k, 41k, 42k, 43k, 44k
- Sell ордери: 46k, 47k, 48k, 49k, 50k
- Поточна ціна: ~$45k (middle)
При падінні до $44k → виконується buy ордер → автоматично виставляємо sell $45k. При зростанні до $45k → виконується sell → прибуток $1,000 за крок.
Profit per grid = крок / ціна. 1% крок → ~1% прибуток на кожному повному циклі (без урахування комісій).
Динамічна сітка: адаптація до волатильності
Статична сітка працює в діапазоні. Якщо ціна вийде за межі — сітка «замерзає» та не торгує. Динамічна сітка вирішує це:
ATR-based grid spacing: крок між рівнями = кратне ATR. При високій волатильності кроки ширші (менше помилкових сигналів, вищий прибуток за крок). При низькій — вже (більше угод).
def calculate_grid_levels(current_price, atr, n_levels=10, atr_multiplier=0.5):
step = atr * atr_multiplier
levels = []
for i in range(-n_levels//2, n_levels//2 + 1):
level_price = current_price + i * step
levels.append(level_price)
return sorted(levels)
Recentering: якщо ціна вийшла за межі сітки на N кроків — перерахуємо сітку навколо поточної ціни. Скасовуємо невиконані ордери, виставляємо нові.
Trend-aware grid: у висхідному тренді (позитивна EMA) сітка зміщується вверх. Більше sell рівнів вище, менше buy рівнів нижче. У низхідному — навпаки.
Управління капіталом у сітці
Рівномірний розподіл: одинаковий капітал на кожен рівень.
Pyramid allocation: більше капіталу на рівнях ближче до поточної ціни (більш імовірне виконання), менше на крайні рівні.
Максимальний inventory: обмеження на максимально накоплений актив. Якщо сітка продовжує купувати при падінні — ризикуємо перевантажити позицію.
def check_inventory_limit(current_qty, max_qty_pct, capital, price):
max_qty = (capital * max_qty_pct) / price
if current_qty >= max_qty:
# Зупиняємо buy ордери, тільки sell
return False
return True
Прибуток та метрики
Grid profit: сумарний прибуток від виконаних пар buy/sell ордерів. Unrealized P&L: якщо накопичено inventory при падінні ціни. Total P&L: grid profit + unrealized P&L. Grid occupancy: відсоток рівнів, які торгувались.
Коли grid trading працює
Ідеальні умови: боковий ринок з регулярними коливаннями. BTC у діапазоні $40k–$50k протягом кількох місяців — відмінна ситуація для grid.
Погані умови: сильний тренд. При спрямованому русі вниз накопичуємо збиткову позицію без продажів.
Захист від тренду: Stop-loss на весь grid при падінні нижче нижньої межи на X%. Або використання тільки spot (без плеча) — тоді збиток тільки unrealized, без margin call.
Стек: Python (asyncio + CCXT), PostgreSQL для зберігання рівнів та ордерів, простий web UI для налаштування та моніторингу сітки, Telegram alerty при recentering та stop-loss.







