Spaces:
Build error
A newer version of the Streamlit SDK is available: 1.56.0
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:
Create a new Space on Hugging Face Spaces
- Choose Streamlit as the SDK
- Set the repository to public or private
Configure Secrets (Settings → Secrets):
AZURE_OPENAI_ENDPOINT- Your Azure OpenAI endpointAZURE_OPENAI_API_KEY- Your Azure OpenAI API keyAZURE_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)
Push your code to the Space repository
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:
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
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
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
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
Gestión de Portafolio
- Permitir registro y seguimiento de posiciones
- Visualizar portafolio completo con métricas agregadas
Hipótesis
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.
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:
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
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
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
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
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
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
Análisis de Sentimiento
- Procesamiento de noticias financieras
- Agregación de sentimiento por símbolo
- Correlación con datos de mercado
Asistente Conversacional
- Interfaz de chat natural
- Respuestas contextualizadas basadas en datos actuales
- Explicaciones educativas sobre conceptos financieros
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
- Frontend (Streamlit): http://localhost:8501
- Backend API Docs: http://localhost:8000/docs
📖 Uso
Chat con IA
- Ve a la página "💬 Chat with AI"
- 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
- Ve a "📈 Market Analysis"
- Ingresa símbolos (ETF: SPY, QQQ o Crypto: bitcoin, ethereum)
- Selecciona el tipo de activo
- Visualiza gráficos y métricas
Estrategias Top/Bottom
- Ve a "🎯 Strategy Analysis"
- Ingresa un símbolo (ej: SPY, bitcoin)
- Selecciona tipo de activo y estrategia
- 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
- Ve a "📰 News Analysis"
- Analizar Noticias: Pega el contenido de una noticia financiera
- Sentimiento por Símbolo: Obtén el sentimiento agregado para un símbolo
Portafolio
- Ve a "💼 Portfolio"
- Agrega posiciones (símbolo, cantidad, precio de compra)
- Visualiza tu portafolio completo
🔧 Configuración de Azure
Azure OpenAI Service
- Crea un recurso de Azure OpenAI en el portal de Azure
- Despliega un modelo (GPT-4 o GPT-3.5-turbo)
- Obtén el endpoint y API key
- Configúralos en
.env
Azure Text Analytics (Opcional)
- Crea un recurso de Text Analytics en Azure
- Obtén el endpoint y API key
- 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 noticiasGET /news/sentiment/{symbol}- Sentimiento por símbolo
Portfolio
POST /portfolio- Agregar posiciónGET /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:
- Fork el proyecto
- Crea una rama para tu feature
- Commit tus cambios
- Push a la rama
- Abre un Pull Request
📝 Licencia
Este proyecto es de código abierto y está disponible bajo la licencia MIT.
🆘 Soporte
Si tienes problemas:
- Verifica que los servicios de Azure estén configurados
- Revisa los logs del backend
- Verifica que los puertos 8000 y 8501 estén disponibles
- Consulta la documentación de la API en
/docs
Desarrollado con ❤️ usando Azure OpenAI y Cognitive Services