Прогнозування цін криптовалют на базі AI у мобільних додатках
Чесне попередження: прогнозування цін криптовалют — це завдання з високим рівнем шуму. Академічні дослідження показують точність 54–60% у прогнозуванні напрямку для LSTM-моделей на BTC — це лише трохи краще за випадкове вгадування. Цінність такої системи не в точності прогнозів, а в тому, що вона обробляє більше сигналів швидше, ніж це може зробити людина.
Основа даних
OHLCV через CCXT
ccxt — це Python-бібліотека, яка надає єдиний API до 100+ криптовалютних бірж. Стандартний підхід до отримання історичних даних:
import ccxt
import pandas as pd
exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv(
symbol="BTC/USDT",
timeframe="1h",
since=exchange.parse8601("2023-01-01T00:00:00Z"),
limit=1000
)
df = pd.DataFrame(ohlcv, columns=["timestamp", "open", "high", "low", "close", "volume"])
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")
Binance повертає до 1000 свічок за один запит. Для отримання повної історії даних реалізуйте пагінацію за допомогою параметра since.
On-chain дані
Для BTC і ETH метрики on-chain додають сигнали, які вихідять за межи даних OHLCV:
- Glassnode API: SOPR (Spent Output Profit Ratio), NVT, NUPL, Exchange Net Flow. Платний сервіс із безплатним тарифом, що пропонує щоденні дані
- Etherscan API: обсяг транзакцій, комісії за gas, активні адреси
- CoinGecko / CoinMarketCap: ринкова капіталізація, домінування, загальний обсяг ринку
import requests
class GlassnodeCollector:
BASE_URL = "https://api.glassnode.com/v1/metrics"
def get_sopr(self, api_key: str, since: int, until: int) -> pd.DataFrame:
response = requests.get(
f"{self.BASE_URL}/indicators/sopr",
params={
"a": "BTC",
"i": "24h",
"s": since,
"u": until,
"api_key": api_key
}
)
data = response.json()
return pd.DataFrame(data).rename(columns={"t": "timestamp", "v": "sopr"})
SOPR > 1 у тренді вгору = власники продають з прибутком. SOPR < 1 під час падіння = капітуляція. Це забезпечує додатковий контекст для ML-моделей.
Технічні індикатори як ознаки
Трансформуйте сирі дані OHLCV у технічні індикатори за допомогою pandas-ta або ta-lib:
import pandas_ta as ta
df.ta.rsi(length=14, append=True) # RSI_14
df.ta.macd(append=True) # MACD_12_26_9, MACDh, MACDs
df.ta.bbands(length=20, append=True) # BBL, BBM, BBU, BBB, BBP
df.ta.atr(length=14, append=True) # ATRr_14
df.ta.obv(append=True) # OBV
df.ta.vwap(append=True) # VWAP_D
Критично: нормалізуйте всі індикатори. RSI вже знаходиться в діапазоні [0, 100]. MACD слід нормалізувати за допомогою Z-score або масштабування min-max на рухомому вікні. Передавайте до моделі повернення (відсоткові зміни) та нормалізовані ознаки, а не сирі ціни.
Підходи до моделювання
LSTM для часових рядів
Стандартний вибір. Приймає послідовність N свічок і передбачає наступну:
import tensorflow as tf
def build_lstm_model(sequence_length: int, n_features: int) -> tf.keras.Model:
inputs = tf.keras.Input(shape=(sequence_length, n_features))
x = tf.keras.layers.LSTM(128, return_sequences=True, dropout=0.2)(inputs)
x = tf.keras.layers.LSTM(64, dropout=0.2)(x)
x = tf.keras.layers.Dense(32, activation="relu")(x)
# Прогнозуємо напрямок (класифікація) або повернення (регресія)
outputs = tf.keras.layers.Dense(3, activation="softmax")(x) # up/down/sideways
return tf.keras.Model(inputs, outputs)
Класифікація напрямку (вгору/вниз/в бік) є більш надійною, ніж регресія точної ціни. Оцінюйте, використовуючи точність та F1 на даних поза вибіркою.
Temporal Fusion Transformer (TFT)
TFT від Google — передова технологія для фінансових часових рядів. Підтримує кілька часових горизонтів, статичні та динамічні коваріати та інтерпретованість через механізм уваги. Реалізується в pytorch-forecasting. Більш обчислювально інтенсивний за LSTM, але досягає кращої точності з належно підготованими даними.
XGBoost як базовий рівень
Не недооцінюйте gradient boosting з добре розробленими ознаками. XGBoost без часового контексту часто конкурує з LSTM. Швидко навчається, легко конвертується в TFLite. Відмінний базовий рівень для порівняння.
| Модель | Переваги | Недоліки |
|---|---|---|
| LSTM | Захоплює часовий контекст | Повільне навчання, потребує багато даних |
| TFT | Інтерпретованість, точність | Складна конфігурація |
| XGBoost | Швидкість, простота | Відсутня часова пам'ять |
| Ensemble | Зменшує слабості | Складний розгортання |
Розгортання в мобільному додатку
Висновок виконується на сервері. Модель споживає 168 годинних свічок (7 днів) і повертає ймовірності напрямку для горизонтів 4h/8h/24h. REST endpoint із кешуванням оновлює прогнози кожну годину.
На мобільному пристрої тільки відображайте результати:
struct PricePrediction: Codable {
let symbol: String
let horizon4h: PredictionOutcome
let horizon8h: PredictionOutcome
let horizon24h: PredictionOutcome
let updatedAt: Date
}
struct PredictionOutcome: Codable {
let direction: String // "up", "down", "sideways"
let probability: Double // 0.0 - 1.0
let confidenceInterval: ClosedRange<Double> // ціновий діапазон
}
Довірчі інтервали (quantile регресія) показують діапазон замість точкових прогнозів. «BTC через 24 години: $55 000–$61 000 із 70% впевненістю» — більш чесно, ніж «$57 432».
Моніторинг деградації моделі
Криптовалютні ринки еволюціонують: змінюються режими бичачого/ведмежого ринку, появляються нові активи, відбуваються нормативні події. Модель, навчена під час бичачого ринку 2021 року, погано працює у 2022 році.
Метрики моніторингу:
- Рухома точність за останні 30 днів
- Зміни розподілу у ознаках (KL-дивергенція між навчальними та свіжими даними)
- Коефіцієнт Шарпа, якщо використовується для торгівлі
Коли відбувається деградація (точність впадає на 5%+ від базового рівня), автоматично перенавчайте модель на свіжих даних.
Дисклеймер
Включіть у додаток: «Прогнози мають інформаційний характер. Минула точність не гарантує майбутніх результатів. Це не інвестиційна рекомендація.»
Огляд процесу
Зберіть та очистіть дані (OHLCV + on-chain). Розробіть ознаки та нормалізуйте. Навчайте та перевіряйте кілька моделей. Виберіть найкращу, конвертуйте та розгорніть API. Мобільний інтерфейс: відображайте прогнози з довірчими інтервалами. Налаштуйте моніторинг та автоматичне перенавчання.
Оцінки часових рамок
Базова LSTM зі стандартними ознаками та мобільною панеллю: 2–4 тижні. Ensemble з on-chain даними, багатогоризонтним прогнозуванням та моніторингом: 5–10 тижнів.







