Skip to content

367300/interactive_trader_diary

Repository files navigation

Interactive Trader Diary

Интерактивный дневник трейдера — это веб-приложение для систематического анализа торговой деятельности, сбора статистики и улучшения торговых стратегий.

Описание

  • Проект предназначен для создания простой и понятной системы сбора статистики торговли
  • Включает инструменты для самоанализа сделок и выявления паттернов в торговой деятельности
  • Планируется интеграция с 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) │
                       └─────────────────┘

Этапы разработки

Этап 1: Базовая функциональность

  • Модели для хранения сделок и торговых данных
  • Простой интерфейс для ввода сделок вручную
  • Базовые расчеты статистики (P&L, количество сделок)
  • Аутентификация пользователей

Этап 2: Аналитика и визуализация (В разработке)

  • Расширенная статистика торговли
  • Графики и диаграммы для анализа
  • Фильтрация и группировка сделок
  • Экспорт данных в различные форматы

Этап 3: Интеграции

  • Интеграция с Tinkoff API
  • Автоматический импорт сделок
  • Получение рыночных данных в реальном времени
  • Уведомления о важных событиях

Этап 4: Продвинутые возможности

  • Машинное обучение для анализа паттернов
  • Рекомендации по улучшению торговли
  • Социальные функции (обмен опытом)
  • Мобильное приложение

Документация

Быстрый старт

Установка и запуск

  1. Клонируйте репозиторий:

    git clone <адрес-репозитория>
    cd interactive_trader_diary
  2. Настройте окружение:

    cp .env.example .env
    # Отредактируйте .env файл под ваши нужды
  3. Запустите проект:

    docker compose -f docker-compose.dev.yml up --build
  4. Выполните миграции:

    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

Доступные сервисы

Конфигурация

Пример .env файла

# 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
  • Распределение прибыли/убытков
  • Анализ по инструментам и секторам
  • Тепловые карты торговой активности

Docker Compose

Проект использует два 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

Production (Dokploy + Traefik)

Стек рассчитан на запуск через Dokploy, который поднимает Traefik как единый reverse-proxy. Внутри проекта nginx больше не используется: статику Django раздаёт WhiteNoise, медиа — view django.views.static.serve, SPA — встроенный в frontend-контейнер alpine-nginx (только bundle).

Подключение в Dokploy:

  1. Создать Compose-сервис, указать репозиторий и путь к docker-compose.prod.yml.
  2. Прокинуть переменные окружения из .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).
  3. DNS: A-записи для apex и поддоменов (${DOMAIN}, www.${DOMAIN}, flower.${DOMAIN}, pgadmin.${DOMAIN}) должны указывать на хост Dokploy.
  4. 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

Обогащение инструментов через CSV

Команда load_instruments_from_moex умеет дополнительно обогащать данные инструментов из локального CSV-файла.

Путь к файлу

Файл должен лежать по пути:

  • uploads/data_instruments/moex_stocks_enriched.csv

Если файл отсутствует, загрузка из API Мосбиржи все равно выполняется, но без обогащения (команда выведет предупреждение).

Обязательные колонки CSV

CSV должен содержать ровно эти имена колонок (в нижнем регистре):

  • ticker
  • sector
  • industry_group
  • industry
  • sub_industry
  • description
  • logolink
  • og_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

Как подготовить и использовать CSV

  1. Создайте директорию и файл:
    mkdir -p uploads/data_instruments
  2. Добавьте файл uploads/data_instruments/moex_stocks_enriched.csv с обязательными колонками.
  3. Запустите загрузку инструментов:
    docker compose -f docker-compose.dev.yml exec web python manage.py load_instruments_from_moex --update-existing
  4. Для быстрого теста можно ограничить количество записей:
    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 применяются при наличии соответствующих записей в таблицах справочников.
  • Если нужная комбинация не найдена в БД, инструмент загрузится, но связь с подиндустрией не будет установлена.
  • Датасет и его наполнение остаются на усмотрение разработчика: можно начать с минимального набора тикеров и постепенно расширять.

Celery

# Запуск воркера вручную
docker compose -f docker-compose.dev.yml exec web celery -A django_base worker --loglevel=info

# Мониторинг через Flower
# Откройте http://localhost:5555

Отладка

Проект поддерживает отладку через VS Code с использованием debugpy в Docker контейнерах.

Запуск в режиме отладки

  1. Запустите контейнеры с отладкой:

    docker compose -f docker-compose.dev.yml up --build

    Dev-файл уже включает debugpy на портах 5678 (web) и 5679 (celery).

  2. Дождитесь полной загрузки сервисов (debugpy должен быть готов к подключению)

Конфигурации отладки в VS Code

В файле .vscode/launch.json доступны следующие конфигурации:

Docker: Attach to Django (Web)

  • Порт: 5678
  • Назначение: Отладка Django веб-приложения
  • Особенности:
    • Поддержка Django-специфичных функций (шаблоны, ORM)
    • Маппинг путей между локальной файловой системой и контейнером
    • Отладка библиотечного кода включена

Docker: Attach to Celery Worker

  • Порт: 5679
  • Назначение: Отладка Celery воркера и фоновых задач
  • Особенности:
    • Отладка задач Celery
    • Маппинг путей для корректной работы точек останова
    • Отладка библиотечного кода включена

Использование

  1. Запустите контейнеры в режиме отладки (см. выше)

  2. В VS Code:

    • Откройте панель отладки (F5 или View > Run and Debug)
    • Выберите нужную конфигурацию из списка:
      • Docker: Attach to Django (Web) — для отладки веб-приложения
      • Docker: Attach to Celery Worker — для отладки фоновых задач
    • Нажмите F5 или кнопку "Start Debugging"
  3. Установите точки останова в коде и используйте их как обычно

Файл для 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 — изолированная среда разработки

Проект в активной разработке!

Цель: создать мощный инструмент для анализа и улучшения торговой деятельности.

Если есть идеи или предложения — добро пожаловать к участию в разработке!

About

Дневник трейдера: Веб-приложение на Django для учета торговых операций, анализа результатов и визуализации торговой истории с графиками и диаграммами.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors