Skip to content

Repository files navigation

🤖 Swing Trend Trading Bot - Phase 0 (Paper Trading)

Автоматизированный крипто-бот для 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: стабильное подключение

Программное обеспечение:

  1. Docker Desktop (обязательно)

  2. Git (опционально, для клонирования)

  3. Текстовый редактор (VS Code рекомендуется)


🚀 Установка

Шаг 1: Подготовка окружения (10 мин)

1.1. Установите Docker Desktop

# Скачайте и установите с официального сайта
# Убедитесь, что Docker запущен
docker --version
docker-compose --version

1.2. Создайте рабочую директорию

# Если клонируете из Git:
git clone <your-repo-url> trading-bot
cd trading-bot

# ИЛИ создайте папку вручную и скопируйте все файлы
mkdir trading-bot
cd trading-bot

Шаг 2: Создайте Binance Testnet API ключи (10 мин)

  1. Откройте https://testnet.binance.vision/
  2. Нажмите "Register" (правый верхний угол)
  3. Создайте аккаунт (email + password)
  4. Подтвердите email
  5. Войдите в систему
  6. Перейдите в API Management:
    • Нажмите "Create API"
    • Дайте название (например, "TradingBot")
    • Сохраните API Key и Secret Key (больше не увидите!)
  7. Настройте разрешения:
    • ✅ Enable Reading
    • ✅ Enable Spot & Margin Trading
    • ❌ Enable Withdrawals (ОТКЛЮЧИТЕ!)
  8. (Опционально) Ограничьте IP: добавьте свой IP для безопасности

⚠️ ВАЖНО: Сохраните API Key и Secret в надёжном месте!

Шаг 3: Создайте Telegram бота (5 мин)

  1. Откройте Telegram и найдите @BotFather
  2. Отправьте команду: /newbot
  3. Введите имя бота (например: "My Trading Bot")
  4. Введите username (должен заканчиваться на bot, например: my_trading_bot)
  5. Скопируйте Bot Token (формат: 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz)
  6. (Опционально) Настройте описание и аватар через /setdescription и /setuserpic
  7. Сохраните токен в надёжном месте!

Шаг 4: Конфигурация (5 мин)

4.1. Создайте .env файл из шаблона

# Windows (PowerShell)
Copy-Item .env.example .env

# Linux/Mac
cp .env.example .env

4.2. Откройте .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 Key
  • EXCHANGE_API_SECRET → ваш Binance Testnet Secret
  • TELEGRAM_BOT_TOKEN → ваш Telegram Bot Token

🏃 Запуск

Первый запуск (2-3 мин)

# Запустите все сервисы
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 бота

  1. Старт бота

    • Найдите вашего бота в Telegram по username
    • Нажмите "Start" или отправьте /start
  2. Основные команды:

/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
Справка по всем командам

Типичный рабочий процесс (Day 4-17)

Утро (9:00 CET):

  1. Отправьте /status - проверьте капитал и открытые позиции
  2. Если есть открытые позиции: /update BTCUSDT - обновите цены

Вечер (21:00 CET):

  1. /signals BTCUSDT - проверьте сигналы
  2. Если есть сигнал: /execute BTCUSDT - откройте позицию
  3. /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

🧪 Тестирование

Проверка backend API

# Проверьте health endpoint
curl http://localhost:8000/health

# Получите статус портфеля
curl http://localhost:8000/api/v1/status

# Проверьте сигнал для BTCUSDT
curl http://localhost:8000/api/v1/signals/BTCUSDT

Проверка Telegram бота

  1. Отправьте /start - должно прийти приветственное сообщение
  2. Отправьте /status - должна показаться информация о портфеле
  3. Отправьте /signals BTCUSDT - должна быть проверка сигнала

Проверка базы данных

# Подключитесь к postgres
docker-compose exec postgres psql -U postgres -d trading_bot

# Проверьте таблицы
\dt

# Посмотрите начальный капитал
SELECT * FROM portfolio_state;

# Посмотрите сделки
SELECT * FROM trades;

# Выход
\q

🐛 Troubleshooting

Проблема: Docker контейнеры не запускаются

Решение:

# Убедитесь, что Docker Desktop запущен
docker ps

# Пересоберите контейнеры
docker-compose down
docker-compose build --no-cache
docker-compose up -d

Проблема: "Import could not be resolved" ошибки в VS Code

Решение:

# Это нормально - код работает внутри Docker контейнеров
# Для разработки установите зависимости локально:
cd backend
pip install -r requirements.txt

Проблема: Telegram бот не отвечает

Диагностика:

# Проверьте логи бота
docker-compose logs bot

# Убедитесь, что TELEGRAM_BOT_TOKEN правильный в .env
# Проверьте, что backend запущен
curl http://localhost:8000/health

Проблема: "Error fetching data from Binance"

Диагностика:

# Проверьте, что 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')))
"

Проблема: TA-Lib не компилируется

Решение:

# Пересоберите 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 positions already open"

Решение:

# Это нормально - MAX_OPEN_POSITIONS=1 по умолчанию
# Закройте существующую позицию через /update BTCUSDT
# ИЛИ измените MAX_OPEN_POSITIONS в .env (не рекомендуется в Phase 0)

📊 Мониторинг производительности

Daily checklist (Day 4-17):

Каждый день записывайте:

  • Количество открытых сделок
  • Количество закрытых сделок
  • 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;

Ключевые метрики для Phase 0:

Цели через 2 недели:

  • ✅ Win Rate > 50%
  • ✅ Sharpe Ratio > 1.0 (рассчитайте вручную)
  • ✅ Max Drawdown < 10%
  • ✅ Profit Factor > 1.2
  • ✅ Минимум 10 сделок

Если метрики НЕ достигнуты:

  • Не переходите к Phase 1 (live trading)
  • Оптимизируйте параметры стратегии
  • Повторите Phase 0 ещё 2 недели

🎯 Roadmap

Phase 0 (Текущая): Paper Trading

  • ✅ Код сгенерирован
  • ⏳ Тестирование инфраструктуры (Day 1-3)
  • ⏳ 2 недели paper trading (Day 4-17)
  • ⏳ Анализ результатов (Day 18)

Phase 1 (Если Phase 0 успешна):

  • Подключение реального Binance API
  • Торговля на $500 live
  • Ежедневный мониторинг
  • Цель: December 1, 2025

Phase 2 (Будущее):

  • Увеличение капитала до $1000
  • Добавление новых стратегий
  • Multi-symbol trading
  • Автоматизация уведомлений

🔒 Безопасность

Критически важно:

  1. НИКОГДА не коммитьте .env в Git

    # Убедитесь, что .env в .gitignore
    echo ".env" >> .gitignore
  2. Используйте только Testnet в Phase 0

    • EXCHANGE_TESTNET=true всегда!
  3. Ограничьте API ключи по IP

    • В Binance Testnet добавьте свой IP
  4. Отключите withdrawals

    • API ключи НЕ должны иметь права на вывод
  5. Используйте разные пароли

    • Binance Testnet ≠ Binance Live
    • Telegram Bot Token храните в секрете

📞 Support

Проблемы с кодом?

  • Проверьте Troubleshooting секцию
  • Просмотрите логи: docker-compose logs

Вопросы по стратегии?

  • Изучите backend/strategies/swing_trend.py
  • Параметры настраиваются в .env

Binance API проблемы?


📝 License

Этот проект создан для личного использования в целях обучения. Не является финансовым советом.


⚠️ Disclaimer

ВНИМАНИЕ:

  • Это экспериментальный проект для paper trading
  • НЕ используйте реальные деньги до завершения Phase 0
  • Торговля криптовалютами несёт высокий риск потери капитала
  • Автор не несёт ответственности за ваши торговые решения
  • Всегда проводите собственный анализ и тестирование

Phase 0 - это ОБЯЗАТЕЛЬНЫЙ этап валидации!


🚀 Следующие шаги

  1. ✅ Заполните .env (API ключи + Telegram токен)
  2. ✅ Запустите docker-compose up -d
  3. ✅ Проверьте /status в Telegram боте
  4. ✅ Запустите backtest на TradingView (6 месяцев данных)
  5. ✅ Мониторьте сделки каждый день (30 мин)
  6. ✅ Анализируйте результаты через 2 недели
  7. ✅ Принимайте решение о переходе к Phase 1

Успехов в paper trading! 📈

About

Phase 0 paper trading bot: Swing Trend Baseline strategy with Telegram bot interface. 2-week validation before Dec 1, 2025 live trading. FastAPI + PostgreSQL + TimescaleDB + Docker Compose.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages