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