Egeekle's picture
Update Readme
62ef7ef verified

A newer version of the Streamlit SDK is available: 1.56.0

Upgrade
metadata
title: Investment Assistant - ETF & Crypto
emoji: 📊
colorFrom: blue
colorTo: green
sdk: streamlit
sdk_version: 1.51.0
app_file: app.py
pinned: false
license: mit

📊 Investment Assistant - ETF & Crypto

Asistente de inversiones inteligente para ETF y Criptomonedas con estrategias Top/Bottom, usando servicios de Azure para análisis de noticias financieras y recomendaciones basadas en IA.

🚀 Deploy on Hugging Face Spaces

This app is configured for deployment on Hugging Face Spaces. To deploy:

  1. Create a new Space on Hugging Face Spaces

    • Choose Streamlit as the SDK
    • Set the repository to public or private
  2. Configure Secrets (Settings → Secrets):

    • AZURE_OPENAI_ENDPOINT - Your Azure OpenAI endpoint
    • AZURE_OPENAI_API_KEY - Your Azure OpenAI API key
    • AZURE_OPENAI_DEPLOYMENT - Your deployment name (default: gpt-4)
    • AZURE_TEXT_ANALYTICS_ENDPOINT - Azure Text Analytics endpoint (optional)
    • AZURE_TEXT_ANALYTICS_KEY - Azure Text Analytics API key (optional)
    • ALPHA_VANTAGE_API_KEY - Alpha Vantage API key for ETF data (optional)
  3. Push your code to the Space repository

  4. Access your app at https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME

📝 Features

  • 💬 AI Chat Assistant - Get investment advice powered by Azure OpenAI
  • 📈 Market Analysis - Real-time market data for ETFs and Cryptocurrencies
  • 🎯 Strategy Analysis - TOP (momentum) and BOTTOM (value) investment strategies
  • 📰 News Sentiment Analysis - Analyze financial news sentiment using Azure Text Analytics
  • 💼 Portfolio Management - Track your investment positions

🔧 Local Development

For local development, see the full README below.


📋 Estructura del Proyecto Entregable

1. Planteamiento del Problema

Negocio

En el contexto actual de los mercados financieros, los inversores enfrentan múltiples desafíos:

  • Sobrecarga de información: Existe una cantidad abrumadora de datos financieros, noticias y análisis que dificultan la toma de decisiones informadas.
  • Análisis técnico complejo: La interpretación de indicadores técnicos y patrones de mercado requiere conocimiento especializado.
  • Análisis de sentimiento: La influencia de noticias y sentimiento del mercado sobre los precios es significativa pero difícil de cuantificar.
  • Estrategias de inversión: Existe confusión entre diferentes enfoques (momentum vs. value) y cuándo aplicar cada uno.
  • Diversificación: Gestión de portafolios que incluyen tanto activos tradicionales (ETF) como emergentes (Criptomonedas).

El objetivo del negocio es proporcionar una herramienta que democratice el acceso a análisis financiero avanzado mediante inteligencia artificial, permitiendo a inversores de todos los niveles tomar decisiones más informadas sobre inversiones en ETF y Criptomonedas.

Objetivos

Objetivo Principal: Desarrollar un sistema de asistencia inteligente para inversiones que combine análisis técnico, análisis de sentimiento de noticias y recomendaciones basadas en IA para soportar decisiones de inversión en ETF y Criptomonedas.

Objetivos Específicos:

  1. Análisis de Mercado en Tiempo Real

    • Obtener y procesar datos de mercado históricos y actuales para ETF y Criptomonedas
    • Calcular indicadores técnicos (RSI, medias móviles, volatilidad, posición de precio)
    • Visualizar tendencias y patrones de mercado
  2. Implementación de Estrategias de Inversión

    • Estrategia TOP (Momentum): Identificar oportunidades de compra en máximos con tendencia alcista
    • Estrategia BOTTOM (Value): Identificar oportunidades de compra en mínimos con potencial de rebote
    • Generar scores y recomendaciones (BUY/HOLD) basadas en múltiples factores
  3. Análisis de Sentimiento de Noticias

    • Analizar noticias financieras usando Azure Text Analytics
    • Correlacionar sentimiento con movimientos de precios
    • Agregar sentimiento por símbolo/activo
  4. Asistente Conversacional con IA

    • Integrar Azure OpenAI (GPT-4) para consultas sobre inversiones
    • Proporcionar explicaciones educativas sobre estrategias y conceptos financieros
    • Generar análisis contextualizados basados en datos de mercado
  5. Gestión de Portafolio

    • Permitir registro y seguimiento de posiciones
    • Visualizar portafolio completo con métricas agregadas

Hipótesis

  1. Hipótesis Principal: La combinación de análisis técnico, análisis de sentimiento de noticias y recomendaciones de IA puede mejorar la calidad de las decisiones de inversión en ETF y Criptomonedas, proporcionando señales más precisas que cada método por separado.

  2. Hipótesis Secundarias:

    • H1: Los indicadores técnicos (RSI, posición de precio, medias móviles) pueden identificar efectivamente momentos óptimos para aplicar estrategias TOP o BOTTOM.
    • H2: El sentimiento de noticias financieras correlaciona con movimientos de precios y puede ser utilizado como señal adicional para decisiones de inversión.
    • H3: Un asistente LLM puede explicar conceptos financieros complejos y generar recomendaciones contextualizadas que ayuden a inversores no expertos.
    • H4: La combinación de datos estructurados (precios) y no estructurados (noticias) proporciona una visión más completa del mercado que datos estructurados solos.

Acciones que se Realizarán con los Entregables

Los entregables del proyecto serán utilizados para:

  1. Uso Educativo y de Aprendizaje

    • Estudiar la aplicación práctica de LLMs en análisis financiero
    • Entender la integración de servicios de Azure (OpenAI, Text Analytics) en aplicaciones reales
    • Aprender el desarrollo de sistemas de recomendación con múltiples fuentes de datos
  2. Demostración de Capacidades

    • Mostrar el potencial de IA generativa en el dominio financiero
    • Demostrar arquitectura híbrida (FastAPI + Streamlit) para aplicaciones de IA
    • Ejemplificar análisis de datos estructurados y no estructurados combinados
  3. Base para Extensión Futura

    • Plataforma base para agregar más estrategias de inversión
    • Base para integración con más fuentes de datos (redes sociales, reportes financieros)
    • Fundamentos para implementar backtesting y validación de estrategias
  4. Aplicación Práctica (con limitaciones)

    • Herramienta de apoyo para análisis de inversiones (no reemplaza asesoramiento profesional)
    • Prototipo para futuras aplicaciones comerciales en fintech
    • Caso de estudio para integración de múltiples servicios cloud

2. Acceso a Datos

Tipo de Datos

El proyecto utiliza múltiples fuentes de datos para proporcionar un análisis completo del mercado:

Datos Estructurados

1. Datos de Mercado - Precios Históricos

  • Fuente:
    • CoinGecko API (Criptomonedas) - Gratis, sin autenticación
    • Alpha Vantage API (ETF) - Requiere API key gratuita
  • Formato: JSON estructurado con time series
  • Campos:
    • Precio de cierre diario
    • Precio máximo y mínimo
    • Volumen de transacciones
    • Fechas/timestamps
  • Período: Últimos 30 días (configurable)
  • Ejemplo de estructura:
    {
      "current_price": 45000.50,
      "prices": [42000, 43000, ..., 45000.50],
      "dates": ["2024-01-01", "2024-01-02", ...],
      "high_30d": 46000,
      "low_30d": 41000,
      "change_30d": 7.14
    }
    

2. Indicadores Técnicos Calculados

  • Fuente: Cálculos derivados de datos de precios
  • Métricas:
    • RSI (Relative Strength Index)
    • Medias móviles (SMA 10, SMA 20)
    • Volatilidad (desviación estándar de retornos)
    • Posición de precio en rango (0-100%)
  • Formato: Diccionario JSON estructurado

3. Datos de Portafolio

  • Fuente: Almacenamiento local (investment_data.json)
  • Campos:
    • Símbolo del activo
    • Tipo de activo (ETF/CRYPTO)
    • Cantidad
    • Precio de compra
    • Fecha de compra
  • Formato: JSON estructurado persistente

Datos No Estructurados

1. Noticias Financieras

  • Fuente: Entrada manual del usuario o integración futura con APIs de noticias
  • Formato: Texto libre (artículos, headlines)
  • Campos:
    • Título
    • Contenido del artículo
    • Fuente
    • Fecha de publicación
  • Procesamiento:
    • Azure Text Analytics para análisis de sentimiento
    • Extracción de menciones de símbolos/activos
  • Salida: Sentimiento (positive/negative/neutral) con scores de confianza

2. Consultas de Usuario (Chat)

  • Fuente: Entrada del usuario en interfaz de chat
  • Formato: Texto natural en lenguaje libre
  • Procesamiento: Azure OpenAI (GPT-4) para generar respuestas contextualizadas
  • Contexto adicional: Datos de mercado, estrategias, historial de análisis

3. Análisis y Recomendaciones Generadas por IA

  • Fuente: Generación por Azure OpenAI basada en contexto
  • Formato: Texto explicativo estructurado
  • Contenido:
    • Recomendaciones de inversión
    • Explicaciones de estrategias
    • Análisis de riesgo
    • Razones para decisiones

3. Tipo de Solución a Elaborar

Arquitectura de la Solución

La solución implementa una arquitectura de microservicios híbrida con los siguientes componentes:

1. Backend API (FastAPI)

  • Lenguaje: Python 3.11+
  • Framework: FastAPI
  • Funcionalidades:
    • Endpoints RESTful para todas las operaciones
    • Integración con servicios de Azure (OpenAI, Text Analytics)
    • Lógica de negocio para estrategias TOP/BOTTOM
    • Cálculo de indicadores técnicos
    • Gestión de datos (portafolio, análisis, noticias)
  • Puerto: 8000
  • Documentación: Auto-generada en /docs (Swagger UI)

2. Frontend Web (Streamlit)

  • Framework: Streamlit
  • Funcionalidades:
    • Interfaz de usuario interactiva
    • Chat con asistente IA
    • Visualización de datos de mercado (Plotly)
    • Análisis de estrategias con métricas
    • Análisis de sentimiento de noticias
    • Gestión de portafolio
  • Puerto: 8501

3. Servicios de Azure

  • Azure OpenAI Service
    • Modelo: GPT-4 (configurable)
    • Uso: Generación de recomendaciones y explicaciones
  • Azure Text Analytics
    • Uso: Análisis de sentimiento de noticias financieras
    • Fallback: Análisis basado en palabras clave si no está disponible

4. APIs Externas

  • CoinGecko API: Datos de criptomonedas
  • Alpha Vantage API: Datos de ETF (opcional)

5. Almacenamiento

  • Local: Archivo JSON (investment_data.json)
  • Almacena: Portafolio, historial de análisis, noticias procesadas

Características Principales de la Solución

  1. Análisis de Mercado en Tiempo Real

    • Obtención automática de datos de mercado
    • Cálculo de indicadores técnicos
    • Visualización interactiva de gráficos
  2. Sistema de Estrategias Inteligente

    • Evaluación automática de condiciones para estrategia TOP
    • Evaluación automática de condiciones para estrategia BOTTOM
    • Scoring basado en múltiples factores
    • Recomendaciones con niveles de confianza
  3. Análisis de Sentimiento

    • Procesamiento de noticias financieras
    • Agregación de sentimiento por símbolo
    • Correlación con datos de mercado
  4. Asistente Conversacional

    • Interfaz de chat natural
    • Respuestas contextualizadas basadas en datos actuales
    • Explicaciones educativas sobre conceptos financieros
  5. Gestión de Portafolio

    • Registro de posiciones
    • Visualización de portafolio completo
    • Métricas agregadas

Tecnologías Utilizadas

  • Backend: Python, FastAPI, Uvicorn
  • Frontend: Streamlit, Plotly
  • IA/ML: Azure OpenAI (GPT-4), Azure Text Analytics
  • Datos: Pandas, NumPy
  • APIs: httpx, requests
  • Visualización: Plotly, Plotly Express
  • Configuración: python-dotenv
  • Validación: Pydantic

4. Cronograma de Trabajo

Fase 1: Análisis y Diseño (Semana 1-2)

  • Planteamiento del problema y definición de objetivos
  • Investigación de APIs disponibles (CoinGecko, Alpha Vantage)
  • Diseño de arquitectura de la solución
  • Definición de estrategias TOP/BOTTOM
  • Configuración de servicios de Azure

Fase 2: Desarrollo Backend (Semana 3-4)

  • Configuración de proyecto FastAPI
  • Implementación de endpoints para datos de mercado
  • Desarrollo de cálculo de indicadores técnicos
  • Implementación de lógica de estrategias TOP/BOTTOM
  • Integración con Azure OpenAI
  • Integración con Azure Text Analytics
  • Endpoints de portafolio y noticias

Fase 3: Desarrollo Frontend (Semana 5-6)

  • Configuración de aplicación Streamlit
  • Implementación de interfaz de chat
  • Desarrollo de visualizaciones de mercado
  • Página de análisis de estrategias
  • Página de análisis de noticias
  • Interfaz de gestión de portafolio
  • Integración con backend API

Fase 4: Integración y Pruebas (Semana 7)

  • Integración completa backend-frontend
  • Pruebas de funcionalidad end-to-end
  • Validación de estrategias con datos reales
  • Pruebas de manejo de errores
  • Optimización de rendimiento

Fase 5: Documentación y Entrega (Semana 8)

  • Documentación técnica (README, QUICKSTART)
  • Documentación de API
  • Guías de instalación y configuración
  • Ejemplos de uso
  • Estructura del proyecto entregable (este documento)

Timeline Visual

Semana 1-2:  [Análisis y Diseño          ]
Semana 3-4:  [        Desarrollo Backend        ]
Semana 5-6:  [        Desarrollo Frontend       ]
Semana 7:    [  Integración y Pruebas  ]
Semana 8:    [  Documentación y Entrega  ]

Duración Total: 8 semanas


✨ Características

  • 🤖 Chat con Agente LLM: Consulta con Azure OpenAI sobre inversiones
  • 📈 Análisis de Mercado: Datos en tiempo real para ETF y Crypto
  • 🎯 Estrategias Top/Bottom:
    • TOP: Estrategia de momentum (comprar en máximos)
    • BOTTOM: Estrategia de valor (comprar en mínimos)
  • 📰 Análisis de Noticias: Sentiment analysis con Azure Text Analytics
  • 💼 Gestión de Portafolio: Seguimiento de posiciones
  • 📊 Visualizaciones Interactivas: Gráficos y métricas en tiempo real

🏗️ Arquitectura

  • Backend: FastAPI con integración Azure OpenAI y Text Analytics
  • Frontend: Streamlit con interfaz interactiva
  • Datos de Mercado:
    • ETFs: Alpha Vantage API (opcional) o CoinGecko
    • Crypto: CoinGecko API (gratis)
  • IA: Azure OpenAI (GPT-4) para recomendaciones
  • NLP: Azure Text Analytics para análisis de sentimiento

🚀 Instalación Rápida

Prerrequisitos

  • Python 3.11+
  • Cuenta de Azure con acceso a:
    • Azure OpenAI Service
    • Azure Text Analytics (opcional)
  • (Opcional) Alpha Vantage API key para datos de ETF

Paso 1: Clonar/Descargar

cd "LLM Finance"

Paso 2: Instalar Dependencias

pip install -r requirements.txt

Paso 3: Configurar Variables de Entorno

Copia env.example.txt a .env y configura tus credenciales de Azure:

copy env.example.txt .env

Edita .env con tus credenciales:

AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_KEY=your-api-key
AZURE_OPENAI_DEPLOYMENT=gpt-4

AZURE_TEXT_ANALYTICS_ENDPOINT=https://your-resource.cognitiveservices.azure.com/
AZURE_TEXT_ANALYTICS_KEY=your-key

ALPHA_VANTAGE_API_KEY=your-key  # Opcional

Paso 4: Ejecutar la Aplicación

Opción A: Usar script de inicio (Windows)

.\start.bat

Opción B: Manual

# Terminal 1: Backend
python main.py

# Terminal 2: Frontend
streamlit run streamlit_app.py

Paso 5: Acceder a la Aplicación

📖 Uso

Chat con IA

  1. Ve a la página "💬 Chat with AI"
  2. Haz preguntas como:
    • "¿Debería invertir en Bitcoin ahora?"
    • "Explícame la estrategia TOP vs BOTTOM"
    • "¿Qué ETFs recomiendas para diversificación?"

Análisis de Mercado

  1. Ve a "📈 Market Analysis"
  2. Ingresa símbolos (ETF: SPY, QQQ o Crypto: bitcoin, ethereum)
  3. Selecciona el tipo de activo
  4. Visualiza gráficos y métricas

Estrategias Top/Bottom

  1. Ve a "🎯 Strategy Analysis"
  2. Ingresa un símbolo (ej: SPY, bitcoin)
  3. Selecciona tipo de activo y estrategia
  4. Revisa:
    • Score de la estrategia
    • Recomendación (BUY/HOLD)
    • Razones basadas en indicadores técnicos
    • Análisis de IA

Estrategia TOP (Momentum):

  • Comprar cuando el precio está cerca de máximos
  • Seguir la tendencia alcista
  • Indicadores: RSI > 50, precio alto en rango, sentimiento positivo

Estrategia BOTTOM (Value):

  • Comprar cuando el precio está cerca de mínimos
  • Enfoque contrarian
  • Indicadores: RSI < 30, precio bajo en rango, oportunidad de rebote

Análisis de Noticias

  1. Ve a "📰 News Analysis"
  2. Analizar Noticias: Pega el contenido de una noticia financiera
  3. Sentimiento por Símbolo: Obtén el sentimiento agregado para un símbolo

Portafolio

  1. Ve a "💼 Portfolio"
  2. Agrega posiciones (símbolo, cantidad, precio de compra)
  3. Visualiza tu portafolio completo

🔧 Configuración de Azure

Azure OpenAI Service

  1. Crea un recurso de Azure OpenAI en el portal de Azure
  2. Despliega un modelo (GPT-4 o GPT-3.5-turbo)
  3. Obtén el endpoint y API key
  4. Configúralos en .env

Azure Text Analytics (Opcional)

  1. Crea un recurso de Text Analytics en Azure
  2. Obtén el endpoint y API key
  3. Si no se configura, la app usará análisis de sentimiento basado en palabras clave

📡 APIs Externas

CoinGecko (Crypto)

  • Gratis, sin API key necesaria
  • Usado para datos de criptomonedas

Alpha Vantage (ETF)

  • API key gratuita disponible
  • Usado para datos históricos de ETFs
  • Sin API key, algunas funciones pueden estar limitadas

🐳 Docker (Opcional)

docker-compose up --build

📊 Estructura del Proyecto

LLM Finance/
├── main.py                 # Backend FastAPI
├── streamlit_app.py        # Frontend Streamlit
├── requirements.txt        # Dependencias Python
├── env.example.txt         # Ejemplo de variables de entorno
├── .env                   # Variables de entorno (crear)
├── Dockerfile             # Configuración Docker
├── docker-compose.yml     # Orquestación Docker
├── start.bat              # Script de inicio Windows
├── start.sh               # Script de inicio Linux/Mac
├── README.md              # Este archivo
├── QUICKSTART.md          # Guía rápida
└── investment_data.json   # Datos locales (auto-generado)

🔌 Endpoints API

Chat

  • POST /chat - Chat con el agente LLM

Market Data

  • POST /market-data - Obtener datos de mercado

Strategy

  • POST /strategy - Análisis de estrategia Top/Bottom

News

  • POST /news/analyze - Analizar sentimiento de noticias
  • GET /news/sentiment/{symbol} - Sentimiento por símbolo

Portfolio

  • POST /portfolio - Agregar posición
  • GET /portfolio - Ver portafolio

Health

  • GET /health - Estado del API y servicios Azure

Ver documentación completa en: http://localhost:8000/docs

🎯 Estrategias de Inversión

TOP Strategy (Momentum)

Cuándo usar:

  • Precio cerca del 70% superior del rango de 30 días
  • RSI entre 50-70 (momentum sin sobrecompra)
  • Sentimiento positivo de noticias
  • Tendencia alcista (MA10 > MA20)

Riesgos:

  • Puede entrar tarde en la tendencia
  • Mayor riesgo de reversión

BOTTOM Strategy (Value)

Cuándo usar:

  • Precio cerca del 30% inferior del rango de 30 días
  • RSI < 30 (sobreventa)
  • Sentimiento negativo (oportunidad contrarian)
  • Potencial de rebote

Riesgos:

  • Puede caer más antes de recuperar
  • Requiere paciencia

⚠️ Disclaimer

Este software es solo para fines educativos. No constituye asesoramiento financiero. Siempre consulta con un profesional financiero antes de tomar decisiones de inversión.

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama para tu feature
  3. Commit tus cambios
  4. Push a la rama
  5. Abre un Pull Request

📝 Licencia

Este proyecto es de código abierto y está disponible bajo la licencia MIT.

🆘 Soporte

Si tienes problemas:

  1. Verifica que los servicios de Azure estén configurados
  2. Revisa los logs del backend
  3. Verifica que los puertos 8000 y 8501 estén disponibles
  4. Consulta la documentación de la API en /docs

Desarrollado con ❤️ usando Azure OpenAI y Cognitive Services