Представь: я создал торгового бота. В первый же день он заработал мне целых 11 долларов на двух сделках. Винрейт 100%!
Ого, 100%? Звучит как начало истории успеха. Хотя на двух сделках это, конечно, скорее удача.
Именно! Довольный собой, я решил внести крошечное улучшение в код и перезапустил сервис. Что могло пойти не так?
Классика. «Просто поправлю одну строчку». Обычно после этого всё и начинается.
Возвращаюсь через час, чтобы полюбоваться на свою прибыль, а на дашборде... нули. Абсолютно везде. Статистика девственно чиста.
Твои 11 долларов испарились? Как будто и не было никакой победы?
Именно! Я в панике полез в базу данных. И что ты думаешь? Сделки на месте, прибыль $11.53 записана.
Подожди. То есть данные были, но бот их просто не видел? Он как будто... забыл о них?
Точно! И тут до меня дошло. Это классическая проблема разницы между хранилищем (базой данных) и оперативной памятью.
А, то есть история сделок жила только в оперативной памяти, и при перезапуске просто стиралась?
Да. База данных всё помнит, как вечный архив. А переменная в коде — это как записка на стикере, которая улетает при первом сквозняке.
Проблема была в том, что я забыл дописать логику, которая при старте загружает историю закрытых сделок из базы обратно в память.
И сколько времени занял фикс этой «катастрофы»?
15 минут и 30 строчек кода. Самые важные 30 строчек, как оказалось.
Для личного проекта это забавно. Но представь, что инвестор в коммерческом сервисе видит, что вся его история успеха обнулилась.
Он не будет разбираться в базах данных. Он просто решит, что сервис сломан, и уйдёт навсегда. Доверие потеряно.
Из этой истории я вынес несколько правил. Во-первых, всё важное нужно немедленно писать в постоянное хранилище, например, в базу данных.
Во-вторых, при каждом запуске нужно восстанавливать это состояние из хранилища.
И в-третьих, нужно специально «убивать» свой сервис и проверять, что после перезапуска всё на месте.
Проще говоря: всегда исходи из того, что твой бот может внезапно всё забыть, и подстели соломки.