Версия 3.0 - Автоматический анализ котировок акций через OpenRouter API с использованием множественных LLM моделей (GPT-4, Claude 3, Gemini Pro).
🆕 v3.0: Автоматическое получение котировок через Yahoo Finance, улучшенная безопасность конфигурации, управление компаниями через веб-интерфейс
- ✨ Возможности
- 🚀 Быстрый старт
- ⚙️ Где находятся все настройки
- 📁 Структура проекта
- 📊 Формат данных
- 💰 Примерная стоимость
- 🌐 Веб-интерфейс
- ⏰ Автоматический запуск
- 🛡️ Защита от галлюцинаций
- 📱 Доступ с мобильного
- 🐳 Деплой с Docker
- 🔐 Безопасность
- 🤝 Поддержка и Troubleshooting
- 📄 Лицензия
- 📝 История версий
- 🎯 Roadmap
- 🤖 Анализ через 3 LLM модели - консенсус повышает точность
- 📊 Интерактивные дашборды - визуализация трендов в реальном времени
- 📱 Адаптивный веб-интерфейс - работает на телефоне и компьютере
- 🔄 Автоматический запуск по расписанию - ежедневный анализ
- 💾 История данных - отслеживание трендов во времени
- 📈 Анализ точности - сравнение эффективности моделей
- 🛡️ Защита от галлюцинаций - многоуровневая валидация ответов
- 📄 Экспорт в Excel - форматированные отчеты
Рекомендуемый способ:
- Запустите
bin\setup.bat- автоматически проверит и установит все зависимости - Скопируйте примеры конфигурации:
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 ключ в
config/api_keys.yaml - Запустите
bin\quick_start.batдля быстрого старта
# Создание виртуального окружения (рекомендуется)
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txtСоздайте файлы конфигурации из примеров:
# 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.x, запустите миграцию:
python scripts/migrate_to_v3.pyПодробнее: Руководство по миграции
Список компаний хранится в config/companies.json
Добавьте компании одним из способов:
Вариант 1: Через веб-интерфейс (рекомендуется)
- Запустите:
streamlit run app.py - Перейдите в "Настройки" → "Управление компаниями"
- Добавьте компании по тикеру (например, AAPL, GOOGL, MSFT)
- Цены и информация получатся автоматически через Yahoo Finance
Вариант 2: Редактирование JSON вручную
- Отредактируйте
config/companies.json - Добавьте тикеры в массив
companies - При следующем запуске данные будут получены автоматически
Пример companies.json:
{
"companies": [
{"ticker": "AAPL"},
{"ticker": "GOOGL"},
{"ticker": "MSFT"}
],
"last_updated": "2026-02-04T12:00:00"
}Через веб-интерфейс (рекомендуется):
# Windows
bin\start_web.bat
# Linux/Mac
streamlit run app.pyПриложение откроется на http://localhost:8501
Через CLI:
# Windows
bin\start.bat
# Linux/Mac
python main.pyStock_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 # Планировщик задач
{
"companies": [
{
"ticker": "AAPL",
"name": "Apple Inc.",
"sector": "Technology",
"industry": "Consumer Electronics"
}
],
"last_updated": "2026-02-04T12:00:00"
}Минимально достаточно указать только ticker!
При добавлении новой компании система автоматически:
- Получает текущую цену через Yahoo Finance API
- Получает информацию о компании через LLM
- Сохраняет в базу данных для дальнейшего использования
- Обновляет
companies.jsonдля резервного копирования
В веб-интерфейсе (Настройки → Управление компаниями):
- ➕ Добавляйте компании по тикеру - остальное заполнится автоматически
- 🗑️ Удаляйте компании одной кнопкой
- 📥 Экспортируйте список компаний в JSON
- 🔍 Поиск по тикеру или названию
Все настройки разделены на 3 файла для безопасности и удобства:
config/
├── api_keys.yaml # 🔑 API ключи (не в Git!)
├── llm_config.yaml # ⚙️ Все настройки проекта (не в Git!)
└── companies.json # 🏢 Список компаний (не в Git!)
Что здесь:
- 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: ""Что здесь: ВСЕ настройки проекта в одном файле!
input:
excel_file: "config/companies.json" # Путь к списку компаний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- очень быстро
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: "Еженедельный обзор в субботу"Что происходит при срабатывании:
- Загружаются данные из
config/companies.json - Обновляются котировки через Yahoo Finance
- Запускается анализ через все настроенные LLM-модели
- Результаты сохраняются в базу данных
- Генерируется Excel-отчёт в
output/exports/ - Все действия логируются в
logs/scheduler.log
web_app:
host: "0.0.0.0" # Доступ с любого IP
port: 8501 # Порт Streamlit
theme: "dark" # Темная тема
mobile_friendly: truelogging:
level: "INFO" # DEBUG | INFO | WARNING | ERROR
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"Ниже приведена полная справка по всем параметрам файла config/llm_config.yaml:
🔽 Развернуть полную справку по параметрам
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
excel_file |
string | "config/companies.json" |
Путь к файлу со списком компаний. В v3.0 используется JSON вместо Excel |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
base_url |
string | "https://openrouter.ai/api/v1" |
Базовый URL API OpenRouter. Изменять не нужно |
Массив моделей, которые будут использоваться для анализа. Рекомендуется 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 |
Очень быстрый | $ |
Многострочная строка с инструкциями для LLM. Определяет "роль" и ограничения модели.
system_prompt: |
Ты - финансовый аналитик. Отвечай ТОЛЬКО на русском языке.
Анализируй ТОЛЬКО данные из запроса. НЕ придумывай новости и события.
Будь кратким и по делу.Рекомендации:
- Укажите язык ответа
- Ограничьте источники данных (защита от галлюцинаций)
- Задайте стиль ответа
Шаблон промпта с плейсхолдерами для данных акции.
| Плейсхолдер | Описание |
|---|---|
{ticker} |
Тикер акции (AAPL, MSFT и т.д.) |
{price} |
Текущая цена |
{change} |
Изменение в процентах |
{volume} |
Объем торгов |
{additional_info} |
Дополнительная информация о компании |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
path |
string | "data/stocks.db" |
Путь к файлу SQLite базы данных |
keep_history |
boolean | true |
Сохранять историю анализов (true) или перезаписывать (false) |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
strategy |
string | "daily" |
Стратегия обновления котировок |
min_update_interval_minutes |
int | 15 |
Минимальный интервал между обновлениями (для strategy: "always") |
Стратегии обновления:
| Значение | Описание | Скорость | Актуальность |
|---|---|---|---|
"always" |
Всегда загружать свежие котировки через API | Медленно | Максимальная |
"daily" |
Обновлять раз в день (рекомендуется) | Быстро | Хорошая |
"cache_only" |
Использовать только кэш из БД | Очень быстро | Может устареть |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
output_path |
string | "output/exports/{date}_analysis.xlsx" |
Путь для сохранения Excel-отчёта. {date} заменяется на текущую дату |
color_coding |
boolean | true |
Цветовая кодировка трендов в Excel (зелёный/красный) |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
fallback_to_llm |
boolean | true |
Использовать LLM для получения описания, если API не вернул данные |
cache_duration_days |
int | 30 |
Срок хранения кэша описаний компаний (дней) |
llm_model |
string | "openai/gpt-3.5-turbo" |
Модель для генерации описаний компаний |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
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 * * |
Первого числа каждого месяца в полночь |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
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 |
Оптимизация для мобильных устройств |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
level |
string | "INFO" |
Уровень логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL |
format |
string | см. ниже | Формат сообщений лога |
Уровни логирования:
| Уровень | Описание |
|---|---|
DEBUG |
Детальная отладочная информация |
INFO |
Общая информация о работе |
WARNING |
Предупреждения (не критичные проблемы) |
ERROR |
Ошибки (операция не выполнена) |
CRITICAL |
Критические ошибки (приложение может упасть) |
Что здесь: Компании для анализа
{
"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"}
]
}Остальные поля заполнятся автоматически!
streamlit run app.pyПерейдите в ⚙️ Настройки → Управление компаниями
-
Откройте нужный файл в редакторе:
config/api_keys.yaml— для API ключейconfig/llm_config.yaml— для всех остальных настроекconfig/companies.json— для списка компаний
-
Внесите изменения
-
Сохраните файл
-
Перезапустите приложение
- ❌ НЕ КОММИТЬТЕ файлы
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 для кратких ответов
Компании:
{
"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
streamlit run app.pyВозможности:
- Обзор — метрики портфеля
- Анализ — детали по каждой акции
- История — графики трендов
- Точность — согласие моделей
- Настройки — добавление/удаление компаний
1. Настройте планировщик в config/llm_config.yaml:
scheduler:
enabled: true
timezone: "Europe/Moscow"
schedule:
- cron: "0 19 * * 1-5" # Будни в 19:002. Запустите планировщик:
bin\start_scheduler.bat3. Результат:
- Автоматический анализ каждый будний день в 19:00
- Экспорт результатов в Excel
- Сохранение в БД для истории
Через веб-интерфейс:
- Откройте
http://localhost:8501 - Перейдите в "⚙️ Настройки"
- Введите тикер (например,
TSLA) - Нажмите "Добавить"
Система автоматически:
- ✅ Получит текущую цену через Yahoo Finance
- ✅ Запросит описание компании через LLM
- ✅ Сохранит в
config/companies.json - ✅ Добавит в базу данных
1. Запустите несколько раз для накопления истории:
# День 1
python main.py
# День 2
python main.py
# День 3
python main.py2. Просмотрите историю в веб-интерфейсе:
streamlit run app.pyПерейдите в раздел "📈 История" — увидите графики изменения прогнозов во времени
Страницы приложения:
- Обзор - метрики и последние результаты
- Анализ - детальный просмотр по акциям
- История - тренды во времени
- Точность - статистика моделей
- Настройки - управление и экспорт
Планировщик позволяет автоматически запускать анализ котировок по расписанию без ручного вмешательства.
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.py3. Планировщик будет работать в фоне, логи пишутся в logs/scheduler.log
| Параметр | Значение | Описание |
|---|---|---|
enabled |
true / false |
Включить/выключить автоматический запуск |
timezone |
Europe/Moscow |
Временная зона для расписания |
schedule |
массив | Список задач с 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: "Еженедельный обзор в субботу"При каждом запуске по расписанию:
- 📥 Загружаются компании из
config/companies.json - 📈 Обновляются котировки через Yahoo Finance
- 🤖 Запускается анализ через все настроенные LLM-модели
- 💾 Результаты сохраняются в базу данных
data/stocks.db - 📊 Генерируется Excel-отчёт в
output/exports/YYYY-MM-DD_analysis.xlsx - 📝 Все действия логируются в
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-schedulerWindows (Task Scheduler):
- Откройте "Планировщик заданий"
- Создайте новую задачу
- Укажите путь к
bin\start_scheduler.bat - Настройте автозапуск при входе в систему
Многоуровневая система:
- Строгий system prompt с ограничениями
- Низкая temperature (0.3)
- Структурированный формат ответа
- Валидация подозрительных паттернов
- Консенсус между моделями
- Узнайте IP сервера:
hostname -I - На телефоне:
http://192.168.x.x:8501
- Настройте деплой (см. раздел Deploy)
- Используйте ngrok для быстрого теста
# Сборка
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 ключи в отдельном файле
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 (шаблон)
python test_config_loading.pypython test_price_loading.pypython 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Решение:
- Откройте
config/api_keys.yaml - Добавьте ключ от OpenRouter
- Получить ключ: https://openrouter.ai/keys
Решение:
- Измените стратегию в
config/llm_config.yaml:price_updates: strategy: "always" # принудительное обновление
- Очистите кэш БД:
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- QUICK_START_V3.md — быстрый старт
- CHANGELOG_CONFIG.md — изменения в конфигурации
- CHANGELOG_PROMPTS.md — изменения промптов
- docs/ru/МИГРАЦИЯ_V3.md — миграция с v2.x
MIT License
- ✅ Автоматическое получение котировок через Yahoo Finance
- ✅ Разделение конфигурации на отдельные файлы
- ✅ Управление компаниями через веб-интерфейс
- ✅ Автоматическая синхронизация с
companies.json - ✅ Улучшенная безопасность (API ключи в .gitignore)
- ✅ Скрипт миграции с v2.x
- Работа с Excel файлами
- Единый файл конфигурации
config.yaml - Ручное обновление котировок
- Telegram бот для уведомлений
- Интеграция с дополнительными биржевыми API
- Машинное обучение на исторических данных
- Поддержка криптовалют
- REST API для интеграций
- Мультивалютность (EUR, RUB, и т.д.)