1. Опис завдання
Необхідно розробити Python-скрипт, який генерує зображення з результатами торгівлі (PnL), візуально повністю ідентичні дизайну додатку Binance Futures (приклад у вкладенні).
Це НЕ накладення тексту на готовий шаблон. Зображення повинно збиратися програмно «з нуля» (фон, фігури, текст), щоб забезпечити гнучкість верстки при зміні довжини даних.
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 повинні бути математично вірними.