Автоматизированный крипто-бот для paper trading на основе Swing Trend стратегии
Phase 0: 2-недельный paper trading для валидации стратегии без реальных денег.
- ✅ Стратегия: Swing Trend Baseline (EMA 9/21 + RSI 14 + Breakout)
- ✅ Биржа: Binance Testnet (paper trading)
- ✅ Капитал: $500 (виртуальный)
- ✅ Риск: 2% на сделку
- ✅ Таймфрейм: 1h
- ✅ Управление: Telegram бот
- ✅ База данных: PostgreSQL + TimescaleDB
- Backend: Python 3.11 + FastAPI
- Database: PostgreSQL 15 + TimescaleDB
- Cache: Redis 7
- Bot: python-telegram-bot
- Exchange: ccxt (Binance integration)
- Indicators: TA-Lib
- Deployment: Docker Compose
- OS: Windows 10/11, Linux, macOS
- RAM: минимум 4GB (рекомендуется 8GB)
- Disk: минимум 5GB свободного места
- Internet: стабильное подключение
-
Docker Desktop (обязательно)
- Windows/Mac: https://www.docker.com/products/docker-desktop
- Linux:
sudo apt install docker.io docker-compose
-
Git (опционально, для клонирования)
-
Текстовый редактор (VS Code рекомендуется)
# Скачайте и установите с официального сайта
# Убедитесь, что Docker запущен
docker --version
docker-compose --version# Если клонируете из Git:
git clone <your-repo-url> trading-bot
cd trading-bot
# ИЛИ создайте папку вручную и скопируйте все файлы
mkdir trading-bot
cd trading-bot- Откройте https://testnet.binance.vision/
- Нажмите "Register" (правый верхний угол)
- Создайте аккаунт (email + password)
- Подтвердите email
- Войдите в систему
- Перейдите в API Management:
- Нажмите "Create API"
- Дайте название (например, "TradingBot")
- Сохраните API Key и Secret Key (больше не увидите!)
- Настройте разрешения:
- ✅ Enable Reading
- ✅ Enable Spot & Margin Trading
- ❌ Enable Withdrawals (ОТКЛЮЧИТЕ!)
- (Опционально) Ограничьте IP: добавьте свой IP для безопасности
- Откройте Telegram и найдите @BotFather
- Отправьте команду:
/newbot - Введите имя бота (например: "My Trading Bot")
- Введите username (должен заканчиваться на
bot, например:my_trading_bot) - Скопируйте Bot Token (формат:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz) - (Опционально) Настройте описание и аватар через
/setdescriptionи/setuserpic - Сохраните токен в надёжном месте!
# Windows (PowerShell)
Copy-Item .env.example .env
# Linux/Mac
cp .env.example .env# Database (оставьте как есть для Docker)
DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/trading_bot
# Binance Testnet API (ВСТАВЬТЕ СВОИ КЛЮЧИ!)
EXCHANGE_API_KEY=your_binance_testnet_api_key_here
EXCHANGE_API_SECRET=your_binance_testnet_secret_key_here
EXCHANGE_TESTNET=true
# Capital and Risk
INITIAL_CAPITAL=500.0
RISK_PER_TRADE=2.0
MAX_OPEN_POSITIONS=1
DAILY_LOSS_LIMIT=6.0
# Strategy Parameters (можно оставить по умолчанию)
TIMEFRAME=1h
EMA_FAST=9
EMA_SLOW=21
RSI_LENGTH=14
RSI_LONG_THRESHOLD=50
RSI_SHORT_THRESHOLD=50
LOOKBACK=40
ATR_LENGTH=14
RR_RATIO=2.5
# Telegram Bot (ВСТАВЬТЕ СВОЙ ТОКЕН!)
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# Timezone
TIMEZONE=Europe/Luxembourg🔑 Обязательно замените:
EXCHANGE_API_KEY→ ваш Binance Testnet API KeyEXCHANGE_API_SECRET→ ваш Binance Testnet SecretTELEGRAM_BOT_TOKEN→ ваш Telegram Bot Token
# Запустите все сервисы
docker-compose up -d
# Проверьте статус контейнеров (все должны быть "Up")
docker-compose ps
# Ожидаемый вывод:
# NAME SERVICE STATUS
# postgres postgres Up
# redis redis Up
# backend backend Up
# bot bot Up# Все логи сразу
docker-compose logs -f
# Только backend
docker-compose logs -f backend
# Только bot
docker-compose logs -f bot
# Выход: Ctrl+C# Подключитесь к контейнеру postgres
docker-compose exec postgres psql -U postgres -d trading_bot
# Выполните миграцию
\i /docker-entrypoint-initdb.d/001_initial.sql
# ИЛИ скопируйте SQL вручную из migrations/001_initial.sql
# Проверьте таблицы
\dt
# Выход
\q# Остановить с сохранением данных
docker-compose stop
# Остановить и удалить контейнеры (данные сохранятся в volumes)
docker-compose down
# Полная очистка (УДАЛИТ ВСЕ ДАННЫЕ!)
docker-compose down -v-
Старт бота
- Найдите вашего бота в Telegram по username
- Нажмите "Start" или отправьте
/start
-
Основные команды:
/status
Показывает:
• Текущий капитал (equity)
• Доступный капитал (available)
• Количество открытых позиций
• P&L за сегодня
• Win rate за последние 30 дней
/signals BTCUSDT
Проверяет торговый сигнал для символа
Показывает: Long/Short, Entry, SL, TP
/execute BTCUSDT
Открывает позицию по текущему сигналу
(Только если есть валидный сигнал!)
/positions
Показывает все открытые позиции с текущим P&L
/update BTCUSDT
Обновляет позиции (проверяет SL/TP hits)
Закрывает позиции, если достигнут SL или TP
/history
Показывает последние 20 закрытых сделок
/help
Справка по всем командам
Утро (9:00 CET):
- Отправьте
/status- проверьте капитал и открытые позиции - Если есть открытые позиции:
/update BTCUSDT- обновите цены
Вечер (21:00 CET):
/signals BTCUSDT- проверьте сигналы- Если есть сигнал:
/execute BTCUSDT- откройте позицию /status- проверьте итоги дня
Выходные:
- Используйте
/historyдля анализа недельной производительности
┌─────────────────┐
│ Telegram Bot │ ← Пользователь отправляет команды
│ (Python) │
└────────┬────────┘
│ HTTP REST API
▼
┌─────────────────┐
│ Backend API │ ← FastAPI сервер
│ (FastAPI) │
└────────┬────────┘
│
┌────┴────┐
│ │
▼ ▼
┌────────┐ ┌──────────────┐
│ Redis │ │ PostgreSQL │ ← База данных + TimescaleDB
│ (Cache)│ │ (Trades + │
└────────┘ │ OHLCV) │
└──────────────┘
│
▼
┌──────────────┐
│ Binance │ ← ccxt library
│ Testnet API │
└──────────────┘
trading-bot/
├── backend/
│ ├── api/
│ │ ├── __init__.py
│ │ └── routes.py # REST API endpoints
│ ├── models/
│ │ └── trade.py # SQLAlchemy models
│ ├── services/
│ │ ├── market_data.py # ccxt wrapper
│ │ └── paper_trading.py # Paper trading engine
│ ├── strategies/
│ │ └── swing_trend.py # Strategy implementation
│ ├── config.py # Settings management
│ ├── database.py # Database setup
│ ├── main.py # FastAPI app
│ ├── Dockerfile
│ └── requirements.txt
├── bot/
│ ├── main.py # Telegram bot
│ ├── config.py # Bot settings
│ ├── Dockerfile
│ └── requirements.txt
├── migrations/
│ └── 001_initial.sql # Database schema
├── docker-compose.yml
├── .env.example
├── .env # YOUR CONFIG (не коммитьте!)
└── README.md
# Проверьте health endpoint
curl http://localhost:8000/health
# Получите статус портфеля
curl http://localhost:8000/api/v1/status
# Проверьте сигнал для BTCUSDT
curl http://localhost:8000/api/v1/signals/BTCUSDT- Отправьте
/start- должно прийти приветственное сообщение - Отправьте
/status- должна показаться информация о портфеле - Отправьте
/signals BTCUSDT- должна быть проверка сигнала
# Подключитесь к postgres
docker-compose exec postgres psql -U postgres -d trading_bot
# Проверьте таблицы
\dt
# Посмотрите начальный капитал
SELECT * FROM portfolio_state;
# Посмотрите сделки
SELECT * FROM trades;
# Выход
\qРешение:
# Убедитесь, что Docker Desktop запущен
docker ps
# Пересоберите контейнеры
docker-compose down
docker-compose build --no-cache
docker-compose up -dРешение:
# Это нормально - код работает внутри Docker контейнеров
# Для разработки установите зависимости локально:
cd backend
pip install -r requirements.txtДиагностика:
# Проверьте логи бота
docker-compose logs bot
# Убедитесь, что TELEGRAM_BOT_TOKEN правильный в .env
# Проверьте, что backend запущен
curl http://localhost:8000/healthДиагностика:
# Проверьте, что EXCHANGE_API_KEY и EXCHANGE_API_SECRET правильные
# Убедитесь, что EXCHANGE_TESTNET=true в .env
# Протестируйте API ключи вручную:
docker-compose exec backend python -c "
from services.market_data import MarketDataService
import asyncio
service = MarketDataService()
print(asyncio.run(service.get_ticker('BTCUSDT')))
"Решение:
# Пересоберите backend контейнер
docker-compose build backend --no-cache
# Если проблема сохраняется, проверьте Dockerfile
# TA-Lib компилируется из исходников (требует время)Решение:
# Проверьте статус postgres
docker-compose ps postgres
# Проверьте логи
docker-compose logs postgres
# Пересоздайте volume
docker-compose down -v
docker-compose up -dРешение:
# Это нормально - MAX_OPEN_POSITIONS=1 по умолчанию
# Закройте существующую позицию через /update BTCUSDT
# ИЛИ измените MAX_OPEN_POSITIONS в .env (не рекомендуется в Phase 0)Каждый день записывайте:
- Количество открытых сделок
- Количество закрытых сделок
- Win rate (%)
- P&L за день ($)
- Max drawdown (%)
Используйте SQL для анализа:
-- Подключитесь к БД
docker-compose exec postgres psql -U postgres -d trading_bot
-- Дневная статистика
SELECT * FROM daily_stats;
-- Производительность по символам
SELECT * FROM symbol_performance;
-- Последние 10 сделок
SELECT symbol, side, pnl, pnl_pct, exit_reason, closed_at
FROM trades
WHERE status='closed'
ORDER BY closed_at DESC
LIMIT 10;Цели через 2 недели:
- ✅ Win Rate > 50%
- ✅ Sharpe Ratio > 1.0 (рассчитайте вручную)
- ✅ Max Drawdown < 10%
- ✅ Profit Factor > 1.2
- ✅ Минимум 10 сделок
Если метрики НЕ достигнуты:
- Не переходите к Phase 1 (live trading)
- Оптимизируйте параметры стратегии
- Повторите Phase 0 ещё 2 недели
- ✅ Код сгенерирован
- ⏳ Тестирование инфраструктуры (Day 1-3)
- ⏳ 2 недели paper trading (Day 4-17)
- ⏳ Анализ результатов (Day 18)
- Подключение реального Binance API
- Торговля на $500 live
- Ежедневный мониторинг
- Цель: December 1, 2025
- Увеличение капитала до $1000
- Добавление новых стратегий
- Multi-symbol trading
- Автоматизация уведомлений
-
НИКОГДА не коммитьте .env в Git
# Убедитесь, что .env в .gitignore echo ".env" >> .gitignore
-
Используйте только Testnet в Phase 0
EXCHANGE_TESTNET=trueвсегда!
-
Ограничьте API ключи по IP
- В Binance Testnet добавьте свой IP
-
Отключите withdrawals
- API ключи НЕ должны иметь права на вывод
-
Используйте разные пароли
- Binance Testnet ≠ Binance Live
- Telegram Bot Token храните в секрете
Проблемы с кодом?
- Проверьте Troubleshooting секцию
- Просмотрите логи:
docker-compose logs
Вопросы по стратегии?
- Изучите
backend/strategies/swing_trend.py - Параметры настраиваются в
.env
Binance API проблемы?
- Документация: https://binance-docs.github.io/apidocs/testnet/en/
- Testnet форум: https://dev.binance.vision/
Этот проект создан для личного использования в целях обучения. Не является финансовым советом.
ВНИМАНИЕ:
- Это экспериментальный проект для paper trading
- НЕ используйте реальные деньги до завершения Phase 0
- Торговля криптовалютами несёт высокий риск потери капитала
- Автор не несёт ответственности за ваши торговые решения
- Всегда проводите собственный анализ и тестирование
Phase 0 - это ОБЯЗАТЕЛЬНЫЙ этап валидации!
- ✅ Заполните
.env(API ключи + Telegram токен) - ✅ Запустите
docker-compose up -d - ✅ Проверьте
/statusв Telegram боте - ✅ Запустите backtest на TradingView (6 месяцев данных)
- ✅ Мониторьте сделки каждый день (30 мин)
- ✅ Анализируйте результаты через 2 недели
- ✅ Принимайте решение о переходе к Phase 1
Успехов в paper trading! 📈