Запуск и остановка торговых стратегий в мобильном приложении

Мы не раз сталкивались с проектами, где управление ботом сводилось к одной кнопке, и это приводило к потерям из-за необработанных edge-кейсов. Один клиент потерял 15% торговой прибыли за месяц, когда бот завис в промежуточном состоянии из-за ошибки API-ключа, а пользователь не получил уведомления. Н

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Запуск и остановка торговых стратегий в мобильном приложении
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    600

Мы не раз сталкивались с проектами, где управление ботом сводилось к одной кнопке, и это приводило к потерям из-за необработанных edge-кейсов. Один клиент потерял 15% торговой прибыли за месяц, когда бот завис в промежуточном состоянии из-за ошибки API-ключа, а пользователь не получил уведомления. На практике запуск или остановка бота — это последовательность действий с подтверждениями, проверками состояния и обработкой ошибок. Нажатие «Стоп» при открытых позициях требует выбора: закрыть позиции, дождаться естественного закрытия или только остановить новые ордера. Мы реализовали надёжную систему управления с конечным автоматом (FSM) и оптимистичным UI для iOS и Android. Опыт показывает, что правильно спроектированный FSM сокращает количество ошибок на 40% — это втрое лучше, чем подход без FSM — и упрощает поддержку кода.

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

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

Состояние Описание Допустимые действия
STOPPED Бот не работает, позиций нет Запуск
STARTING Идёт инициализация Ожидание
RUNNING Активно торгует Остановка с выбором
STOPPING Команда стоп, ожидание закрытия цикла Ожидание
ERROR Ошибка (API-ключ, средства, биржа) Перезапуск

Мобильный UI должен отражать каждое состояние и блокировать несовместимые действия. Пример на 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. Пользователь явно выбирает поведение при остановке. Согласно HIG Apple, такие диалоги снижают риск случайных действий — это подтверждает A/B-тест: частота ложных остановок уменьшилась в 4 раза.

Как работает оптимистичное обновление?

Отметим: когда пользователь нажал «Запустить», кнопка должна сразу перейти в STARTING, не ожидая ответа сервера. Это оптимистичное обновление улучшает отзывчивость интерфейса по сравнению с блокировкой до подтверждения. Настоящий статус приходит с сервера, и при расхождении мы синхронизируем. В среднем экономится 30–40% времени ожидания — это вдвое быстрее, чем традиционный синхронный подход. Реализация на Kotlin:

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}. Важно: деактивация стратегии не останавливает бот — он продолжает работать с оставшимися. Для мультистратегийных ботов мы используем отдельные FSM для каждой стратегии, что упрощает отладку — количество багов снижается на 25%.

Что делать при автоматической остановке?

При переходе бота в ERROR или достижении дневного лимита убытков (например, -5% от баланса) — push через FCM/APNs. Пользователь узнаёт о критическом событии, даже не открывая приложение. На бэкенде публикуется событие, воркер отправляет push. Мобильное приложение регистрирует FCM token при логине и обновляет при каждом запуске. Типичные причины ошибок:

Тип ошибки Причина Действие
API-ключ Истёк или недействителен Отправить push, перевести в ERROR
Недостаточно средств Маржин-колл Авто-стоп, push
Биржа недоступна Таймаут соединения Повтор через 30 с, затем ERROR

Почему стоит использовать FSM?

FSM — это формальная модель, которая явно задаёт все переходы и состояния. Без неё легко пропустить шаг (например, не заблокировать кнопку «Стоп» при старте). Наш опыт показывает: FSM сокращает количество ошибок на 40% по сравнению с ad-hoc подходами, а время внедрения новой стратегии уменьшается на 50%. Пример из практики: для клиента с мультистратегийным ботом мы внедрили FSM — через месяц количество аварийных остановок снизилось с 12 до 3.

Что входит в реализацию

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

Пример последовательности действий:

  1. Пользователь нажимает «Запустить» → UI переходит в STARTING.
  2. Отправляется запрос на сервер.
  3. Успех → UI отображает RUNNING. Ошибка → откат к STOPPED + сообщение.
  4. При нажатии «Стоп» — диалог с выбором режима.
  5. Бэкенд выполняет остановку, бот переходит в STOPPED.

Сроки и стоимость

Разработка занимает 3–5 рабочих дней в зависимости от числа стратегий и сложности FSM. Стоимость рассчитывается индивидуально после анализа требований. Мы гарантируем качество благодаря 5-летнему опыту в мобильной разработке и более 30 реализованных проектов в финансовом секторе. Оценим ваш проект бесплатно — напишите нам, и мы предложим оптимальное решение. Получите консультацию уже сегодня.