Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stock Quotes Analyzer 📈

Версия 3.0 - Автоматический анализ котировок акций через OpenRouter API с использованием множественных LLM моделей (GPT-4, Claude 3, Gemini Pro).

🆕 v3.0: Автоматическое получение котировок через Yahoo Finance, улучшенная безопасность конфигурации, управление компаниями через веб-интерфейс


📑 Содержание


✨ Возможности

  • 🤖 Анализ через 3 LLM модели - консенсус повышает точность
  • 📊 Интерактивные дашборды - визуализация трендов в реальном времени
  • 📱 Адаптивный веб-интерфейс - работает на телефоне и компьютере
  • 🔄 Автоматический запуск по расписанию - ежедневный анализ
  • 💾 История данных - отслеживание трендов во времени
  • 📈 Анализ точности - сравнение эффективности моделей
  • 🛡️ Защита от галлюцинаций - многоуровневая валидация ответов
  • 📄 Экспорт в Excel - форматированные отчеты

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

Windows - Автоматическая установка

Рекомендуемый способ:

  1. Запустите bin\setup.bat - автоматически проверит и установит все зависимости
  2. Скопируйте примеры конфигурации:
    copy config\api_keys.example.yaml config\api_keys.yaml
    copy config\llm_config.example.yaml config\llm_config.yaml
    copy config\companies.example.json config\companies.json
  3. Добавьте API ключ в config/api_keys.yaml
  4. Запустите bin\quick_start.bat для быстрого старта

Ручная установка

1. Установка зависимостей

# Создание виртуального окружения (рекомендуется)
python -m venv venv

# Windows
venv\Scripts\activate

# Linux/Mac
source venv/bin/activate

# Установка зависимостей
pip install -r requirements.txt

2. Настройка конфигурации (v3.0)

Создайте файлы конфигурации из примеров:

# Windows
copy config\api_keys.example.yaml config\api_keys.yaml
copy config\llm_config.example.yaml config\llm_config.yaml
copy config\companies.example.json config\companies.json

# Linux/Mac
cp config/api_keys.example.yaml config/api_keys.yaml
cp config/llm_config.example.yaml config/llm_config.yaml
cp config/companies.example.json config/companies.json

Получите API ключ на openrouter.ai и добавьте в config/api_keys.yaml:

openrouter_api_key: "sk-or-v1-ваш-ключ-здесь"

💡 Совет: Пополните баланс на $10-20 для начала работы

2.1. Миграция с v2.x (если обновляетесь)

Если у вас уже установлена версия 2.x, запустите миграцию:

python scripts/migrate_to_v3.py

Подробнее: Руководство по миграции

3. Подготовка данных (v3.0)

Список компаний хранится в config/companies.json

Добавьте компании одним из способов:

Вариант 1: Через веб-интерфейс (рекомендуется)

  1. Запустите: streamlit run app.py
  2. Перейдите в "Настройки" → "Управление компаниями"
  3. Добавьте компании по тикеру (например, AAPL, GOOGL, MSFT)
  4. Цены и информация получатся автоматически через Yahoo Finance

Вариант 2: Редактирование JSON вручную

  • Отредактируйте config/companies.json
  • Добавьте тикеры в массив companies
  • При следующем запуске данные будут получены автоматически

Пример companies.json:

{
  "companies": [
    {"ticker": "AAPL"},
    {"ticker": "GOOGL"},
    {"ticker": "MSFT"}
  ],
  "last_updated": "2026-02-04T12:00:00"
}

4. Запуск

Через веб-интерфейс (рекомендуется):

# Windows
bin\start_web.bat

# Linux/Mac
streamlit run app.py

Приложение откроется на http://localhost:8501

Через CLI:

# Windows
bin\start.bat

# Linux/Mac
python main.py

📁 Структура проекта (v3.0)

Stock_Quotes/
├── bin/                        # Скрипты запуска (.bat файлы)
│   ├── setup.bat               # Установка зависимостей
│   ├── start.bat               # Запуск CLI
│   ├── start_web.bat           # Запуск веб-интерфейса
│   ├── start_scheduler.bat     # Запуск планировщика
│   ├── quick_start.bat         # Быстрый старт (с проверкой v3.0)
│   └── clear_database.bat      # Очистка БД
├── config/                     # 🆕 Конфигурация v3.0
│   ├── api_keys.yaml           # API ключи (в .gitignore)
│   ├── llm_config.yaml         # Настройки LLM (в .gitignore)
│   ├── companies.json          # Список компаний (в .gitignore)
│   ├── api_keys.example.yaml   # Пример API ключей
│   ├── llm_config.example.yaml # Пример настроек LLM
│   └── companies.example.json  # Пример списка компаний
├── docs/                       # Документация
│   ├── en/                     # Английская документация
│   │   ├── MIGRATION_V3.md     # 🆕 Руководство по миграции
│   │   ├── DEPLOYMENT.md       # Инструкция по развертыванию
│   │   └── ...                 # Другие документы
│   └── ru/                     # Русская документация
│       ├── МИГРАЦИЯ_V3.md      # 🆕 Руководство по миграции
│       ├── ЗАПУСК.txt          # Инструкции по запуску
│       └── ...                 # Другие документы
├── scripts/                    # Утилиты и вспомогательные скрипты
│   ├── migrate_to_v3.py        # 🆕 Миграция на v3.0
│   ├── check_database.py       # Проверка БД
│   ├── clear_database.py       # Очистка БД
│   └── ...                     # Другие утилиты
├── src/                        # Основной исходный код
│   ├── __init__.py
│   ├── data_loader.py          # Чтение JSON/Excel (обновлено v3.0)
│   ├── price_fetcher.py        # 🆕 Yahoo Finance API
│   ├── llm_manager.py          # OpenRouter клиент
│   ├── analyzer.py             # Логика анализа
│   ├── database.py             # SQLite база (обновлено v3.0)
│   ├── excel_exporter.py       # Экспорт результатов
│   ├── company_info.py         # Информация о компаниях
│   └── dashboards/             # Страницы веб-приложения
│       ├── overview.py         # Обзор
│       ├── analysis.py         # Анализ
│       ├── history.py          # История
│       ├── accuracy.py         # Точность
│       └── settings.py         # Настройки (обновлено v3.0)
├── data/                       # Данные
│   ├── cache/                  # Кэш данных
│   └── *.db                    # SQLite базы данных
├── output/                     # Выходные файлы
│   └── exports/                # Excel отчеты
├── logs/                       # Логи приложения
├── deploy/                     # Файлы для развертывания
│   ├── docker-compose.yml      # Docker Compose конфигурация
│   └── .env.example            # Пример переменных окружения
├── .gitignore                  # Игнорируемые файлы (обновлено v3.0)
├── config.example.yaml         # Legacy: пример конфигурации v2.x
├── requirements.txt            # Python зависимости
├── Dockerfile                  # Docker образ
├── README.md                   # Этот файл
├── main.py                     # Точка входа CLI (обновлено v3.0)
├── app.py                      # Точка входа веб-приложения (обновлено v3.0)
└── scheduler.py                # Планировщик задач

📊 Формат данных (v3.0)

Список компаний: config/companies.json

{
  "companies": [
    {
      "ticker": "AAPL",
      "name": "Apple Inc.",
      "sector": "Technology",
      "industry": "Consumer Electronics"
    }
  ],
  "last_updated": "2026-02-04T12:00:00"
}

Минимально достаточно указать только ticker!

🔄 Автоматическое получение данных

При добавлении новой компании система автоматически:

  1. Получает текущую цену через Yahoo Finance API
  2. Получает информацию о компании через LLM
  3. Сохраняет в базу данных для дальнейшего использования
  4. Обновляет companies.json для резервного копирования

В веб-интерфейсе (Настройки → Управление компаниями):

  • ➕ Добавляйте компании по тикеру - остальное заполнится автоматически
  • 🗑️ Удаляйте компании одной кнопкой
  • 📥 Экспортируйте список компаний в JSON
  • 🔍 Поиск по тикеру или названию

⚙️ Где находятся все настройки (v3.0)

📂 Структура конфигурации

Все настройки разделены на 3 файла для безопасности и удобства:

config/
├── api_keys.yaml           # 🔑 API ключи (не в Git!)
├── llm_config.yaml         # ⚙️ Все настройки проекта (не в Git!)
└── companies.json          # 🏢 Список компаний (не в Git!)

🔑 1. API ключи: config/api_keys.yaml

Что здесь:

  • OpenRouter API ключ (обязательно)
  • Alphavantage API ключ (опционально)
# OpenRouter API ключ
# Получить на https://openrouter.ai/
openrouter_api_key: "sk-or-v1-ваш-ключ-здесь"

# Alphavantage API ключ (опционально)
# Получить на https://www.alphavantage.co/support/#api-key
alphavantage_api_key: ""

⚙️ 2. Основные настройки: config/llm_config.yaml

Что здесь: ВСЕ настройки проекта в одном файле!

📊 Входные данные

input:
  excel_file: "config/companies.json"  # Путь к списку компаний

🤖 Модели LLM

models:
  - name: "GPT-4 Turbo"
    id: "openai/gpt-4-turbo"
    temperature: 0.3      # Креативность (0.0-1.0)
    max_tokens: 1500      # Длина ответа
    
  - name: "Claude 3.5 Sonnet"
    id: "anthropic/claude-3.5-sonnet"
    temperature: 0.3
    max_tokens: 1500
    
  - name: "Gemini Pro 1.5"
    id: "google/gemini-pro-1.5"
    temperature: 0.3
    max_tokens: 1500

Доступные модели на OpenRouter:

  • openai/gpt-4-turbo - высокое качество
  • openai/gpt-5-mini:nitro - быстро и дешево
  • anthropic/claude-3.5-sonnet - баланс цены/качества
  • google/gemini-pro-1.5 - экономичный вариант
  • xiaomi/mimo-v2-flash - очень быстро

📝 Промпты для LLM

system_prompt: |
  Ты - профессиональный финансовый аналитик...
  
prompt_template: |
  Проанализируй движение акции {ticker}...

🗄️ База данных

database:
  path: "data/stocks.db"   # Путь к SQLite БД
  keep_history: true       # Сохранять историю анализов

🔄 Обновление котировок

price_updates:
  strategy: "daily"  # always | daily | cache_only
  min_update_interval_minutes: 15

Стратегии:

  • always — всегда загружать свежие котировки (медленно, актуально)
  • daily — обновлять раз в день (рекомендуется)
  • cache_only — только из БД (быстро, может устареть)

📤 Экспорт результатов

export:
  output_path: "output/exports/{date}_analysis.xlsx"
  color_coding: true  # Цветовая кодировка трендов

🏢 Информация о компаниях

company_info:
  fallback_to_llm: true            # Использовать LLM если API не дал результат
  cache_duration_days: 30          # Кэш описаний на 30 дней
  llm_model: "openai/gpt-3.5-turbo"  # Модель для описаний

⏰ Планировщик задач (автоматический анализ)

scheduler:
  enabled: false               # Включить/выключить планировщик
  timezone: "Europe/Moscow"    # Временная зона для расписания
  schedule:                    # Список задач (можно несколько)
    - cron: "0 19 * * 1-5"     # Cron-выражение расписания
      description: "Ежедневный анализ после закрытия биржи"

Параметры планировщика:

Параметр Тип Описание
enabled boolean true — планировщик активен, false — отключён
timezone string Временная зона (список)
schedule array Массив задач с расписанием
schedule[].cron string Cron-выражение (минута час день месяц день_недели)
schedule[].description string Описание задачи (для логов)

Формат cron-выражения:

┌───────────── минута (0-59)
│ ┌─────────── час (0-23)
│ │ ┌───────── день месяца (1-31)
│ │ │ ┌─────── месяц (1-12)
│ │ │ │ ┌───── день недели (0-6, 0=воскресенье, 1-5=Пн-Пт)
│ │ │ │ │
* * * * *

Примеры cron:

Выражение Описание
0 19 * * 1-5 Каждый будний день (Пн-Пт) в 19:00
30 9 * * * Каждый день в 9:30
0 */4 * * * Каждые 4 часа (в 0:00, 4:00, 8:00...)
0 10,14,18 * * 1-5 В 10:00, 14:00 и 18:00 по будням
0 9 * * 1 Каждый понедельник в 9:00
0 0 1 * * Первого числа каждого месяца в полночь

Несколько расписаний:

scheduler:
  enabled: true
  timezone: "Europe/Moscow"
  schedule:
    - cron: "0 10 * * 1-5"
      description: "Утренний анализ перед открытием NYSE"
    - cron: "0 19 * * 1-5"
      description: "Вечерний анализ после закрытия биржи"
    - cron: "0 12 * * 6"
      description: "Еженедельный обзор в субботу"

Что происходит при срабатывании:

  1. Загружаются данные из config/companies.json
  2. Обновляются котировки через Yahoo Finance
  3. Запускается анализ через все настроенные LLM-модели
  4. Результаты сохраняются в базу данных
  5. Генерируется Excel-отчёт в output/exports/
  6. Все действия логируются в logs/scheduler.log

🌐 Веб-приложение

web_app:
  host: "0.0.0.0"     # Доступ с любого IP
  port: 8501          # Порт Streamlit
  theme: "dark"       # Темная тема
  mobile_friendly: true

📋 Логирование

logging:
  level: "INFO"  # DEBUG | INFO | WARNING | ERROR
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

📖 Полное описание всех параметров конфигурации

Ниже приведена полная справка по всем параметрам файла config/llm_config.yaml:

🔽 Развернуть полную справку по параметрам

📂 Секция input — Входные данные

Параметр Тип По умолчанию Описание
excel_file string "config/companies.json" Путь к файлу со списком компаний. В v3.0 используется JSON вместо Excel

🌐 Секция openrouter — Настройки OpenRouter API

Параметр Тип По умолчанию Описание
base_url string "https://openrouter.ai/api/v1" Базовый URL API OpenRouter. Изменять не нужно

🤖 Секция models — Модели LLM для анализа

Массив моделей, которые будут использоваться для анализа. Рекомендуется 2-3 модели для консенсуса.

Параметр Тип Обязательный Описание
name string Да Отображаемое имя модели (для интерфейса и логов)
id string Да Идентификатор модели в OpenRouter (см. модели)
temperature float Нет Креативность ответов: 0.0 (детерминированно) — 1.0 (креативно). Рекомендуется 0.2-0.4
max_tokens int Нет Максимальная длина ответа в токенах. 1500-3000 для полных ответов

Популярные модели:

ID модели Описание Цена
openai/gpt-4-turbo Высокое качество анализа $$$
openai/gpt-4o-mini Баланс цена/качество $$
openai/gpt-5-mini:nitro Быстрый и дешевый $
anthropic/claude-3.5-sonnet Отличное качество $$$
google/gemini-pro-1.5 Экономичный вариант $
xiaomi/mimo-v2-flash Очень быстрый $

📝 Секция system_prompt — Системный промпт

Многострочная строка с инструкциями для LLM. Определяет "роль" и ограничения модели.

system_prompt: |
  Ты - финансовый аналитик. Отвечай ТОЛЬКО на русском языке.
  Анализируй ТОЛЬКО данные из запроса. НЕ придумывай новости и события.
  Будь кратким и по делу.

Рекомендации:

  • Укажите язык ответа
  • Ограничьте источники данных (защита от галлюцинаций)
  • Задайте стиль ответа

📋 Секция prompt_template — Шаблон запроса

Шаблон промпта с плейсхолдерами для данных акции.

Плейсхолдер Описание
{ticker} Тикер акции (AAPL, MSFT и т.д.)
{price} Текущая цена
{change} Изменение в процентах
{volume} Объем торгов
{additional_info} Дополнительная информация о компании

🗄️ Секция database — База данных

Параметр Тип По умолчанию Описание
path string "data/stocks.db" Путь к файлу SQLite базы данных
keep_history boolean true Сохранять историю анализов (true) или перезаписывать (false)

🔄 Секция price_updates — Обновление котировок

Параметр Тип По умолчанию Описание
strategy string "daily" Стратегия обновления котировок
min_update_interval_minutes int 15 Минимальный интервал между обновлениями (для strategy: "always")

Стратегии обновления:

Значение Описание Скорость Актуальность
"always" Всегда загружать свежие котировки через API Медленно Максимальная
"daily" Обновлять раз в день (рекомендуется) Быстро Хорошая
"cache_only" Использовать только кэш из БД Очень быстро Может устареть

📤 Секция export — Экспорт результатов

Параметр Тип По умолчанию Описание
output_path string "output/exports/{date}_analysis.xlsx" Путь для сохранения Excel-отчёта. {date} заменяется на текущую дату
color_coding boolean true Цветовая кодировка трендов в Excel (зелёный/красный)

🏢 Секция company_info — Информация о компаниях

Параметр Тип По умолчанию Описание
fallback_to_llm boolean true Использовать LLM для получения описания, если API не вернул данные
cache_duration_days int 30 Срок хранения кэша описаний компаний (дней)
llm_model string "openai/gpt-3.5-turbo" Модель для генерации описаний компаний

⏰ Секция scheduler — Планировщик автоматического анализа

Параметр Тип По умолчанию Описание
enabled boolean false Включить (true) или выключить (false) планировщик
timezone string "Europe/Moscow" Временная зона для расписания (список зон)
schedule array Массив задач с расписанием
schedule[].cron string Cron-выражение: минута час день месяц день_недели
schedule[].description string Описание задачи (для логов)

Формат cron:

┌───────────── минута (0-59)
│ ┌─────────── час (0-23)
│ │ ┌───────── день месяца (1-31)
│ │ │ ┌─────── месяц (1-12)
│ │ │ │ ┌───── день недели (0-6, где 0=Вс, 1=Пн ... 6=Сб)
│ │ │ │ │      также можно: 1-5 = Пн-Пт
* * * * *

Примеры cron-выражений:

Выражение Описание
0 19 * * 1-5 Каждый будний день (Пн-Пт) в 19:00
30 9 * * * Каждый день в 9:30
0 */4 * * * Каждые 4 часа
0 10,14,18 * * 1-5 В 10:00, 14:00 и 18:00 по будням
0 0 1 * * Первого числа каждого месяца в полночь

🌐 Секция web_app — Веб-приложение Streamlit

Параметр Тип По умолчанию Описание
host string "0.0.0.0" IP для прослушивания. 0.0.0.0 = все интерфейсы, 127.0.0.1 = только localhost
port int 8501 Порт веб-приложения
theme string "dark" Тема интерфейса: "dark" или "light"
mobile_friendly boolean true Оптимизация для мобильных устройств

📋 Секция logging — Логирование

Параметр Тип По умолчанию Описание
level string "INFO" Уровень логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL
format string см. ниже Формат сообщений лога

Уровни логирования:

Уровень Описание
DEBUG Детальная отладочная информация
INFO Общая информация о работе
WARNING Предупреждения (не критичные проблемы)
ERROR Ошибки (операция не выполнена)
CRITICAL Критические ошибки (приложение может упасть)

🏢 3. Список компаний: config/companies.json

Что здесь: Компании для анализа

{
  "companies": [
    {
      "ticker": "AAPL",
      "name": "Apple Inc.",
      "sector": "Technology",
      "industry": "Consumer Electronics"
    },
    {
      "ticker": "MSFT",
      "name": "Microsoft Corporation",
      "sector": "Technology",
      "industry": "Software"
    }
  ],
  "last_updated": "2026-02-04T12:00:00"
}

Минимально достаточно:

{
  "companies": [
    {"ticker": "AAPL"},
    {"ticker": "MSFT"}
  ]
}

Остальные поля заполнятся автоматически!

📝 Как редактировать настройки

Способ 1: Через веб-интерфейс (рекомендуется)

streamlit run app.py

Перейдите в ⚙️ НастройкиУправление компаниями

Способ 2: Вручную через файлы

  1. Откройте нужный файл в редакторе:

    • config/api_keys.yaml — для API ключей
    • config/llm_config.yaml — для всех остальных настроек
    • config/companies.json — для списка компаний
  2. Внесите изменения

  3. Сохраните файл

  4. Перезапустите приложение

⚠️ Важно!

  • НЕ КОММИТЬТЕ файлы config/*.yaml и config/*.json в Git
  • ✅ Они уже в .gitignore
  • ✅ Используйте *.example.* файлы как шаблоны
  • ✅ API ключи храните в безопасности

🔍 Проверка настроек

# Тест загрузки конфигурации
python test_config_loading.py

Должен показать:

✅ ВСЕ ПРОВЕРКИ ПРОЙДЕНЫ!

💰 Примерная стоимость

Для 100 акций × 3 модели: ~$1-2 за полный анализ

Расчет:

  • 1 акция × 3 модели = 3 запроса
  • ~1500 токенов на запрос (prompt + response)
  • Средняя цена: $0.005-$0.01 за 1000 токенов
  • 100 акций = 300 запросов ≈ $1.5-$3

Экономия:

  • Используйте daily стратегию — анализ раз в день
  • Выбирайте дешевые модели: gpt-3.5-turbo, gemini-flash
  • Ограничьте max_tokens до 1000 для кратких ответов

📖 Примеры использования

Пример 1: Анализ портфеля из 10 акций

Компании:

{
  "companies": [
    {"ticker": "AAPL"}, {"ticker": "MSFT"}, {"ticker": "GOOGL"},
    {"ticker": "NVDA"}, {"ticker": "AMD"}, {"ticker": "TSLA"},
    {"ticker": "META"}, {"ticker": "AMZN"}, {"ticker": "NFLX"},
    {"ticker": "DIS"}
  ]
}

Запуск:

python main.py

Результат:

  • Текущие котировки из Yahoo Finance
  • Анализ от 3 моделей LLM
  • Консенсусный прогноз
  • Экспорт в Excel output/exports/2026-02-04_analysis.xlsx

Пример 2: Веб-мониторинг в реальном времени

streamlit run app.py

Возможности:

  1. Обзор — метрики портфеля
  2. Анализ — детали по каждой акции
  3. История — графики трендов
  4. Точность — согласие моделей
  5. Настройки — добавление/удаление компаний

Пример 3: Автоматический ежедневный анализ

1. Настройте планировщик в config/llm_config.yaml:

scheduler:
  enabled: true
  timezone: "Europe/Moscow"
  schedule:
    - cron: "0 19 * * 1-5"  # Будни в 19:00

2. Запустите планировщик:

bin\start_scheduler.bat

3. Результат:

  • Автоматический анализ каждый будний день в 19:00
  • Экспорт результатов в Excel
  • Сохранение в БД для истории

Пример 4: Добавление новой компании через API

Через веб-интерфейс:

  1. Откройте http://localhost:8501
  2. Перейдите в "⚙️ Настройки"
  3. Введите тикер (например, TSLA)
  4. Нажмите "Добавить"

Система автоматически:

  • ✅ Получит текущую цену через Yahoo Finance
  • ✅ Запросит описание компании через LLM
  • ✅ Сохранит в config/companies.json
  • ✅ Добавит в базу данных

Пример 5: Экспорт и анализ истории

1. Запустите несколько раз для накопления истории:

# День 1
python main.py

# День 2
python main.py

# День 3
python main.py

2. Просмотрите историю в веб-интерфейсе:

streamlit run app.py

Перейдите в раздел "📈 История" — увидите графики изменения прогнозов во времени

🌐 Веб-интерфейс

Страницы приложения:

  1. Обзор - метрики и последние результаты
  2. Анализ - детальный просмотр по акциям
  3. История - тренды во времени
  4. Точность - статистика моделей
  5. Настройки - управление и экспорт

⏰ Автоматический запуск (Планировщик)

Планировщик позволяет автоматически запускать анализ котировок по расписанию без ручного вмешательства.

Быстрая настройка

1. Включите планировщик в config/llm_config.yaml:

scheduler:
  enabled: true                # ← Измените на true
  timezone: "Europe/Moscow"
  schedule:
    - cron: "0 19 * * 1-5"     # Будни в 19:00 МСК
      description: "Ежедневный анализ после закрытия биржи"

2. Запустите планировщик:

# Windows
bin\start_scheduler.bat

# Linux/Mac
python scheduler.py

3. Планировщик будет работать в фоне, логи пишутся в logs/scheduler.log

Подробное описание параметров

Параметр Значение Описание
enabled true / false Включить/выключить автоматический запуск
timezone Europe/Moscow Временная зона для расписания
schedule массив Список задач с cron-выражениями

Формат cron-выражения

┌───────────── минута (0-59)
│ ┌─────────── час (0-23)  
│ │ ┌───────── день месяца (1-31)
│ │ │ ┌─────── месяц (1-12)
│ │ │ │ ┌───── день недели (0-6, где 0=Вс, 1=Пн, ..., 6=Сб)
│ │ │ │ │
* * * * *

Примеры расписаний

Cron Когда запустится
0 19 * * 1-5 Каждый будний день (Пн-Пт) в 19:00
30 9 * * * Каждый день в 9:30
0 */4 * * * Каждые 4 часа (0:00, 4:00, 8:00, 12:00, 16:00, 20:00)
0 10,14,18 * * 1-5 В 10:00, 14:00 и 18:00 по будням
0 9 * * 1 Каждый понедельник в 9:00
0 0 1 * * Первого числа каждого месяца в полночь
0 22 * * 0 Каждое воскресенье в 22:00

Несколько расписаний

Можно настроить несколько задач с разным расписанием:

scheduler:
  enabled: true
  timezone: "Europe/Moscow"
  schedule:
    - cron: "0 10 * * 1-5"
      description: "Утренний анализ перед открытием NYSE"
    - cron: "0 19 * * 1-5"
      description: "Вечерний анализ после закрытия биржи"
    - cron: "0 12 * * 6"
      description: "Еженедельный обзор в субботу"

Что происходит при срабатывании

При каждом запуске по расписанию:

  1. 📥 Загружаются компании из config/companies.json
  2. 📈 Обновляются котировки через Yahoo Finance
  3. 🤖 Запускается анализ через все настроенные LLM-модели
  4. 💾 Результаты сохраняются в базу данных data/stocks.db
  5. 📊 Генерируется Excel-отчёт в output/exports/YYYY-MM-DD_analysis.xlsx
  6. 📝 Все действия логируются в logs/scheduler.log

Мониторинг работы

Просмотр логов в реальном времени:

# Windows PowerShell
Get-Content logs\scheduler.log -Wait -Tail 50

# Linux/Mac
tail -f logs/scheduler.log

Пример вывода лога:

2026-02-05 19:00:00 - scheduler - INFO - ЗАПУСК АВТОМАТИЧЕСКОГО АНАЛИЗА
2026-02-05 19:00:01 - scheduler - INFO - Загружено 15 акций
2026-02-05 19:02:45 - scheduler - INFO - Анализ завершен: 15 успешно, 0 ошибок
2026-02-05 19:02:46 - scheduler - INFO - Отчет сохранен: output/exports/2026-02-05_analysis.xlsx

Остановка планировщика

  • Windows: Нажмите Ctrl+C в окне терминала
  • Linux/Mac: Ctrl+C или kill <PID>

Запуск как службы (для серверов)

Linux (systemd):

# Создайте файл /etc/systemd/system/stock-scheduler.service
[Unit]
Description=Stock Quotes Scheduler
After=network.target

[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/Stock_Quotes
ExecStart=/path/to/venv/bin/python scheduler.py
Restart=always

[Install]
WantedBy=multi-user.target

# Включите и запустите
sudo systemctl enable stock-scheduler
sudo systemctl start stock-scheduler

Windows (Task Scheduler):

  1. Откройте "Планировщик заданий"
  2. Создайте новую задачу
  3. Укажите путь к bin\start_scheduler.bat
  4. Настройте автозапуск при входе в систему

🛡️ Защита от галлюцинаций

Многоуровневая система:

  • Строгий system prompt с ограничениями
  • Низкая temperature (0.3)
  • Структурированный формат ответа
  • Валидация подозрительных паттернов
  • Консенсус между моделями

📱 Доступ с мобильного

В локальной сети:

  1. Узнайте IP сервера: hostname -I
  2. На телефоне: http://192.168.x.x:8501

Через интернет:

  • Настройте деплой (см. раздел Deploy)
  • Используйте ngrok для быстрого теста

🐳 Деплой с Docker

# Сборка
docker build -t stock-analyzer .

# Запуск
docker run -p 8501:8501 -v $(pwd)/data:/app/data stock-analyzer

С docker-compose:

cd deploy
docker-compose up -d

📝 Логирование

Логи доступны в:

  • logs/analysis.log - анализ
  • logs/scheduler.log - планировщик
  • logs/app.log - веб-приложение

Просмотр в реальном времени:

tail -f logs/analysis.log

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

✅ Защита API ключей (v3.0)

  • ✅ API ключи в отдельном файле config/api_keys.yaml
  • ✅ Все конфиги в .gitignore — не попадут в Git
  • ✅ Example-файлы для шаблонов (без секретов)
  • НЕ КОММИТЬТЕ файлы с реальными ключами!

✅ Производственная среда

  • ✅ Используйте .env для дополнительных секретов
  • ✅ Настройте firewall (только порт 8501)
  • ✅ Регулярные бэкапы data/stocks.db
  • ✅ HTTPS через nginx/Caddy для публичного доступа

🔒 Структура безопасности

config/
├── api_keys.yaml           ❌ В .gitignore
├── llm_config.yaml         ❌ В .gitignore
├── companies.json          ❌ В .gitignore
├── api_keys.example.yaml   ✅ В Git (шаблон)
├── llm_config.example.yaml ✅ В Git (шаблон)
└── companies.example.json  ✅ В Git (шаблон)

🤝 Поддержка и Troubleshooting

🔍 Диагностика проблем

1. Проверка конфигурации

python test_config_loading.py

2. Проверка котировок

python test_price_loading.py

3. Проверка БД

python check_current_db_data.py

❓ Частые проблемы

Ошибка: "Конфигурация не найдена"

Решение:

# Создайте конфигурацию из примеров
copy config\api_keys.example.yaml config\api_keys.yaml
copy config\llm_config.example.yaml config\llm_config.yaml
copy config\companies.example.json config\companies.json

Ошибка: "API key не указан"

Решение:

  1. Откройте config/api_keys.yaml
  2. Добавьте ключ от OpenRouter
  3. Получить ключ: https://openrouter.ai/keys

Котировки не обновляются

Решение:

  1. Измените стратегию в config/llm_config.yaml:
    price_updates:
      strategy: "always"  # принудительное обновление
  2. Очистите кэш БД:
    bin\clear_database.bat

Описания компаний на английском

Решение:

# Очистите кэш
Remove-Item "data/cache/*" -Force

# Перезапустите приложение
streamlit run app.py

📋 Логи

Логи доступны в:

  • logs/analysis.log — анализ акций
  • logs/scheduler.log — планировщик
  • logs/app.log — веб-приложение

Просмотр в реальном времени:

# Windows PowerShell
Get-Content logs\analysis.log -Wait -Tail 50

# Linux/Mac
tail -f logs/analysis.log

📚 Дополнительная документация

📄 Лицензия

MIT License

📝 История версий

v3.0 (2026-02-04)

  • ✅ Автоматическое получение котировок через Yahoo Finance
  • ✅ Разделение конфигурации на отдельные файлы
  • ✅ Управление компаниями через веб-интерфейс
  • ✅ Автоматическая синхронизация с companies.json
  • ✅ Улучшенная безопасность (API ключи в .gitignore)
  • ✅ Скрипт миграции с v2.x

v2.x

  • Работа с Excel файлами
  • Единый файл конфигурации config.yaml
  • Ручное обновление котировок

🎯 Roadmap

  • Telegram бот для уведомлений
  • Интеграция с дополнительными биржевыми API
  • Машинное обучение на исторических данных
  • Поддержка криптовалют
  • REST API для интеграций
  • Мультивалютность (EUR, RUB, и т.д.)

About

Анализ котировок LLM

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages