Files
mirror_bot_tinv/README.md
T

156 lines
7.7 KiB
Markdown

# Mirror Bot Tinkoff Investments 🤖💰
Зеркальный торговый бот для платформы Тинькофф Инвестиции, который автоматически копирует сделки с мастер-счёта на слейв-счёт с настраиваемым коэффициентом.
## Описание
Бот отслеживает торговые операции на мастер-счёте и автоматически повторяет их на слейв-счёте с заданным коэффициентом. Это позволяет создавать стратегию копирования сделок или управления несколькими счетами одновременно.
### Основные возможности
- 🔄 **Автоматическое копирование сделок** с мастер-счёта на слейв-счёт
- 📊 **Настраиваемый коэффициент** копирования (можно торговать меньшими или большими объёмами)
- 🔍 **Два режима работы**: стриминг (real-time) и polling (fallback)
- ⚖️ **Автоматическая ребалансировка** портфеля слейв-счёта под мастер-счёт
- 🛡️ **Фильтрация инструментов** через белые/чёрные списки FIGI
- 🧪 **DRY-RUN режим** для тестирования без реальных ордеров
- 💾 **Сохранение состояния** для идемпотентности операций
- 🚫 **Исключение валютных позиций** (RUB, USD, EUR)
## Установка
### Требования
- Python 3.8+
- Токены Тинькофф Инвестиции для обоих счетов
### Установка зависимостей
> Рекомендуется использование виртуального окружения Python.
```bash
pip install -r requirements.txt
```
### Настройка окружения
1. Скопируйте файл `.env.example` в `.env`:
```bash
cp .env.example .env
```
2. Заполните переменные окружения в файле `.env`:
## Использование
### Запуск бота
```bash
python main.py
```
### Получение токенов
1. Перейдите в [Тинькофф Инвестиции](https://www.tinkoff.ru/invest/)
2. Откройте настройки API
3. Создайте токены с необходимыми правами:
- **Мастер-токен**: чтение операций и портфеля
- **Слейв-токен**: выставление ордеров + чтение портфеля
### ID счетов
ID счетов можно получить через API или в личном кабинете Тинькофф Инвестиции.
## Конфигурация
### Параметры
| Параметр | Описание | Значение по умолчанию |
|----------|----------|----------------------|
| `COEFF` | Коэффициент копирования сделок | 1.0 |
| `DRY_RUN` | Тестовый режим без реальных ордеров | false |
| `POLL_INTERVAL_SEC` | Интервал polling-режима | 10 |
| `ALLOW_FIGI` | Белый список FIGI (через запятую) | пусто |
| `DENY_FIGI` | Чёрный список FIGI (через запятую) | пусто |
| `MIN_LOTS` | Минимальное количество лотов | 1 |
| `MAX_LOTS_PER_ORDER` | Максимальное количество лотов в ордере | 1000 |
### Примеры коэффициентов
- `COEFF=0.5` - слейв-счёт торгует вдвое меньшими объёмами
- `COEFF=1.0` - слейв-счёт повторяет объёмы мастер-счёта
- `COEFF=2.0` - слейв-счёт торгует вдвое большими объёмами
## Принцип работы
### Режимы работы
1. **Streaming (основной)**: Использует WebSocket-стрим для получения сделок в реальном времени
2. **Polling (fallback)**: При сбое стрима переключается на периодический опрос операций
### Алгоритм
1. При запуске выполняется ребалансировка портфеля слейв-счёта
2. Бот подключается к потоку сделок мастер-счёта
3. При появлении новой сделки:
- Проверяется фильтр FIGI
- Вычисляется объём для слейв-счёта (мастер_объём × коэффициент)
- Выставляется рыночный ордер на слейв-счёте
4. Периодически выполняется ребалансировка (каждые 2 минуты)
### Безопасность
- Валютные позиции (RUB, USD, EUR) автоматически исключаются
- Сохранение состояния предотвращает дублирование ордеров
- DRY-RUN режим для безопасного тестирования
- Лимиты на минимальные и максимальные объёмы
## Логирование
Бот выводит подробную информацию о своей работе:
- `[STREAM]` - события стрим-режима
- `[POLL]` - события polling-режима
- `[REBALANCE]` - операции ребалансировки
- `[REB]` - конкретные ордера ребалансировки
Пример лога:
```
Mirror bot starting… DRY_RUN= True COEFF= 1.0
[REBALANCE] start
[STREAM] connect… Dry-run: True
[STREAM] SBER BBG004730N88: ORDER_DIRECTION_BUY master=10 -> slave=10
-> SLAVE ORDER_DIRECTION_BUY 10 lot(s) BBG004730N88 (order_id=...)
```
## Устранение неполадок
### Частые ошибки
1. **"Заполните .env"** - проверьте заполнение всех обязательных переменных
2. **RequestError при ордерах** - проверьте права токена и баланс счёта
3. **Ошибки подключения** - проверьте интернет-соединение и валидность токенов
### Файл состояния
Файл `mirror_state.json` содержит:
- Время последней обработки операций
- Список ID обработанных операций (для предотвращения дублей)
При проблемах можно удалить этот файл для сброса состояния.
## Безопасность и ответственность
⚠️ **ВАЖНО**:
- Этот бот выполняет реальные торговые операции с вашими деньгами
- Тщательно протестируйте настройки в DRY-RUN режиме
- Автор не несёт ответственности за торговые потери
- Используйте на свой страх и риск
## Лицензия
MIT License - используйте и изменяйте свободно.
**Disclaimer**: Данное ПО предназначено только для образовательных целей. Автоматическая торговля связана с высокими рисками. Тщательно изучите все настройки перед использованием в продакшене.