MaksimWW/ai-invest-sandbox

Python

0

136 commits

updated Jun 24, 2025

See the code

README

Tinkoff Invest Sandbox Setup

Этот проект содержит скрипт для настройки песочного счёта в Tinkoff Invest API.

Настройка

  1. Получите токен для песочницы на developers.tinkoff.ru

  2. Создайте файл .env в корне проекта и добавьте в него ваш токен:

TINKOFF_SANDBOX_TOKEN=ваш_токен_здесь
  1. Установите зависимости:
pip install -r requirements.txt

Запуск

Настройка песочного счёта

Для настройки песочного счёта и проверки баланса выполните:

python setup_sandbox.py

Скрипт выполнит следующие действия:

  • Проверит наличие токена в переменных окружения
  • Откроит новый песочный счёт (если отсутствует)
  • Пополнит счёт на 100 000 ₽
  • Выведет текущий баланс портфеля

Как запустить бота

Для запуска Telegram-бота с ежедневным планом:

  1. Настройте переменные окружения в файле .env:
TINKOFF_SANDBOX_TOKEN=ваш_токен_тинькофф
TELEGRAM_TOKEN=ваш_telegram_bot_token
TELEGRAM_CHAT_ID=ваш_chat_id
SHEETS_WEBHOOK_URL=ваш_google_sheets_webhook_url
SHEETS_TOKEN=ваш_токен_для_sheets
  1. Получите Telegram токен:

    • Найдите @BotFather в Telegram
    • Создайте нового бота командой /newbot
    • Скопируйте полученный токен
  2. Узнайте Chat ID:

    • Напишите боту любое сообщение
    • Перейдите по ссылке: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
    • Найдите "chat":{"id":ЧИСЛО} - это ваш Chat ID
  3. Запустите бота:

python daily_plan_bot.py bot

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

Для запуска бота выполните:

python daily_plan_bot.py bot

Возможности

🔍 Источники новостей:

  • NewsAPI (платный, качественные источники)
  • RSS ленты (бесплатные, быстрые)
  • GDELT Project (глобальная база новостей)

🔧 GDELT временно отключён (ENV GDELT_OFF=1). Используются только NewsAPI и RSS.

🔍 GDELT Connectivity Check

Для диагностики проблем с подключением к GDELT API используйте специальные инструменты:

Быстрая диагностика

./run_gdelt_diag.sh

Ручная проверка

# Только диагностика
python -m tools.gdelt_diag

# Только тесты
python -m pytest tests/test_gdelt_diag.py -v

Что проверяется:

  • Ping test: доступность API endpoint
  • Latency: время отклика
  • Search test: выполнение реального запроса
  • JSON parsing: корректность ответа

Интерпретация результатов:

  • ✅ OK - GDELT API работает нормально
  • ⏰ Timeout - проблемы сети или перегрузка API
  • 🌐 Connection Error - блокировка или недоступность сервиса
  • ❌ HTTP Error - проблемы на стороне GDELT

Если диагностика показывает проблемы, бот автоматически переключится на NewsAPI + RSS источники.

Бот получит актуальные цены акций YNDX и FXIT, проанализирует торговые сигналы и отправит их в Telegram или выведет в консоль (если Telegram не настроен).

Сигналы

SMA Breakout

Проект включает индикатор SMA Breakout, который анализирует пересечение скользящих средних:

  • SMA20 — простая скользящая средняя за 20 периодов
  • SMA50 — простая скользящая средняя за 50 периодов

Логика сигналов:

  • BUY — SMA20 пересекла SMA50 снизу вверх на последней свече (восходящий тренд)
  • SELL — SMA20 пересекла SMA50 сверху вниз на последней свече (нисходящий тренд)
  • HOLD — нет пересечения или недостаточно данных

Анализ проводится на часовых свечах за последние 200 периодов.

Логирование сделок в Google Sheets

Бот может автоматически логировать торговые сигналы в Google Sheets для ведения журнала сделок.

Настройка:

  1. Создайте Google Apps Script с webhook для приема данных
  2. Добавьте в .env файл:
SHEETS_WEBHOOK_URL=https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec
SHEETS_TOKEN=ваш_секретный_токен

Функции:

  • log_trade() — основная функция для логирования сделок
  • log_signal_trade() — упрощенная функция для сигналов бота
  • test_sheets_connection() — проверка подключения

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

python trade_logger.py

Команда /signals

Анализирует торговые сигналы с настраиваемыми параметрами:

/signals [fast] [slow] [ATR]
  • fast, slow — периоды SMA, по умолчанию 20/50
  • ATR — минимальная относительная волатильность, 1.0 = средний ATR

Примеры:

  • /signals — SMA20/50, ATR≥1.0 (по умолчанию)
  • /signals 10 40 — SMA10/40, ATR≥1.0
  • /signals 10 40 1.2 — SMA10/40, ATR≥1.2 (высокая волатильность)

Команда /ideas

Возвращает композитные торговые идеи, объединяющие технический анализ и анализ настроения новостей:

/ideas [fast] [slow] [ATR]
  • fast, slow — периоды SMA для технического анализа (по умолчанию 5/15)
  • ATR — минимальная относительная волатильность (по умолчанию 0)

Алгоритм:

  1. Технический сигнал: BUY = +1, SELL = -1, HOLD = 0
  2. Настроение новостей: позитивные = +1, негативные = -1, нейтральные = 0
  3. Итоговый скор: Technical + Sentiment
  4. Фильтр: показываются только бумаги с |скор| ≥ 2

Примеры:

  • /ideas — SMA5/15, ATR≥0 (по умолчанию)
  • /ideas 10 30 1.0 — SMA10/30, ATR≥1.0 (высокая волатильность)

Пример результата:

💡 Композит-идеи SMA5/15 ATR≥0:
• YNDX   LONG (score 2)
• FXIT   SHORT (score -2)

Пример сообщения

📈 План на 2025-06-12
• YNDX: 2 510,35 ₽
  Signal: BUY
• FXIT: 120,45 ₽
  Signal: HOLD

MaksimWW/ai-invest-sandbox

Python

0

136 commits

updated Jun 24, 2025

See the code

README

Tinkoff Invest Sandbox Setup

Этот проект содержит скрипт для настройки песочного счёта в Tinkoff Invest API.

Настройка

  1. Получите токен для песочницы на developers.tinkoff.ru

  2. Создайте файл .env в корне проекта и добавьте в него ваш токен:

TINKOFF_SANDBOX_TOKEN=ваш_токен_здесь
  1. Установите зависимости:
pip install -r requirements.txt

Запуск

Настройка песочного счёта

Для настройки песочного счёта и проверки баланса выполните:

python setup_sandbox.py

Скрипт выполнит следующие действия:

  • Проверит наличие токена в переменных окружения
  • Откроит новый песочный счёт (если отсутствует)
  • Пополнит счёт на 100 000 ₽
  • Выведет текущий баланс портфеля

Как запустить бота

Для запуска Telegram-бота с ежедневным планом:

  1. Настройте переменные окружения в файле .env:
TINKOFF_SANDBOX_TOKEN=ваш_токен_тинькофф
TELEGRAM_TOKEN=ваш_telegram_bot_token
TELEGRAM_CHAT_ID=ваш_chat_id
SHEETS_WEBHOOK_URL=ваш_google_sheets_webhook_url
SHEETS_TOKEN=ваш_токен_для_sheets
  1. Получите Telegram токен:

    • Найдите @BotFather в Telegram
    • Создайте нового бота командой /newbot
    • Скопируйте полученный токен
  2. Узнайте Chat ID:

    • Напишите боту любое сообщение
    • Перейдите по ссылке: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
    • Найдите "chat":{"id":ЧИСЛО} - это ваш Chat ID
  3. Запустите бота:

python daily_plan_bot.py bot

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

Для запуска бота выполните:

python daily_plan_bot.py bot

Возможности

🔍 Источники новостей:

  • NewsAPI (платный, качественные источники)
  • RSS ленты (бесплатные, быстрые)
  • GDELT Project (глобальная база новостей)

🔧 GDELT временно отключён (ENV GDELT_OFF=1). Используются только NewsAPI и RSS.

🔍 GDELT Connectivity Check

Для диагностики проблем с подключением к GDELT API используйте специальные инструменты:

Быстрая диагностика

./run_gdelt_diag.sh

Ручная проверка

# Только диагностика
python -m tools.gdelt_diag

# Только тесты
python -m pytest tests/test_gdelt_diag.py -v

Что проверяется:

  • Ping test: доступность API endpoint
  • Latency: время отклика
  • Search test: выполнение реального запроса
  • JSON parsing: корректность ответа

Интерпретация результатов:

  • ✅ OK - GDELT API работает нормально
  • ⏰ Timeout - проблемы сети или перегрузка API
  • 🌐 Connection Error - блокировка или недоступность сервиса
  • ❌ HTTP Error - проблемы на стороне GDELT

Если диагностика показывает проблемы, бот автоматически переключится на NewsAPI + RSS источники.

Бот получит актуальные цены акций YNDX и FXIT, проанализирует торговые сигналы и отправит их в Telegram или выведет в консоль (если Telegram не настроен).

Сигналы

SMA Breakout

Проект включает индикатор SMA Breakout, который анализирует пересечение скользящих средних:

  • SMA20 — простая скользящая средняя за 20 периодов
  • SMA50 — простая скользящая средняя за 50 периодов

Логика сигналов:

  • BUY — SMA20 пересекла SMA50 снизу вверх на последней свече (восходящий тренд)
  • SELL — SMA20 пересекла SMA50 сверху вниз на последней свече (нисходящий тренд)
  • HOLD — нет пересечения или недостаточно данных

Анализ проводится на часовых свечах за последние 200 периодов.

Логирование сделок в Google Sheets

Бот может автоматически логировать торговые сигналы в Google Sheets для ведения журнала сделок.

Настройка:

  1. Создайте Google Apps Script с webhook для приема данных
  2. Добавьте в .env файл:
SHEETS_WEBHOOK_URL=https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec
SHEETS_TOKEN=ваш_секретный_токен

Функции:

  • log_trade() — основная функция для логирования сделок
  • log_signal_trade() — упрощенная функция для сигналов бота
  • test_sheets_connection() — проверка подключения

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

python trade_logger.py

Команда /signals

Анализирует торговые сигналы с настраиваемыми параметрами:

/signals [fast] [slow] [ATR]
  • fast, slow — периоды SMA, по умолчанию 20/50
  • ATR — минимальная относительная волатильность, 1.0 = средний ATR

Примеры:

  • /signals — SMA20/50, ATR≥1.0 (по умолчанию)
  • /signals 10 40 — SMA10/40, ATR≥1.0
  • /signals 10 40 1.2 — SMA10/40, ATR≥1.2 (высокая волатильность)

Команда /ideas

Возвращает композитные торговые идеи, объединяющие технический анализ и анализ настроения новостей:

/ideas [fast] [slow] [ATR]
  • fast, slow — периоды SMA для технического анализа (по умолчанию 5/15)
  • ATR — минимальная относительная волатильность (по умолчанию 0)

Алгоритм:

  1. Технический сигнал: BUY = +1, SELL = -1, HOLD = 0
  2. Настроение новостей: позитивные = +1, негативные = -1, нейтральные = 0
  3. Итоговый скор: Technical + Sentiment
  4. Фильтр: показываются только бумаги с |скор| ≥ 2

Примеры:

  • /ideas — SMA5/15, ATR≥0 (по умолчанию)
  • /ideas 10 30 1.0 — SMA10/30, ATR≥1.0 (высокая волатильность)

Пример результата:

💡 Композит-идеи SMA5/15 ATR≥0:
• YNDX   LONG (score 2)
• FXIT   SHORT (score -2)

Пример сообщения

📈 План на 2025-06-12
• YNDX: 2 510,35 ₽
  Signal: BUY
• FXIT: 120,45 ₽
  Signal: HOLD