CryptoTrendReader — это мобильное Android-приложение для отслеживания криптовалютных котировок с тестовой сети биржи Deribit. Приложение демонстрирует динамическое построение UI с помощью Yandex DivKit, получение потоковых данных через Ktor WebSockets и анализ трендов в реальном времени на устройстве.
Это пример для:
- Разработчиков, изучающих Server-Driven UI (SDUI) с DivKit.
- Энтузиастов, желающих быстро прототипировать простые трейдинговые идеи.
- Всех, кто интересуется современным стеком технологий Android на Kotlin.
- 📊 Потоковые котировки Deribit: Прямая подписка на канал
ticker.<instrument>.100ms
через WebSocket с автоматической отправкой heartbeat для поддержания соединения и логики переподключения. (Deribit WebSocket API) - 🔄 Мгновенная смена инструмента: Просто введите тикер (например,
BTC-PERPETUAL
,ETH-PERPETUAL
) и наблюдайте за новым потоком цен без перезапуска приложения. - 🧠 Легковесная регрессия на устройстве: Расчет наклона тренда (slope), простого прогноза и средней абсолютной ошибки (MAE) выполняется до 10 раз в секунду с использованием Kotlin Coroutines. (Kotlin Coroutines)
- 📱 Динамический UI на DivKit: Весь интерфейс главного экрана описывается JSON-шаблоном. Состояние UI управляется через переменные, позволяя обновлять его "на лету" без пересоздания View. (DivKit)
- 📉 SVG Спарклайн: График последних ценовых значений генерируется как Inline-SVG, кодируется в Base64 Data URI и отображается с помощью Coil 3. (Coil SVG)
- 🏗️ Современный стек:
- Dependency Injection: Koin для простого и понятного управления зависимостями. (Koin)
- Сеть: Ktor Client для HTTP и WebSocket коммуникаций. (Ktor WebSockets)
- Асинхронность: Kotlin Coroutines и Flow для работы с асинхронными потоками данных.
Область | Технология |
---|---|
Язык | Kotlin |
Архитектура UI | Server-Driven UI (SDUI) |
Фреймворк UI | Yandex DivKit (DivKit GitHub) |
Сетевое взаимодействие | Ktor Client (CIO Engine) + WebSocket плагин (Ktor) |
Асинхронность | Kotlin Coroutines / Flow (Kotlin Coroutines) |
Загрузка изображений | Coil 3 (с поддержкой SVG, GIF) (Coil GitHub, Coil SVG) |
Внедрение зависимостей | Koin (Koin Android) |
Дизайн и стиль | Material Design 3 (XML Layouts & Styles) (Material 3) |
Логирование | Timber + SLF4J-NOP |
Сборка | Gradle с Kotlin DSL |
- Клонируйте репозиторий:
git clone https://github.com/mmkolpakov/MIPT_SPC_CryptoTrendReader.git cd CryptoTrendReader
- Откройте проект в Android Studio.
- Убедитесь, что для проекта настроен JDK 21.
compileSdk = 35
,minSdk = 26
.
- Соберите и запустите приложение на Android устройстве или эмуляторе (API 26+).
- 🔑 API-ключи не требуются. Приложение использует публичные данные с тестовой сети Deribit TestNet (
wss://test.deribit.com/ws/api/v2
). (Deribit API Docs)
- 🔑 API-ключи не требуются. Приложение использует публичные данные с тестовой сети Deribit TestNet (
Проект имеет модульную структуру:
app/
├─ src/main/
│ ├─ assets/templates/ # JSON-шаблоны для DivKit UI
│ ├─ java/
│ │ └─ .../cryptotrendreader/
│ │ ├─ core/ # Общие утилиты (RingBuffer, CoilDivImageLoader, IOUtils)
│ │ ├─ data/ # Уровень данных (Репозиторий, DeribitApi, DeribitWs)
│ │ ├─ di/ # Koin-модули для внедрения зависимостей
│ │ ├─ domain/ # Бизнес-логика (UseCase'ы, модели, TrendCalculator)
│ │ └─ ui/ # UI-слой (ViewModel, связка с DivKit)
│ └─ res/ # Ресурсы Android (drawable, layout, values)
└─ build.gradle.kts # Конфигурация сборки модуля приложения
Pull Request'ы приветствуются! Некоторые направления для возможного вклада:
- ✨ Улучшение алгоритмов анализа трендов.
- ⚡ Оптимизация генерации и отображения SVG-графика.
- 🔗 Интеграция с другими тестовыми биржами (OKX, Bybit, Binance Testnet).
- 🎨 Дальнейшее улучшение UI/UX и соответствия Material 3.
- 🧪 Написание Unit и UI тестов.
Перед созданием Pull Request, пожалуйста, убедитесь, что:
- Код отформатирован:
./gradlew ktlintFormat
- Статические анализаторы не находят проблем:
./gradlew detekt
- Все существующие тесты проходят.