AI-Крипто-торговий бот для мобільного додатку
Торговий бот—не просто скрипт з if/else на RSI. Система з управлінням ризиками, надійною з'єднаноюю з біржею, безпечним зберіганням ключів та механізмами захисту від edge cases: API rate limits, тимчасова недоступність біржі, різкі рухи ціни. Мобільне додаток додає складності: фоновий режим, перерви мережи, обмежений CPU.
Архітектура: сервер + мобільний клієнт
Торгова логіка на мобіле—погана ідея. Телефон уходить у фон, iOS приостанавливает процес, ордер не виставляється. Правильна архітектура:
- Торговий сервер (Python/Node.js)—виконання стратегій, WebSocket до біржі, ордера
- Мобільний клієнт—управління ботом, моніторинг позицій, налаштування стратегій, алерти
Мобільне додаток управляє ботом через REST API сервера, real-time дані через WebSocket.
Підключення до бірж: WebSocket та REST
Binance, Bybit, OKX—всі надають аналогічну структуру API. Торгові операції—REST, рыночні дані та оновлення аккаунта—WebSocket.
// iOS: підписка на User Data Stream Binance
class BinanceOrderStream: NSObject, URLSessionWebSocketDelegate {
private var webSocketTask: URLSessionWebSocketTask?
// Отримуємо listenKey через REST, потім відкриваємо WebSocket
func startStream(listenKey: String) {
let url = URL(string: "wss://stream.binance.com:9443/ws/\(listenKey)")!
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
webSocketTask = session.webSocketTask(with: url)
webSocketTask?.resume()
receiveMessage()
}
private func receiveMessage() {
webSocketTask?.receive { [weak self] result in
switch result {
case .success(.string(let text)):
self?.processEvent(text)
self?.receiveMessage() // продовжуємо слухати
case .failure:
self?.scheduleReconnect()
default: break
}
}
}
private func scheduleReconnect() {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.startStream(listenKey: self.currentListenKey)
}
}
}
Reconnect при обриві—обов'язковий. Binance розриває WebSocket кожні 24 години (listenKey істікає). Потрібно продовжувати через PUT /api/v3/userDataStream кожні 30 хвилин.
AI-стратегії: що реально працює у продакшені
Термін "AI-бот" часто скриває звичайний технічний аналіз. Справжні ML-підходи:
Передбачення напряму ціни (класифікація)
LSTM / Transformer на OHLCV даних + технічних індикаторах (RSI, MACD, Bollinger Bands). Передбачує: вверх / вниз / боком на наступну N-свічку.
Чесна правда: точність > 55% на out-of-sample даних—уже хорошо. Ринки—адаптивні системи, моделі деградують. Періодичне переобучення обов'язкове.
Reinforcement Learning (RL)
PPO / SAC агент учиться торгувати в симуляторі на історичних даних. Вознаграждення: PnL з урахуванням комісій. Штрафи за drawdown.
RL працює на backtest, але страждає від overfitting до історичних даних. Потрібна валідація на out-of-sample періодах та paper trading перед реальними грошима.
Ансамбль: ML + правила
Комбінуємо ML-сигнал з rule-based фільтрами: якщо ML говорить "покупай", але RSI > 75 (перекуплено) та об'єм низький—пропускаємо сигнал. Гібридний підхід знижує кількість ложних сигналів.
Управління ризиками—важливіше стратегії
class RiskManager:
def __init__(self, max_position_pct=0.1, max_daily_loss_pct=0.05):
self.max_position_pct = max_position_pct # 10% баланса на позицію
self.max_daily_loss_pct = max_daily_loss_pct # 5% денний стоп
def can_open_position(self, signal, balance, daily_pnl):
if daily_pnl / balance < -self.max_daily_loss_pct:
return False, "Daily loss limit reached"
position_size = balance * self.max_position_pct * signal.confidence
return True, position_size
def calculate_stop_loss(self, entry_price, direction, atr):
# ATR-based stop: 1.5 × ATR від ціни входу
multiplier = 1.5
if direction == "long":
return entry_price - atr * multiplier
return entry_price + atr * multiplier
ATR (Average True Range)—динамічний stop loss, що адаптується до волатильності. Фіксований % стоп (завжди -2%) працює гірше: на спокійному ринку занадто близько, на волатильному—занадто далеко.
Безпека ключів
API-ключ з правами на торговлю—критичні дані. На iOS—тільки Keychain з kSecAttrAccessibleWhenUnlockedThisDeviceOnly. На Android—EncryptedSharedPreferences або Android Keystore.
Ніколи не передавайте ключі на сервер у відкритому вигляді. Правильний флоу: користувач вводить ключ у додатку→шифрується→передається на сервер по HTTPS→зберігається зашифрованим у Vault (HashiCorp) або AWS Secrets Manager.
Окремі ключі для кожної стратегії з обмеженими правами: тільки READ + SPOT_TRADING без WITHDRAWAL. Компрометація ключа не дозволить вивести кошти.
Мобільний UI: що потрібно трейдеру
- Текущі открытие позиції з PnL в реальному часі
- графік балансу з історією
- Управління стратегіями: ввімкнути/вимкнути, параметри ризику
- Лог угод з причиною входу (який сигнал спрацював)
- Алерти: спрацював стоп, закрилась позиція, аномальна активність
Real-time WebSocket для оновлень позицій—обов'язковий. Polling раз у 10 секунд дасть затримку на швидкому ринку.
Бектестинг та paper trading
Перед запуском з реальними грошима—мінімум 6 місяців backtesting + 1 місяц paper trading (симульовані угоди на реальних рыночних даних без виконання). Backtesting через Binance Historical Data (щоденні снапшоти OHLCV), ccxt бібліотека для уніфікованого API всіх бірж.
Процес розробки
Проектування архітектури сервер/клієнт. Інтеграція з біржевим API (REST + WebSocket). Розробка торгової стратегії з ML-компонентом. Ризик-менеджмент та position sizing. Безпечне зберігання ключів. Бектестинг та оптимізація. Мобільний UI дашборда. Моніторинг та алертинг.
Орієнтири за часом
Бот з простою стратегією (MA crossover / RSI) та мобільним дашбордом—3–5 тижнів. Повна ML-стратегія з RL, ризик-менеджментом та бактестингом—2–3 місяці та більше.







