Требуется разработка production-ready модуля отправки заявок для арбитражного торгового робота на Московской бирже (MOEX) через API российских брокеров (Финам, Алор).
КОНТЕКСТ:
Ранее был сбой в модуле отправки заявок, который привел к дублированию заявок и финансовым убыткам. Необходимо создать надежный модуль с максимальной защитой от подобных ситуаций.
ОСНОВНЫЕ ТРЕБОВАНИЯ:
1. Поддержка типов заявок на MOEX:
Рыночные заявки (немедленное исполнение по лучшей цене)
Лимитные заявки (исполнение по указанной цене или лучше)
Стоп-заявки (стоп-лосс, тейк-профит)
Агрессивные лимитные заявки с автоматическим движением цены ближе к рынку
Гибридные стратегии (лимитная с таймаутом и переключением на рыночную)
Условные заявки (выполняемые при достижении указанных условий)
2. Критически важная защита:
Защита от дублирования заявок (проверка активных перед отправкой)
Идемпотентность операций (уникальные ID)
Блокировка параллельных запросов
Управление состоянием заявок (отслеживание всех статусов)
Синхронизация с биржей для выявления расхождений
Обработка частичного исполнения
3. Валидация:
Проверка баланса и достаточности средств на счете брокера
Проверка лимитов MOEX (минимальные/максимальные объемы, шаг цены)
Проверка актуальности цены для лимитных заявок
Проверка доступности торговли по инструменту (режим торгов, статус инструмента)
Проверка лимитов брокера на количество заявок
4. Обработка ошибок:
Классификация (временные vs постоянные)
Умные повторы только для временных ошибок
Детальное логирование
5. Стратегии быстрого исполнения (критично для арбитража):
Агрессивные лимитные заявки на лучшей цене с авто-движением
Гибридная стратегия с таймаутом
Адаптивный выбор типа заявки
Защита от race conditions
6. Работа с API брокеров:
Интеграция с ALOR OpenAPI (REST и WebSocket)
Интеграция с API брокера Финам
Обработка таймаутов и неопределенных состояний
Соблюдение rate limits API брокеров
Обработка реконнектов при разрыве соединения
WebSocket для real-time данных стакана и обновлений заявок
Работа с MOEX ISS API для получения биржевых данных
7. Восстановление после сбоя:
Сохранение и восстановление состояния
Сверка с биржей при старте
Обработка "висящих" заявок
ТРЕБУЕМЫЕ НАВЫКИ:
Обязательно:
- Python (asyncio для асинхронной работы)
- Опыт работы с API Московской биржи (MOEX)
- Опыт работы с ALOR OpenAPI (REST и WebSocket интерфейсы)
- Опыт работы с API брокера Финам
- Понимание структуры и механизмов работы MOEX (типы заявок, режимы торгов, стакан)
- WebSocket для real-time данных стакана и обновлений заявок
- Redis для блокировок и управления состоянием
- Понимание паттернов: State Machine, Lock-based Concurrency, Idempotency
- Обработка race conditions и многопоточности
- Понимание работы биржевых заявок на MOEX (рыночные, лимитные, стоп-заявки)
Желательно:
- Опыт работы с библиотеками для алготрейдинга (StockSharp, TSLab)
- SQLAlchemy для хранения состояния заявок
- Опыт разработки торговых роботов для MOEX
- Знание MOEX ISS API для получения биржевых данных
- Понимание принципов риск-менеджмента в арбитражной торговле
КРИТИЧНО:
Модуль должен быть максимально надежным ошибки приводят к убыткам:
- Недопустимо дублирование заявок
- Недопустимо отправлять без проверки баланса
- Недопустимо терять состояние при сбоях
- Обязательна защита от race conditions
- Обязательна проверка статуса перед операциями
РЕЗУЛЬТАТ:
- Рабочий модуль с полным функционалом
- Документация
- Примеры интеграции
- Тесты критичных сценариев
Будет предоставлен детальный технический документ с требованиями. Возможность долгосрочного сотрудничества.
ВАЖНО:
- Работа будет вестись с тестовыми средами брокеров (песочница) перед запуском на реальных счетах
- Необходимо понимание специфики работы MOEX и особенностей API российских брокеров
- Приветствуется опыт работы с торговыми роботами на российском фондовом рынке
РЕСУРСЫ ДЛЯ ИЗУЧЕНИЯ:
- ALOR OpenAPI:
- Документация API брокера Финам
- MOEX ISS API документация