Налаштування торгового бота в мобільному застосунку
Торговий бот працює на сервері, мобільний застосунок — його панель управління. Користувач приходить не програмувати бота, а налаштовувати: виставити тейк-профіт, стоп-лос, розмір позиції, обрати пари. Помилка в одному полі (наприклад, плече 100x замість 10x) може призвести до непередбачених ордерів. Інтерфейс має бути передбачуваним — невірні значення не повинні йти на сервер. Ми розробляємо такі екрани під ключ з 7+ років досвіду у фінансових мобільних застосунках (понад 50 проєктів). Гарантуємо відповідність App Store Review Guidelines і політикам Google Play.
Як правильно валідувати числові параметри?
Параметри торгового бота поділяються на кілька груп. Числові з обмеженнями: тейк-профіт у відсотках (0.1–50%), розмір ордера в USDT (мінімум диктує біржа), плече для ф'ючерсів (1x–125x). Для таких параметрів використовуємо TextField з валідацією на льоту плюс слайдер для швидкого вибору поширених значень. Слайдер у 3 рази прискорює налаштування типових значень порівняно з полем введення.
Переліки: тип ордера (limit/market/stop), напрямок (long/short/both), таймфрейм для сигналу. Тут — Picker / DropdownMenu / сегментовані кнопки. Торгові пари: користувач обирає зі списку доступних пар на біржі. Список підвантажується через API біржі, кешується та підтримує пошук. Реалізація на Flutter з використанням StateNotifier для керування станом.
// Flutter — форма параметрів з валідацією
class BotSettingsForm extends ConsumerStatefulWidget {
...
}
class _BotSettingsFormState extends ConsumerState<BotSettingsForm> {
final _formKey = GlobalKey<FormState>();
late TextEditingController _takeProfitController;
late TextEditingController _stopLossController;
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(
children: [
TextFormField(
controller: _takeProfitController,
keyboardType: const TextInputType.numberWithOptions(decimal: true),
inputFormatters: [FilteringTextInputFormatter.allow(RegExp(r'^\d+\.?\d{0,2}'))],
validator: (value) {
final v = double.tryParse(value ?? '');
if (v == null || v < 0.1 || v > 50) return 'Допустимо: 0.1 – 50%';
return null;
},
decoration: const InputDecoration(
labelText: 'Тейк-профіт (%)',
suffixText: '%',
),
),
// ... інші поля
ElevatedButton(
onPressed: _submit,
child: const Text('Зберегти'),
),
],
),
);
}
void _submit() {
if (!_formKey.currentState!.validate()) return;
final params = BotParams(
takeProfit: double.parse(_takeProfitController.text),
stopLoss: double.parse(_stopLossController.text),
);
ref.read(botSettingsProvider.notifier).save(params);
}
} Як захистити бота від випадкових змін?
Зміна параметрів працюючого бота — небезпечна операція. Якщо бот тримає відкриті позиції, зміна стоп-лосу або розміру ордера може викликати непередбачені ордери. Тому перед відправкою — підтвердження з показом diff: «Тейк-профіт: 2% → 3.5%». Додатково: деякі параметри можна змінювати тільки при зупиненому боті (наприклад, торгові пари або тип стратегії). Такі поля блокуються в UI, якщо bot.status == RUNNING, з поясненням «Зупиніть бота для зміни».
Чому pessimistic update, а не optimistic?
Для операцій з налаштуваннями використовуємо pessimistic update: спочатку запит на сервер, при успіху — оновлюємо UI. Не оптимістично, тому що якщо бот відхилив параметри (наприклад, мінімальний ордер на біржі — $10, а користувач ввів $5), потрібно одразу показати помилку з сервера, а не відкатувати. На Riverpod (Flutter) паттерн через AsyncNotifier:
class BotSettingsNotifier extends AsyncNotifier<BotSettings> {
@override
Future<BotSettings> build() => ref.read(botRepositoryProvider).getSettings(botId);
Future<void> save(BotParams params) async {
state = const AsyncLoading();
state = await AsyncValue.guard(
() => ref.read(botRepositoryProvider).updateSettings(botId, params),
);
}
} Які типові помилки виникають при налаштуванні?
Початківці часто забувають про мінімальний крок зміни для деяких бірж (наприклад, тейк-профіт з кроком 0.1%). Або вводять плече, що перевищує допустиме для обраної торгової пари. Щоб цього уникнути, ми додаємо динамічні підказки під полями: вони показують поточний ліміт при введенні значення за межами норми. Також використовується debounce для запиту валідації на сервері, щоб не перевантажувати API.
Як зберегти налаштування? Покрокова інструкція
- Заповніть форму: введіть числові параметри (тейк-профіт, стоп-лос, розмір ордера). Валідація спрацьовує при введенні.
- Виберіть торгові пари з пошукового списку.
- Перевірте diff в діалозі підтвердження: червоним старі значення, зеленим нові.
- Натисніть «Зберегти». Якщо бот активний, небезпечні поля заблоковані — спочатку зупиніть бота.
- Після успішної відповіді сервера — оновлення UI. У разі помилки — повідомлення сервера.
Порівняння optimistic vs pessimistic update
| Критерій | Optimistic | Pessimistic |
|---|---|---|
| Швидкість UI | Миттєво | Після відповіді |
| Ризик розсинхрону | Високий | Нульовий |
| Підходить для | Чати, лайки | Фінансові операції |
| Обробка помилок | Відкат стану | Показ помилки сервера |
Pessimistic update надійніший для торгових ботів: запобігає помилковим ордерам.
Що входить в роботу
| Компонент | Опис |
|---|---|
| Форма налаштувань | Валідація всіх числових полів (min/max, precision) |
| Вибір торгових пар | Пошук, підвантаження з API біржі, кешування |
| Блокування небезпечних полів | При активному боті поля блокуються з поясненням |
| Confirmation dialog | Показує diff змін перед відправкою |
| Чернетка | Збереження в SharedPreferences / UserDefaults |
Строки розробки
Орієнтовно 4–6 робочих днів залежно від кількості параметрів і складності валідаційних правил. Вартість розраховується індивідуально після аналізу вимог. Щоб отримати точну оцінку, напишіть нам — ми проаналізуємо вашу специфікацію і запропонуємо рішення.
Чому обирають нас
Ми — команда мобільних розробників з 7+ років досвіду у фінансових застосунках. Налагоджений процес code review та тестування. Всі рішення відповідають App Store Review Guidelines та політикам Google Play. Оцінимо ваш проєкт і дамо рекомендації. Зв'яжіться з нами, щоб обговорити ваш проєкт. Отримайте консультацію з налаштування UI для торгового бота. Замовте розробку екрана налаштувань вже сьогодні.







