DCA-бот (Dollar Cost Averaging) в мобільному додатку
DCA-бот купує актив через рівні інтервали на фіксовану суму: кожного понеділка о 10:00 — $50 в BTC, незалежно від ціни. Стратегія проста, але мобільний інтерфейс для управління нею вимагає точної роботи з графіками, історією покупок та поточною позицією.
Налаштування DCA-стратегії
Користувач задає кілька параметрів:
- Актив та біржа — BTC/USDT на Binance
- Сума ордера — $50 за раз
- Інтервал — кожні 7 днів / кожні 24 години / кожні N годин
- Перша покупка — негайно або за розкладом
- Ліміт середньої ціни (опціонально) — не купувати, якщо ціна вище $X
Інтервал зручно задавати через picker з попередніми варіантами (1г / 4г / 12г / 24г / 7д / 30д) плюс можливість користувальницького значення. На backend це перетворюється на cron-вираз або scheduled job з execute_at.
// Flutter — вибір інтервалу
enum DcaInterval {
oneHour('1г', Duration(hours: 1)),
fourHours('4г', Duration(hours: 4)),
oneDay('24г', Duration(hours: 24)),
oneWeek('7д', Duration(days: 7));
const DcaInterval(this.label, this.duration);
final String label;
final Duration duration;
}
// Segment control або ChoiceChip
Wrap(
spacing: 8,
children: DcaInterval.values.map((interval) => ChoiceChip(
label: Text(interval.label),
selected: selectedInterval == interval,
onSelected: (_) => setState(() => selectedInterval = interval),
)).toList(),
)
Поточна позиція та статистика
Основний екран DCA-бота показує, як накопичується позиція:
- Середня ціна входу — зважена середня по всіх покупках
- Поточна ціна — актуальна, з біржі або price API
- Unrealized PnL — різниця між поточною ціною та середньою ціною входу, помножена на обсяг
- Наступна покупка — countdown до наступного виконання
Середня ціна входу розраховується на backend та зберігається в моделі бота. Не довіряйте клієнту розраховувати її самостійно — розбіжності через комісії, часткові виконання та округлення.
Історія покупок
Список усіх виконаних ордерів: дата, ціна виконання, кількість активу, сума в USD. Візуально корисно накласти точки покупок на цінову діаграму активу — користувач бачить, що частина покупок припала на локальні мінімуми. Саме це демонструє суть DCA.
На Flutter: fl_chart LineChart з ціною BTC як лінією та кастомними FlSpot маркерами для кожної DCA-покупки.
LineChartBarData(
spots: priceHistory.map((p) => FlSpot(p.timestamp.toDouble(), p.price)).toList(),
isCurved: true,
color: Colors.blue,
dotData: FlDotData(
show: true,
checkToShowDot: (spot, barData) => dcaPurchaseDates.contains(spot.x),
getDotPainter: (spot, percent, barData, index) => FlDotCirclePainter(
radius: 5,
color: Colors.green,
),
),
)
Умови зупинення
DCA-бот не працює вічно — потрібні умови зупинення:
- Досягнуто максимальну кількість покупок (наприклад, 52 покупки = рік щотижневого DCA)
- Накопичено максимальну кількість активу
- Досягнутий target PnL (наприклад, +30% по позиції — зафіксувати)
Ці умови задаються в налаштуваннях та відображаються як «прогрес до цілі»: 12 з 52 покупок, 0.18 з 0.5 BTC накопичено.
Що входить до роботи
- Форма створення DCA-стратегії з вибором інтервалу та умов зупинення
- Дашборд: середня ціна входу, поточний PnL, countdown до наступної покупки
- Графік ціни з позначеними точками покупок
- Історія ордерів з пагінацією
- Push при кожному виконанні ордера
Терміни
4–6 робочих днів. Вартість розраховується індивідуально після аналізу вимог.







