Реализация запуска/остановки торговых стратегий через мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация запуска/остановки торговых стратегий через мобильное приложение
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация запуска/остановки торговых стратегий через мобильное приложение

Кажется, что запуск/остановка бота — это одна кнопка. На самом деле это sequence of actions с подтверждениями, проверками состояния и обработкой edge cases. Нажать «Стоп», пока есть открытые позиции, — и что должно произойти? Закрыть позиции? Дождаться естественного закрытия? Просто остановить новые ордера?

Состояния бота и переходы

Торговый бот — это FSM. Минимальный набор состояний:

  • STOPPED — бот не работает, позиций нет
  • STARTING — идёт инициализация (подключение к бирже, загрузка состояния)
  • RUNNING — активно торгует
  • STOPPING — получил команду стоп, дожидается закрытия текущего цикла
  • ERROR — ошибка (неверный API-ключ, недостаточно средств, биржа недоступна)

Мобильный UI должен отражать каждое состояние и блокировать несовместимые действия:

// iOS, SwiftUI
struct BotControlView: View {
    @ObservedObject var viewModel: BotControlViewModel

    var body: some View {
        VStack(spacing: 16) {
            StatusBadge(status: viewModel.bot.status)

            switch viewModel.bot.status {
            case .stopped:
                Button("Запустить") { viewModel.start() }
                    .buttonStyle(.primary)
            case .running:
                Button("Остановить") { viewModel.showStopDialog = true }
                    .buttonStyle(.destructive)
            case .starting, .stopping:
                HStack {
                    ProgressView()
                    Text(viewModel.bot.status == .starting ? "Запуск..." : "Останавливаем...")
                }
                .foregroundColor(.secondary)
            case .error(let message):
                VStack {
                    Label(message, systemImage: "exclamationmark.triangle")
                        .foregroundColor(.red)
                    Button("Перезапустить") { viewModel.start() }
                }
            }
        }
        .confirmationDialog("Остановить бота?", isPresented: $viewModel.showStopDialog) {
            Button("Остановить и закрыть позиции", role: .destructive) {
                viewModel.stop(closePositions: true)
            }
            Button("Остановить без закрытия") {
                viewModel.stop(closePositions: false)
            }
            Button("Отмена", role: .cancel) {}
        }
    }
}

confirmationDialog на iOS — нативный action sheet. Пользователь явно выбирает поведение при остановке.

Оптимистичный vs. реальный статус

Когда пользователь нажал «Запустить», кнопка должна сразу перейти в STARTING, не ждать ответа сервера. Но настоящий статус приходит с сервера. Два источника истины конфликтуют.

Решение: оптимистично ставим локальный pendingStatus, одновременно отправляем запрос. При ответе сервера — заменяем локальный статус серверным. Если запрос упал — откатываем локальный статус и показываем ошибку.

// Android, ViewModel
fun start() {
    _uiState.update { it.copy(localStatus = BotStatus.STARTING) }
    viewModelScope.launch {
        runCatching { repository.startBot(botId) }
            .onSuccess { serverBot -> _uiState.update { it.copy(bot = serverBot, localStatus = null) } }
            .onFailure { err ->
                _uiState.update { it.copy(localStatus = null, error = err.message) }
            }
    }
}

Мультистратегийный бот

Если бот поддерживает несколько стратегий, запуск/стоп — отдельно для каждой. Список стратегий с индивидуальными toggle-переключателями и агрегированным статусом бота сверху. Toggle для конкретной стратегии отправляет PATCH /bots/{id}/strategies/{strategyId} с {active: true/false}.

Важно: изменение активности стратегии и остановка бота — разные операции. Деактивация стратегии убирает её из торговли, но бот продолжает работать с оставшимися.

Push-уведомления о смене статуса

При переходе бота в ERROR или при автоматической остановке (например, достигнут дневной лимит убытков) — push через FCM/APNs. Пользователь должен узнать, не открывая приложение.

На бэкенде: после каждого изменения статуса публикуется событие в очередь, воркер отправляет push. Мобильное приложение регистрирует FCM token при логине и обновляет при каждом запуске приложения.

Что входит в работу

  • Компонент управления ботом с отображением всех статусов
  • Confirmation dialog с выбором режима остановки
  • Оптимистичное обновление статуса
  • Управление отдельными стратегиями (если применимо)
  • Push-уведомления при автоматических изменениях статуса

Сроки

3–5 рабочих дней в зависимости от числа стратегий и сложности FSM. Стоимость рассчитывается индивидуально после анализа требований.