1. Описание задачи
Необходимо разработать Python-скрипт, который генерирует изображения с результатами торговли (PnL), визуально полностью идентичные дизайну приложения Binance Futures (пример во вложении).
Это НЕ наложение текста на готовый шаблон. Изображение должно собираться программно «с нуля» (background, shapes, text), чтобы обеспечивать гибкость верстки при изменении длины данных.
2. Технический стек
Язык: Python 3.9+
Графика: Pillow (PIL)
QR-коды: библиотека qrcode
API & Запросы: ccxt или requests (для получения актуальных цен с Binance)
Шрифты: Использовать семейство шрифтов Proxima Nova (или визуально идентичный аналог), чтобы цифры и кернинг совпадали с оригиналом.
3. Логика работы (Backend Logic)
Скрипт должен работать в режиме калькулятора. На вход подаются параметры сделки, скрипт вычисляет результат.
А. Входные данные: Скрипт принимает JSON/Dict. Обязательные поля: Symbol, Side (Long/Short), Leverage, Entry Price. Поле Last Price — опциональное.
Б. Алгоритм действий:
Получение цены: Если Last Price не передана во входных данных, скрипт должен сделать запрос к публичному API Binance (fapi) и получить текущую цену (markPrice) для указанной пары.
Учет точности (Precision): Скрипт должен учитывать tickSize конкретной пары (например, у BTCUSDT — 2 знака, у PEPEUSDT — 7 знаков). Недопустимо выводить «10.5000000» там, где должно быть «10.50».
Расчет ROE (PnL %):
Для Long: ((Last Price - Entry Price) / Entry Price) * Leverage * 100
Для Short: ((Entry Price - Last Price) / Entry Price) * Leverage * 100
Округление и форматирование: Итоговый процент округляется до 2 знаков.
Если > 0: Цвет текста зеленый (#2EBD85), префикс +.
Если < 0: Цвет текста красный (#F6465D), префикс -.
4. Визуальные требования (Frontend)
Фон: Темный градиент или текстура с геометрическим узором (логотип Binance), отрисованная или взятая в высоком качестве.
Header:
Имя пользователя (динамическое, по дефолту SyntrixBot).
Текущая дата и время (UTC или переданная).
Body:
Торговая пара (напр. OMGUSDT) и тип Perpetual.
Side (Long/Short) — цветные плашки (зеленая/красная).
Leverage (напр. 125x).
Главная цифра (ROE): Крупный шрифт, цвет зависит от знака (+/-).
Цены (Entry / Last) — выравнивание по левому краю.
Footer:
Реферальный код (текст).
QR-код (генерируется динамически на основе переданной ссылки).
Конфигурация: Все цвета (HEX), пути к шрифтам, отступы и размеры шрифтов должны быть вынесены в отдельный файл config.py или константы в начале скрипта для легкой правки.
5. Пример входных данных (JSON)
JSON
{
"user_config": {
"username": "SyntrixBot",
"referral_code": "SyntrixRef",
"qr_link": "https://binance.com/ref/..."
},
"trade_data": {
"symbol": "BTCUSDT",
"type": "Perpetual",
"side": "SHORT",
"leverage": 50,
"entry_price": 65000.50,
"last_price": null
}
}
/* Комментарий: Так как last_price is null, скрипт сам идет на биржу,
берет текущую цену (напр. 63000.00), считает профит для Шорта
и рисует зеленую карточку.
*/
6. Результат работы (Deliverables)
Исходный код (.py), структурированный и с комментариями.
Файл requirements.txt.
Папка assets со шрифтами (Proxima) и необходимыми изображениями (фон, дефолтный аватар).
Функция генерации должна возвращать объект BytesIO (для отправки в Telegram без сохранения на диск) или сохранять файл локально (переключаемый параметр).
7. Критерий приемки
Я передаю скрипту параметры реальной сделки. Полученная картинка при наложении на оригинальный скриншот из Binance должна совпадать по сетке, шрифтам и отступам. Цифры PnL должны быть математически верными.