portfolio · cvxpy · mcp
Optimization Engine
Motor de optimización de portafolios multi-activo — mean-variance, risk parity, HRP, Black-Litterman, CVaR — publicado en PyPI, con UI en Streamlit, CLI y servidor MCP.
Resumen
Un motor de optimización de portafolios multi-activo con una API en Python, una UI en Streamlit, una CLI y un servidor MCP para que los agentes lo llamen como herramientas. Publicado en PyPI como finport-optengine — a un pip install de distancia. Construido sobre cvxpy, scipy, pandas y scikit-learn, con la UI, los proveedores de datos, el servidor MCP y la regresión detrás de extras opcionales.
El motor tiene una sola obsesión: una asignación no es un resultado hasta que puedes ver sobre qué se sostiene. Cada solución regresa los pesos y la evidencia — qué solver respondió, si las restricciones se respetaron, qué tan bien condicionada quedó la estimación de covarianza, qué tan concentrado está el libro en riesgo y no en capital, y cuánto del backtest sobrevive fuera de muestra.
Instalación
pip install finport-optengine # motor + CLI
pip install "finport-optengine[mcp]" # + servidor MCP (optengine-mcp)
pip install "finport-optengine[all]" # todo para los ejemplos completos
Qué hace
- Mean-variance, mínima varianza global, máximo Sharpe, risk parity / ERC, HRP, Black-Litterman, mean-CVaR, máxima diversificación, inversa de volatilidad, equal weight.
- Cotas por activo, cotas por grupo / clase de activo, retorno objetivo / volatilidad objetivo / utilidad con aversión al riesgo.
- Long-only o con apalancamiento, con presupuesto de turnover opcional respecto a pesos previos.
- Diagnósticos en cada solución: solver usado, cumplimiento de restricciones, condicionamiento de la covarianza, concentración de riesgo, decaimiento fuera de muestra.
- Servidor MCP (
optengine-mcp) habla el Model Context Protocol sobre stdio, para que los agentes llamen el motor como herramientas en vez de escribir código. - Controles pre-trade: un universo point-in-time, escenarios de estrés por choques y una auditoría de mandato que puede rechazar un portafolio que no cumple.
- Fallas honestas: una solución imprecisa lanza un error en lugar de regresar una respuesta degradada, y una caída del solver ya no se reporta como un mandato imposible.
- UI en Streamlit para usuarios no-coder; CLI para corridas en batch.
Stack
Python · cvxpy · scipy · pandas · scikit-learn · plotly · Streamlit · MCP. La UI, los proveedores de datos (yfinance / Parquet), el servidor MCP y la regresión viven detrás de extras opcionales.
Estado
En PyPI como finport-optengine (v0.7.0). Open source, con 1,307 pruebas, revisión de tipos y una celda de Windows en CI. Los agentes lo pueden llamar vía MCP.