<p>Техническое задание: Модернизация бота для OKX спот-фьючерс арбитража</p><p><b>1. Название проекта:</b> Разработка и модернизация асинхронного бота для мониторинга и исполнения кэрри-трейда (спот-фьючерс арбитража) на бирже OKX.</p><p><b>2. Исходные материалы:</b></p><p>* Предоставленный код (см. выше) является рабочей основой. Он реализует мониторинг спреда между спот- и фьючерсными ценами в реальном времени с помощью <code>ccxt.pro</code> и отображает информацию через интерфейс <code>rich</code>.</p><p><b>3. Цель задачи:</b> Не просто исправить код, а значительно улучшить его, превратив из инструмента для тестирования идей в полноценного торгового бота с расширенной функциональностью, улучшенной надежностью и управлением рисками.</p><p><b>4. Основные задачи:</b></p><p><b>Задача 1: Рефакторинг и улучшение архитектуры (Обязательно)</b></p><p>* Разделить монолитный код на логические модули (например:</p><p>arbitrage_bot</p><p>??? <a href="http://main.py">main.py</a> # точка входа</p><p>??? <a href="http://exchanges.py">exchanges.py</a> # работа с API биржи OKX</p><p>??? <a href="http://arbitrage.py">arbitrage.py</a> # логика поиска арбитража</p><p>??? <a href="http://trader.py">trader.py</a> # открытие/закрытие сделок</p><p>??? <a href="http://utils.py">utils.py</a> # вспомогательные функции (цвета, форматирование и т.д.)</p><p>??? <a href="http://config.py">config.py</a> # ключи, настройки</p><p>??? <a href="http://ui.py">ui.py</a> # красивый вывод интерфейса</p><p>* Вынести все константы <code>OKX_FEE</code>, <code>ENTRY_SPREAD_THRESHOLD</code> и т.д.) в отдельный файл конфигурации <code>config.py</code>).</p><p>* Добавить подробное логирование всех критических действий (подключение, отключение, ошибки, вход в сделку, выход из сделки) в файл и в консоль с разными уровнями <code>DEBUG</code>, <code>INFO</code>, <code>ERROR</code>).</p><p><b>Задача 2: Реализация механизма исполнения сделок (Обязательно)</b></p><p>* <b>Текущий код только симулирует PnL.</b> Необходимо интегрировать реальные вызовы API OKX для создания ордеров.</p><p>* Добавить модуль <code>okx_trader.py</code> с функциями:</p><p>* <code>create_order(symbol, market, side, amount</code>: Размещение рыночного ордерa.</p><p>* <code>get_balance(currency)</code>: Получение актуального баланса по валюте.</p><p>* <code>get_open_orders(symbol)</code>: Проверка активных ордеров.</p><p>* <code>cancel_order(symbol, order_id)</code>: Отмена ордера.</p><p>* <b>Логика входа в сделку:</b> При достижении <code>ENTRY_SPREAD_THRESHOLD</code> бот должен выставлять <b>пару ордеров</b>:</p><p>1. Лимитный ордер на покупку спота <code>BTC/USDT</code>).</p><p>2. Лимитный ордер на продажу фьючерса <code>BTC-USDT-SWAP</code>).</p><p>* <b>Логика выхода из сделки:</b> При достижении <code>EXIT_SPREAD_THRESHOLD</code> бот должен выставить ордера на закрытие позиции (продать спот, купить фьючерс).</p><p><b>Задача 3: Внедрение системы управления рисками (Обязательно)</b></p><ul><li><p> Реализовать механизм "проверки связи" (heartbeat) для WebSocket. При длительном отсутствии обновлений перезапускать подключение и перепроверять актуальность всех открытых позиций.</p></li></ul><ul><li><p>Проверка наличия ордеров на бирже при запуске, "подтягивание" уже существующих ордеров на бирже</p></li><li><p>При закрытии бота автоматическое закрытие всех ордеров / ожидание закрытия сделок и закрытие после этого</p></li></ul><p><b>Задача 4: Улучшение пользовательского интерфейса и отчетности</b></p><p>* Реализовать вывод итоговой статистики за сессию: количество сделок, Win Rate, общий PnL, макс. просадка.</p><p>* Добавить интерактивные элементы управления (например, "Пауза", "Экстренная остановка и закрытие всех позиций" с помощью горячих клавиш, "Подождать закрытия сделок и после этого закрыть бота").</p><p><b>Задача 5: Дополнительные улучшения (Опционально, по согласованию)</b></p><p>* <b>Бэктестинг:</b> Создать скрипт для тестирования стратегии на исторических данных.</p><p>* <b>Уведомления:</b> Интеграция с Telegram Bot API для отправки оповещений о входе/выходе из сделок и критических ошибках.</p><p>* <b>Динамическое управление размером позиции:</b> Размер позиции должен вычисляться от текущего общего баланса, а не от начального.</p><p>* <b>Мультибиржевой арбитраж:</b> Добавить поддержку других бирж (например, Binance, Bybit) для межбиржевого арбитража.</p><p><b>5. Требования к технологии:</b></p><p>* <b>Язык:</b> Python 3.10+</p><p>* <b>Библиотеки:</b> <code>ccxt.pro</code>, <code>rich</code>, <code>aiohttp</code>, <code>asyncio</code>, <code>pydantic</code> (для валидации конфигурации).</p><p>* <b>Стиль кода:</b> Код должен соответствовать PEP8. Использовать аннотации типов (type hints). Настроить <code>black</code> и <code>isort</code> для автоматического форматирования.</p><p><b>6. Критерии приемки:</b></p><p>1. <b>Работоспособность:</b> Бот запускается без ошибок, успешно подключается к OKX и подписывается на тикеры, и выполнять описанный в ТЗ алгоритм.</p><p>2. <b>Исполнение ордеров:</b> Бот может размещать и отменять реальные ордера на тестовой сети OKX (Demo Trading), а также уметь переключаться на реальное API и работать "в боевом режиме" с реальными деньгами на реальной среде).</p><p>3. <b>Управление рисками:</b> Oбработка ошибок/задержек API.</p><p>4. <b>Логирование:</b> Все ключевые события записываются в файл лога.</p><p>5. <b>Кодкачество:</b> Код хорошо структурирован, прокомментирован и готов к дальнейшему развитию.</p><p><b>7. Что предоставить по завершению:</b></p><p>1. Исходный код в репозитории Git (GitHub/GitLab).</p><p>2. <code>README.md</code> с инструкцией по установке зависимостей, настройке и запуску.</p><p>3. <code>requirements.txt</code> или <code>pyproject.toml</code> со всеми зависимостями.</p><p>4. Пример файла конфигурации <code>.env.example</code> или <code>config.example.toml</code>).</p><p>5. Краткий отчет о проведенной работе и тестировании.</p><p>---</p><p><b>Примечание для фрилансера:</b> Пожалуйста, ознакомьтесь с исходным кодом и предоставьте оценку по времени и стоимости выполнения как обязательных, так и опциональных задач. Ваше предложение по архитектурным решениям приветствуется.</p>