Cоздание программы для зеркалирования сделок между брокерскими счетами
Основные задачи
Задача 1: Установка защищенного соединения с WebSocket сервером
- Установить защищенное соединение с WebSocket сервером для получения данных о сделках с первого счета.
- Подписаться на необходимые потоки данных (создание/отмена ордеров).
- Реализовать механизм повторного подключения (reconnect) при потере соединения.
- Обеспечить возможность зеркалирования нескольких пар счетов.
Задача 2: Обработка данных об ордерах и сделках
- Реализовать логику обработки данных об ордерах, частично исполненных ордерах и сделках.
- Написать функции для обработки входящих сообщений.
Задача 3: Пропорциональное зеркалирование
- Реализовать логику пропорционального зеркалирования (с учетом коэффициента) для случаев разных размеров счетов.
- Определить условия для зеркалирования сделок* (см. список условий ниже).
Задача 4: Отправка торговых приказов
- Настроить отправку торговых приказов на второй счет.
- Реализовать повторную отправку приказов в случае сбоя или ошибки от сервера.
Задача 5: Обеспечение стабильности программы
- Реализовать механизм мониторинга и автоматического восстановления при сбоях.
- Добавить обработку ошибок при подключении, отправке и получении данных.
- Внедрить логирование всех действий и ошибок.
Задача 6: Создание отчетности
- Разработать отчеты для сравнения эффективности работы программы.
- Включить в отчеты:
- Расхождения цен покупок на исходном и целевом счете.
- Информацию о задержках зеркалирования.
- Статистику по успешным и неуспешным операциям.
Задача 7: Тестирование программы
- Провести тестирование в песочнице:
- Проверить корректность зеркалирования сделок между счетами.
- Обработать случаи с разными балансами и недоступностью инструментов.
- Протестировать надежность WebSocket соединения и механизм повторного подключения.
- Проверить обработку ошибок (прерывания сети, ошибки авторизации).
- Провести стресс-тесты для определения максимального количества пар счетов.
- Интегрировать автоматизированные тесты в CI/CD для проверки изменений в коде.
Задача 8: Логирование и конфигурация
- Добавить логирование всех действий и результатов выполнения программы.
- Реализовать конфигурационные файлы для настройки параметров работы.
- Настроить ротацию и архивирование лог-файлов для предотвращения их неограниченного роста.
Задача 9: Настройка VDS и развертывание
- Настроить виртуальный выделенный сервер (VDS) с учетом требований безопасности:
- Настроить firewall.
- Обеспечить доступ по SSH с использованием ключей.
- Развернуть программу на сервере.
- Настроить автоматический запуск программы при старте сервера.
Дополнительные задачи
- Модульная архитектура: Обеспечить модульную структуру программы для упрощения дальнейшей разработки и добавления новых функций. Разместить все в github.
- Документация: Создать подробную документацию для разработчиков и пользователей.
- Защита данных: Реализовать защиту данных (токены, логины, пароли) с использованием secure storage или шифрования.
* - Условия для зеркалирования сделок
- Баланс счетов: Зеркалирование должно осуществляться только при наличии достаточного баланса на обоих счетах.
- Доступность инструмента: Инструмент, на который выполняется сделка, должен быть доступен на втором счете.
- Права на торговлю: второй счет должен иметь необходимые права для выполнения торговли.
- Типы заказов: Определить, какие типы заказов подлежат зеркалированию (например, рыночные или лимитные).
- Условия рынка: Зеркалирование может быть ограничено определенными часами торговли или условиями рынка.
- Статус заказа: Зеркалировать только исполненные или частично исполненные заказы.
- Управление рисками: Не зеркалировать сделки, превышающие установленный порог потерь.
- Задержки (latency): Приостанавливать зеркалирование при значительной задержке в получении данных.
- Обработка ошибок: Повторять попытку или пропускать зеркалирование при ошибках отправки/получения заказов.
- Пользовательские правила: Разрешить пользователям настраивать условия зеркалирования (например, зеркалировать только сделки выше определенной суммы).