Розробка бота на основі ковзних середніх (MA/EMA)

Типова проблема EMA-стратегій — помилкові сигнали при боковику Фільтр ADX вирішує цю проблему, але вимагає правильної параметризації. Ми будуємо ботів, де стратегія перетину середніх посилена індикатором ADX та ризик-менеджментом. Наша команда має досвід реалізації 50+ торгових ботів для криптори

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1009

Типова проблема EMA-стратегій — помилкові сигнали при боковику

Фільтр ADX вирішує цю проблему, але вимагає правильної параметризації. Ми будуємо ботів, де стратегія перетину середніх посилена індикатором ADX та ризик-менеджментом. Наша команда має досвід реалізації 50+ торгових ботів для крипторинку, включаючи складні конфігурації з кількома таймфреймами та бектестінгом.

Ковзні середні (Moving Average) — базовий інструмент технічного аналізу. Бот на MA/EMA генерує сигнали на основі перетинів і положення ціни відносно середньої. Однак без додаткових фільтрів такі стратегії дають багато помилкових входів на флеті. Ми впроваджуємо ADX (Average Directional Index) — індикатор сили тренду, який відсіює угоди при ADX < 25.

У чому різниця між MA та EMA?

SMA (Simple MA) — просте середнє за N періодів, де всі свічки мають однакову вагу. EMA (Exponential MA) — зважене середнє, де останні свічки мають більшу вагу, що дозволяє швидше реагувати на зміни ціни.

import pandas as pd def sma(close: pd.Series, period: int) -> pd.Series: return close.rolling(period).mean() def ema(close: pd.Series, period: int) -> pd.Series: return close.ewm(span=period, adjust=False).mean() 

Для трейдингу EMA краща: вона швидше сигналізує про розвороти тренду.

Як оптимізувати параметри EMA під свій актив?

Оптимальні періоди EMA залежать від таймфрейму та волатильності активу. Ми використовуємо grid search з out-of-sample тестом для запобігання перенавчанню.

Таймфрейм Fast EMA Slow EMA Коли використовувати
1h 9 21 Інтрадей
4h 21 55 Свінг
Daily 50 200 Golden/Death Cross
Weekly 20 50 Довгостроково

Класична стратегія Golden Cross / Death Cross

Перетин EMA50 та EMA200:

class GoldenCrossStrategy: def generate_signal(self, df: pd.DataFrame) -> str: ema_fast = ema(df['close'], 50).shift(1) ema_slow = ema(df['close'], 200).shift(1) prev_fast = ema_fast.iloc[-2] prev_slow = ema_slow.iloc[-2] curr_fast = ema_fast.iloc[-1] curr_slow = ema_slow.iloc[-1] if prev_fast <= prev_slow and curr_fast > curr_slow: return 'BUY' # Golden Cross if prev_fast >= prev_slow and curr_fast < curr_slow: return 'SELL' # Death Cross return 'HOLD' 

Без фільтра тренду ця стратегія дає багато помилкових сигналів. Додавання ADX значно покращує результати.

Порівняння стратегій за метриками

Стратегія Win rate Sharpe ratio Max drawdown
Golden Cross (без ADX) 45% 0.8 18%
Golden Cross + ADX 62% 1.2 12%
Triple EMA 50% 0.9 15%

Triple EMA strategy (9/21/55)

Три середні дають більше підтверджень:

class TripleEMAStrategy: def generate_signal(self, df: pd.DataFrame) -> str: e9 = ema(df['close'], 9).shift(1) e21 = ema(df['close'], 21).shift(1) e55 = ema(df['close'], 55).shift(1) last_9 = e9.iloc[-1] last_21 = e21.iloc[-1] last_55 = e55.iloc[-1] price = df['close'].iloc[-1] if last_9 > last_21 > last_55 and price > last_9: return 'BUY' if last_9 < last_21 < last_55 and price < last_9: return 'SELL' return 'HOLD' 

Як покращити EMA-стратегію за допомогою ADX?

EMA-стратегії працюють погано на боковому ринку — дають багато помилкових сигналів. Фільтр ADX (Average Directional Index) вирішує цю проблему: торгувати тільки коли ADX > 25 (ринок у тренді). Це знижує кількість угод, але підвищує їх якість.

Реалізація бота

class MABot: def __init__(self, strategy, exchange_client, config): self.strategy = strategy self.exchange = exchange_client self.config = config self.position = None self.candles = [] async def on_candle(self, candle: dict): self.candles.append(candle) if len(self.candles) > 300: self.candles = self.candles[-300:] if len(self.candles) < 210: # потрібен прогрів для EMA 200 return df = pd.DataFrame(self.candles) signal = self.strategy.generate_signal(df) if signal == 'BUY' and not self.position: order = await self.exchange.place_market_order( self.config.symbol, 'buy', self.config.position_size ) self.position = {'entry': order.fill_price, 'side': 'long'} elif signal == 'SELL' and self.position and self.position['side'] == 'long': await self.exchange.place_market_order( self.config.symbol, 'sell', self.config.position_size ) pnl = (order.fill_price - self.position['entry']) / self.position['entry'] * 100 logger.info(f"Closed long, PnL: {pnl:.2f}%") self.position = None 

Параметризація та оптимізація

Проводимо grid search за періодами EMA, порогами ADX, стоп-лосс та тейк-профіт. Оптимізація виконується на історичних даних (1–3 роки) з out-of-sample тестом. Середня угода приносить 2% прибутку, а річна дохідність може сягати 30% при правильному налаштуванні.

Формула EMA EMA = (Close - EMA_prev) * k + EMA_prev, де k = 2 / (N + 1)

Що входить у роботу

  • Аналіз ринку та вибір таймфрейму
  • Проєктування архітектури бота (модулі: дані, стратегія, виконання, ризик-менеджмент)
  • Реалізація стратегії на Python з використанням CCXT та Pandas
  • Бектестінг на історичних даних (мінімум 1 рік) з метриками: Sharpe, max drawdown, win rate
  • Оптимізація параметрів (grid search) з out-of-sample тестом
  • Розгортання на VPS (AWS, DigitalOcean) з моніторингом
  • Документація та навчання (2 години)
  • Гарантія стабільної роботи протягом 2 тижнів після запуску

Процес роботи

  1. Аналітика — обговорюємо стратегію, актив, часові рамки.
  2. Проєктування — архітектура, вибір біржі та API.
  3. Реалізація — пишемо код, інтегруємо з біржею.
  4. Тестування — бектестінг, симуляція реального часу.
  5. Деплой — на ваш сервер або наш VPS.
  6. Моніторинг — перші 2 тижні коригуємо параметри при необхідності.

Типові помилки при створенні ботів на MA/EMA

  • Відсутність фільтра тренду (ADX) — помилкові сигнали на флеті.
  • Перенавчання параметрів під історичні дані — майбутні збитки.
  • Ігнорування комісій та прослизання — стратегія прибуткова на папері, але збиткова в реальності.
  • Відсутність ризик-менеджменту (stop-loss, розмір позиції).
  • Неправильний розрахунок EMA на неповних свічках.

Терміни та вартість

Терміни: від 7 до 14 днів на базову версію. Вартість розраховується індивідуально залежно від складності стратегії, кількості бірж та додаткових модулів. Замовте розробку бота з уже налаштованою оптимізацією. Отримайте консультацію експерта для оцінки вашого проекту.

Ковзні середні (Moving Average) — базовий концепт. CCXT використовується для інтеграції з біржами. Зв'яжіться з нами — допоможемо реалізувати надійного торгового бота на ковзних середніх.