Интерактивный дневник трейдера — это веб-приложение для систематического анализа торговой деятельности, сбора статистики и улучшения торговых стратегий.
- Проект предназначен для создания простой и понятной системы сбора статистики торговли
- Включает инструменты для самоанализа сделок и выявления паттернов в торговой деятельности
- Планируется интеграция с Tinkoff API для автоматического получения данных о сделках
- Поддержка получения реальных рыночных данных в онлайн режиме
- Система поможет трейдеру улучшать свою торговлю через детальный анализ результатов
- Дневник сделок — запись и анализ каждой торговой операции
- Статистика торговли — автоматический расчет ключевых метрик (прибыльность, win rate, средняя сделка)
- Анализ паттернов — выявление успешных и неудачных торговых стратегий
- Интеграция с брокерами — автоматический импорт сделок через API
- Рыночные данные — получение актуальных котировок и новостей
- Визуализация — графики и диаграммы для наглядного анализа
- Django (ASGI-ready) — основа веб-приложения
- Django Channels — WebSocket для реального времени
- Celery — фоновые задачи (синхронизация с API, обработка данных)
- RabbitMQ — брокер сообщений
- PostgreSQL — хранение торговых данных
- Redis — кэширование рыночных данных
- Tinkoff API — интеграция с брокером (планируется)
- Market Data API — получение котировок в реальном времени (планируется)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Django App │ │ External APIs │
│ (React/Vue) │◄──►│ (ASGI) │◄──►│ Tinkoff API │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ PostgreSQL │◄──►│ Celery │◄──►│ RabbitMQ │
│ (Trading Data)│ │ (Background) │ │ (Message │
└─────────────────┘ └─────────────────┘ │ Broker) │
│ └─────────────────┘
▼
┌─────────────────┐
│ Redis Cache │
│ (Market Data) │
└─────────────────┘
- Модели для хранения сделок и торговых данных
- Простой интерфейс для ввода сделок вручную
- Базовые расчеты статистики (P&L, количество сделок)
- Аутентификация пользователей
- Расширенная статистика торговли
- Графики и диаграммы для анализа
- Фильтрация и группировка сделок
- Экспорт данных в различные форматы
- Интеграция с Tinkoff API
- Автоматический импорт сделок
- Получение рыночных данных в реальном времени
- Уведомления о важных событиях
- Машинное обучение для анализа паттернов
- Рекомендации по улучшению торговли
- Социальные функции (обмен опытом)
- Мобильное приложение
- Структура базы данных - подробное описание моделей и связей
-
Клонируйте репозиторий:
git clone <адрес-репозитория> cd interactive_trader_diary
-
Настройте окружение:
cp .env.example .env # Отредактируйте .env файл под ваши нужды -
Запустите проект:
docker compose -f docker-compose.dev.yml up --build
-
Выполните миграции:
docker compose -f docker-compose.dev.yml exec web python manage.py migrate docker compose -f docker-compose.dev.yml exec web python manage.py createsuperuser
- Основное приложение: http://localhost:8000
- Админка Django: http://localhost:8000/admin/
- PgAdmin (БД): http://localhost:5050
- Flower (Celery): http://localhost:5555
- API документация: http://localhost:8000/api/docs/ (планируется)
# Django
DJANGO_SECRET_KEY=your_super_secret_key
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0
DJANGO_LANGUAGE_CODE=ru-RU
DJANGO_TIME_ZONE=Europe/Moscow
# База данных
POSTGRES_DB=trader_diary
POSTGRES_USER=trader_user
POSTGRES_PASSWORD=trader_password
POSTGRES_HOST=db
POSTGRES_PORT=5432
# Redis (для кэширования рыночных данных)
REDIS_URL=redis://redis:6379/0
# Celery
CELERY_BROKER_URL=amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND=redis://redis:6379/1
# Tinkoff API (планируется)
TINKOFF_TOKEN=your_tinkoff_token_here
TINKOFF_SANDBOX=True
# Market Data API (планируется)
MARKET_DATA_API_KEY=your_market_data_key
MARKET_DATA_PROVIDER=alpha_vantage # или другой провайдер
# PgAdmin
PGADMIN_DEFAULT_EMAIL=admin@trader-diary.com
PGADMIN_DEFAULT_PASSWORD=admin
# Flower
FLOWER_BASIC_AUTH=admin:password
# Certbot (только для production)
CERTBOT_EMAIL=admin@example.com
CERTBOT_DOMAIN=example.com
# Системные настройки
UID=1000
GID=1000- Запись каждой торговой операции с деталями
- Классификация сделок по типам и стратегиям
- Прикрепление скриншотов и заметок
- Теги для группировки и поиска
- Основные метрики: P&L, Win Rate, Average Win/Loss
- Продвинутая аналитика: Sharpe Ratio, Maximum Drawdown, Profit Factor
- Временной анализ: производительность по дням/неделям/месяцам
- Сравнение стратегий: эффективность разных подходов
- Tinkoff API: автоматический импорт сделок
- Market Data: получение котировок в реальном времени
- Новости: анализ влияния новостей на торговлю
- Экономические календари: планирование торговых сессий
- Интерактивные графики P&L
- Распределение прибыли/убытков
- Анализ по инструментам и секторам
- Тепловые карты торговой активности
Проект использует два compose-файла:
| Файл | Назначение |
|---|---|
docker-compose.dev.yml |
Локальная разработка с hot-reload и debugpy |
docker-compose.prod.yml |
Production-окружение под Dokploy + Traefik |
# Запуск в режиме разработки
docker compose -f docker-compose.dev.yml up --build
# Запуск в фоне
docker compose -f docker-compose.dev.yml up --build -d
# Остановка
docker compose -f docker-compose.dev.yml down
# Просмотр логов
docker compose -f docker-compose.dev.yml logs -f web
docker compose -f docker-compose.dev.yml logs -f celeryСтек рассчитан на запуск через Dokploy, который поднимает Traefik как единый reverse-proxy. Внутри проекта nginx больше не используется: статику Django раздаёт WhiteNoise, медиа — view django.views.static.serve, SPA — встроенный в frontend-контейнер alpine-nginx (только bundle).
Подключение в Dokploy:
- Создать Compose-сервис, указать репозиторий и путь к
docker-compose.prod.yml. - Прокинуть переменные окружения из
.env.example(в том числеDOMAIN,DJANGO_SECRET_KEY,POSTGRES_*,RABBITMQ_*,CELERY_*,FLOWER_BASIC_AUTH,PGADMIN_DEFAULT_*,DJANGO_ALLOWED_HOSTS=${DOMAIN},www.${DOMAIN},flower.${DOMAIN},pgadmin.${DOMAIN},CSRF_TRUSTED_ORIGINS=https://${DOMAIN},https://www.${DOMAIN},DJANGO_DEBUG=False). - DNS: A-записи для apex и поддоменов (
${DOMAIN},www.${DOMAIN},flower.${DOMAIN},pgadmin.${DOMAIN}) должны указывать на хост Dokploy. - Deploy. Никаких доменов в UI Dokploy подключать руками не нужно — Traefik подхватит labels из compose, Let's Encrypt выпустит сертификаты автоматически.
Локальная проверка prod-сборки (без Traefik):
DOMAIN=midas-hand.ru docker compose -f docker-compose.prod.yml up --build -d
docker compose -f docker-compose.prod.yml logs -f web
docker compose -f docker-compose.prod.yml downБез поднятого Traefik сервисы будут жить во внутренней сети, но извне они недоступны (по дизайну). Для full-stack проверки используйте dev-стек.
# Миграции
docker compose -f docker-compose.dev.yml exec web python manage.py migrate
# Создание суперпользователя
docker compose -f docker-compose.dev.yml exec web python manage.py createsuperuser
# Сборка статики
docker compose -f docker-compose.dev.yml exec web python manage.py collectstatic --noinput
# Загрузка торговых инструментов из API Мосбиржи
docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex
docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex --update-existing
docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex --instrument-type STOCK --limit 10Команда load_instruments_from_moex умеет дополнительно обогащать данные инструментов из локального CSV-файла.
Файл должен лежать по пути:
uploads/data_instruments/moex_stocks_enriched.csv
Если файл отсутствует, загрузка из API Мосбиржи все равно выполняется, но без обогащения (команда выведет предупреждение).
CSV должен содержать ровно эти имена колонок (в нижнем регистре):
tickersectorindustry_groupindustrysub_industrydescriptionlogolinkog_logo
Важно:
tickerдолжен совпадать с тикером Мосбиржи (например,SBER,GAZP), иначе строка обогащения не будет применена.logolinkиog_logoдолжны содержать путь относительноSTATIC_URL(например,instruments/ticker_icons/sber.svg).- Для пустых значений можно оставлять пустую строку.
ticker,sector,industry_group,industry,sub_industry,description,logolink,og_logo
SBER,Финансы,Банки,Коммерческие банки,Универсальные банки,Крупнейший банк РФ,instruments/ticker_icons/sber.svg,instruments/ticker_icons/sber_og.svg
GAZP,Энергетика,Нефтегаз,Газовые компании,Интегрированные компании,Крупнейшая газовая компания РФ,instruments/ticker_icons/gazp.svg,instruments/ticker_icons/gazp_og.svg
LKOH,Энергетика,Нефтегаз,Нефтяные компании,Вертикально-интегрированные компании,Одна из крупнейших нефтяных компаний РФ,instruments/ticker_icons/lkoh.svg,instruments/ticker_icons/lkoh_og.svg- Создайте директорию и файл:
mkdir -p uploads/data_instruments
- Добавьте файл
uploads/data_instruments/moex_stocks_enriched.csvс обязательными колонками. - Запустите загрузку инструментов:
docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex --update-existing - Для быстрого теста можно ограничить количество записей:
docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex --limit 10 --update-existing
- Поля
industry_group,industry,sub_industryприменяются при наличии соответствующих записей в таблицах справочников. - Если нужная комбинация не найдена в БД, инструмент загрузится, но связь с подиндустрией не будет установлена.
- Датасет и его наполнение остаются на усмотрение разработчика: можно начать с минимального набора тикеров и постепенно расширять.
# Запуск воркера вручную
docker compose -f docker-compose.dev.yml exec web celery -A django_base worker --loglevel=info
# Мониторинг через Flower
# Откройте http://localhost:5555Проект поддерживает отладку через VS Code с использованием debugpy в Docker контейнерах.
-
Запустите контейнеры с отладкой:
docker compose -f docker-compose.dev.yml up --build
Dev-файл уже включает debugpy на портах 5678 (web) и 5679 (celery).
-
Дождитесь полной загрузки сервисов (debugpy должен быть готов к подключению)
В файле .vscode/launch.json доступны следующие конфигурации:
- Порт: 5678
- Назначение: Отладка Django веб-приложения
- Особенности:
- Поддержка Django-специфичных функций (шаблоны, ORM)
- Маппинг путей между локальной файловой системой и контейнером
- Отладка библиотечного кода включена
- Порт: 5679
- Назначение: Отладка Celery воркера и фоновых задач
- Особенности:
- Отладка задач Celery
- Маппинг путей для корректной работы точек останова
- Отладка библиотечного кода включена
-
Запустите контейнеры в режиме отладки (см. выше)
-
В VS Code:
- Откройте панель отладки (F5 или
View > Run and Debug) - Выберите нужную конфигурацию из списка:
Docker: Attach to Django (Web)— для отладки веб-приложенияDocker: Attach to Celery Worker— для отладки фоновых задач
- Нажмите F5 или кнопку "Start Debugging"
- Откройте панель отладки (F5 или
-
Установите точки останова в коде и используйте их как обычно
Файл для vscode launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Docker: Attach to Django (Web)",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}/django_base",
"remoteRoot": "/app/django_base"
}
],
"django": true,
"justMyCode": false
},
{
"name": "Docker: Attach to Celery Worker",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5679
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}/django_base",
"remoteRoot": "/app/django_base"
}
],
"justMyCode": false
}
]
}- Убедитесь, что порты 5678 и 5679 не заняты другими процессами
- При изменении кода в контейнере изменения применяются автоматически благодаря volume mapping
- Для отладки Celery задач запустите задачу через Django или другой механизм, чтобы она попала в очередь
- web — Django приложение с ASGI сервером
- celery — воркер для фоновых задач (синхронизация с API)
- rabbitmq — брокер сообщений для Celery
- redis — кэширование рыночных данных
- flower — мониторинг Celery
- db — PostgreSQL для торговых данных
- pgadmin — управление БД
- Django Channels — WebSocket для реального времени
- Celery — фоновые задачи и синхронизация
- PostgreSQL — надежное хранение торговых данных
- Redis — быстрый доступ к рыночным данным
- Docker — изолированная среда разработки
Проект в активной разработке!
Цель: создать мощный инструмент для анализа и улучшения торговой деятельности.
Если есть идеи или предложения — добро пожаловать к участию в разработке!