Skip to content

Latest commit

 

History

History
1963 lines (1544 loc) · 271 KB

File metadata and controls

1963 lines (1544 loc) · 271 KB

English | 中文 | 日本語 | 한국어 | العربية | Español

Vibe-Trading Logo

Vibe-Trading: Tu Agente de Trading Personal

Un Solo Comando para Dotar a tu Agente de Capacidades Integrales de Trading

HKUDS%2FVibe-Trading | Trendshift

Python FastAPI React PyPI License
Feishu WeChat Discord

Sitio web  ·  Documentación  ·  News  ·  Features  ·  Shadow Account  ·  Demo  ·  Quick Start  ·  Examples  ·  API / MCP  ·  Roadmap  ·  Contributing

pip install vibe-trading-ai


📰 News

⚠️ Advertencia de seguridad: la cuenta de X VibeTrading_HKU, el proyecto de Virtuals 101845 y el contrato de token 0x640BDBF77b6447E8b7DB7894cED84BD1c40571f4 no son activos oficiales de Vibe-Trading. Nunca hemos lanzado ni respaldado ningún token o memecoin. No compres, conectes una wallet ni firmes nada. Detalles.

  • 2026-08-23 🔌 La semilla MCP de IBKR apuntaba a la URL equivocada, y cerrar un adaptador LLM los cerraba todos: La semilla del perfil oficial de IBKR MCP de solo lectura, el README y SKILL.md apuntaban a https://api.ibkr.com/v1/api/mcp; la propia página de integración con IA de IBKR publica https://api.ibkr.com/v1/api/mcp-public, y ahora la semilla, los seis README y SKILL.md la usan. Vuelve a ejecutar vibe-trading connector configure ibkr-live-official-mcp-readonly --yes si tu agent.json aún conserva la URL antigua. El paso de registro del cliente OAuth que la pasarela de IBKR rechaza sigue abierto en #1126 (#1178). Corregido: ChatLLM.close() cerraba los clientes HTTPX en caché de todo el proceso de LangChain, así que una sola llamada terminada de generación de título o de visión de imágenes dejaba todas las peticiones posteriores fallando con "client has been closed" hasta reiniciar — ahora solo se cierran los transportes creados por el propio Vibe-Trading (#1182); un reinicio del servicio a mitad de respuesta descartaba el texto ya transmitido y dejaba el intento en running para siempre — ahora las respuestas parciales se guardan como checkpoints y se reconcilian en el siguiente arranque como una entrada interrupted explícita (#1180). Nuevo: el chat web adjunta hasta cinco archivos por turno mediante el selector, arrastrar y soltar o pegar desde el portapapeles (#1179). ¡Gracias @c020627 y @AirHua-byte!
  • 2026-08-22 💼 Una página de Cartera: tus posiciones en todos los brókers, en solo lectura: Elige perfiles de conector de solo lectura (instancias de conexión sobre account.read + positions.read; el perfil oficial MCP de IBKR aún no es elegible) y la nueva página /portfolio los agrega en instantáneas inmutables con procedencia por fuente, valoración en USD/CNY, exportación CSV y un gráfico histórico. Una fuente que no logra actualizarse se reporta como error y queda excluida de los totales — nunca se arrastra la caché anterior — y la instantánea se marca incompleta. La herramienta de agente portfolio_summary devuelve risk_xray_args que alimentan al portfolio_risk_xray existente, y vibe-trading portfolio show|refresh|sources imprime la misma instantánea en la terminal. Los conectores de solo lectura que escribas tú viven en ~/.vibe-trading/connectors/ (un manifiesto que declare cualquier capacidad de escritura se rechaza; los secretos van al llavero del sistema vía el extra [keyring]), y nada en esta ruta puede colocar una orden (#1072, hacia #1171). Corregido: trece factores del Alpha Zoo rellenaban hacia delante un cierre faltante antes de calcular retornos, convirtiendo un hueco de datos en un «retorno del 0 %» finito — el hueco ahora se mantiene NaN (#1172); clientes MCP independientes en un mismo servidor http/sse compartían una única sesión de objetivo de investigación de reserva (#1173); la recolección de basura y la compresión de memoria dejaban filas FTS obsoletas y sidecars de relaciones huérfanos (#1174); cancel_run() nunca llegaba a un worker swarm que ya transmitía — la parada ahora interrumpe el flujo, omite las llamadas de ese turno y queda como tarea cancelada (#1175); get_research_reports por MCP descartaba beginTime/endTime (#1176); get_options_chain respondía a un vencimiento de otro ciclo con ok: true y los contratos de otra fecha (#1177). ¡Gracias @goatyyc, @Shizoqua y @cgycorey!
  • 2026-08-21 ⏱️ Ejecuciones colgadas para siempre: El tiempo límite de bash mataba el shell pero no a los nietos que retenían sus descriptores de tubería, así que una ejecución quedaba «en ejecución» más de 20 minutos. Ahora los comandos se lanzan en su propio grupo de procesos y el tiempo límite mata el árbol completo, un vigilante de estancamiento termina una ejecución que no avanza, y la compactación dejó de descartar los registros de verificación del propio modelo (#1169). Corregido: el histórico de Tencent de varios años se truncaba en silencio a 500 barras (#1154). Nuevo: las ejecuciones swarm reproducen solo su subgrafo fallido (#1158, cierra #1157); Market Watch muestra el último veredicto de cada monitor en la lista (#1156, cierra #943); quantlib alcanza 286 funciones probadas (#1159#1168). ¡Gracias @wiliao, @cgycorey, @he-yufeng, @BigFishEmily, @santhreal, @SiMinus y @alinv0!
Noticias anteriores
  • 2026-08-20 🚀 Se lanza v0.1.14 (Notas de la versión, pip install -U vibe-trading-ai): 272 commits y 74 pull requests fusionados desde 0.1.13. El titular es que un backtest terminado ya es algo que se puede leer, y no una carpeta de CSV. Run Detail gana cuatro pestañas — Investigación de factores (serie diaria de IC con su línea media, estadísticas de IC, curvas de equity por quintiles y una matriz de correlación de IC que no existía en ninguna parte), Posiciones (tarta/treemap de pesos con deslizador de fechas, barras de exposición neta por sector y área de evolución de pesos — la tarta es composición bruta y las barras son netas, así que un par largo/corto en un mismo sector se anula en las barras mientras ambas patas siguen visibles en la tarta), Tearsheet (mapa de calor de rentabilidades mensuales, barras anuales y las 5 mayores caídas anotadas sobre la curva de equity) y un panel de investigación interactivo con KPIs, equity relativa al índice, Sharpe móvil y el libro de operaciones completo. Las cuatro leen artefactos que la ejecución ya escribe: ninguna canalización de datos nueva. La nueva página Options Lab añade un diagrama de pagos al vencimiento, una matriz de escenarios spot×IV, las griegas de la cartera y una cadena de opciones en vivo, calculadas con el mismo motor fijado por tests que usan las herramientas MCP. Instalación: los Mac Intel vuelven a poder hacer pip install vibe-trading-aismartmoneyconcepts arrastraba llvmlite, que desde 0.46 no publica wheel para macOS x86_64, de modo que toda instalación en Intel se convertía en una compilación desde fuente con CMake; ahora es el extra opcional [smc] y el tope obsoleto <3.14 desaparece (#1035). Novedades: descubrimiento de estrategias con puerta de evidencia sobre el Alpha Zoo y el almacén SDM, con ruta de población, frescura calculada en lectura (fresh/aging/stale) y filas obsoletas que salen fail-closed de las recomendaciones por defecto; investigación programada que se entrega sola a través de una bandeja de salida con lease y que persiste el veredicto de cada monitor para la lista de Market Watch; siete endpoints de solo lectura de Futu; Vietnam (HOSE) como mercado de backtest; conciliación de cuenta USD-M offline; los proveedores Novita AI y GitHub Copilot; una fuente de datos MetaTrader 5 alojada; los idiomas español y alemán; y MCP crece a 74 herramientas. Corrección de errores: la suite de tests dejó de escaparse hacia tu raíz de configuración real, donde cada ejecución completa venía añadiendo registros order_rejected sintéticos al libro de auditoría encadenado por hash; build_registry() ya no devuelve en silencio una lista de herramientas incompleta; xirr sobrevive al subdesbordamiento del descuento a largo plazo y el DCF rechaza entradas no finitas en lugar de devolver un valor por acción negativo; los símbolos .VN dejaron de ejecutarse bajo reglas de acciones A chinas; el archivo de backtest dejó de mezclar los artefactos de dos ejecuciones; y una amplia pasada de grounding terminó con una clase de rechazos falsos sobre fechas, listas ordenadas, constantes de identidad en fórmulas de tasas y líneas de orden leídas como cotizaciones. Gracias @Shizoqua, @shadowinlife, @pengpengyi92, @cgycorey, @ofeksh-tr, @lorenzozanee, @AndyLongest, @zzz607, @wiliao, @jay79-boop, @Robin1987China, @Echoandelementwebsites, @zhiwuyazhe-fjr, @x-lambda, @sykuang, @straun-repo, @nstavros, @ngoanpv, @miguelangelo78, @lukiod, @jax-novita, @honginp, @he-yufeng, @fixXxerTech, @er-s-an, @daviddaco1, @birdxs, @QCYTSN, @549236606-oss y @1psconstructor.

  • 2026-08-19 🔌 Ejecuciones congeladas, una conexión filtrada por tarea y Macs Intel que no podían instalar: un proveedor que se quedaba en silencio congelaba la ejecución indefinidamente; el nuevo VIBE_TRADING_LLM_TIMEOUT_SECONDS (300s por defecto) acota la llamada, y el marcado de tool-call nunca se publica como respuesta final (#1105). Cada tarea del swarm filtraba una conexión HTTP del pool (#1145, cierra #1141). También corregido: el fallo de vibe-trading show <run_id> (#1147, cierra #1146), la sobrescritura de entregas en curso (#1140), la pérdida de evidencia de validación del backtest (#1139), la paginación MCP (#1137, #1138) y los valores no finitos en mercados de predicción (#1136). Nuevo: siete endpoints de solo lectura de Futu (#1135) y un chip explícito Inferred en los títulos de estrategia inferidos (#1134). Instalación: smartmoneyconcepts pasa a ser el extra [smc] — el llvmlite que arrastraba no publica wheel para macOS x86_64, así que cada instalación en un Mac Intel se convertía en una compilación desde fuente con cmake (#1035); el tope <3.14 desaparece con él. Gracias @wiliao, @cgycorey, @Shizoqua, @Echoandelementwebsites, @549236606-oss y @fixXxerTech.

  • 2026-08-18 🈶 Los informes correctos dejaron de rechazarse, y los backtests dejaron de operar ruido: \b reconoce Unicode, así que cuenta como carácter de palabra y (2026-07-14最低) no tenía frontera después del día: la fecha sobrevivía al enmascarado y 2026, 7 y 14 llegaban a la verificación OHLC como precios que ningún rango observado puede contener (#1132, cierra #1122). Con él se fueron otros cuatro rechazos de la misma familia: una fecha de sesión con guion (08-10(一)), un nivel expresado como rango que dejaba -20 detrás, una línea GTC (100 @ $3.50) leída como dos cotizaciones observadas, y una celda de fecha con formato de informe que no coincidía con ninguna fila de evidencia. Backtests: position_adjustment="hold" descartaba en silencio un cambio de tamaño solicitado, y "rebalance" no tenía banda de deriva alguna: medido, un movimiento diario del 0,01 % volvía a fijar la posición en 19 de 30 barras, de modo que una estrategia con su propio rebalance_freq operaba igualmente en cada barra. Las solicitudes descartadas ahora se informan, y rebalance_tolerance es la banda que los profesionales describen como "rebalancear cuando los pesos se muevan más de X"; su valor por defecto 0.0 deja intacta cualquier ejecución existente. Además, diecinueve alfas alpha101 neutralizadas por industria se omitían en cada bench de SP500 por falta de una etiqueta de sector que ya estaba en la tabla de la que provienen los constituyentes. Novedades: un monitor de Market Watch puede enviar su informe a un canal de mensajería cuando la ejecución termina, a través de un outbox persistido que un reinicio no puede perder y que un barrido concurrente no puede duplicar (#942); el alemán es el séptimo idioma de la interfaz (#1117); run_dcf rechaza entradas no finitas en lugar de devolver un precio por acción negativo y verosímil (#1121, cierra #1120); la respuesta de get_market_data en MCP incluye el _provenance que su propio docstring prometía (#1131); un módulo de herramientas que falla al importarse se nombra en vez de reducir el registro en silencio (#1129, cierra #1124); y la conciliación de cuenta USD-M sin conexión compara el estado de riesgo local con una observación del exchange sin abrir ninguna conexión (#1106). También: importar backtest.runner ya no carga un .env en el proceso, algo que volvía poco fiable una ejecución local de toda la suite en cualquier máquina que tuviera uno (#1123). Gracias @Robin1987China, @newgo, @er-s-an, @Shizoqua, @1psconstructor, @honginp, @cgycorey, @alinv0 y @jelech.

  • 2026-08-17 🔒 La suite de pruebas dejó de escribir en tu raíz de configuración real, incluido el libro de auditoría en vivo: Ejecutar la propia suite del proyecto añadía registros order_rejected fabricados a ~/.vibe-trading/live/audit.jsonl, un libro solo-de-adición encadenado por hash cuyo valor completo consiste en que sus entradas no se pueden fabricar; en Windows dejaba además un archivo de cadena corrupto. conftest.py no tenía ningún aislamiento de la raíz de configuración, así que cualquier módulo que fijara Path.home() / ".vibe-trading" en tiempo de importación resolvía contra el home real en cualquier plataforma: Windows era peor solo porque allí Path.home() lee %USERPROFILE% e ignora $HOME, dejando inerte el modismo de aislamiento que la suite venía usando. Ahora el home se redirige antes de la recolección, el sandbox posee una sola perilla para que el aislamiento por prueba siga ganando, y el final de la sesión afirma que los libros reales son idénticos byte a byte en lugar de solo comprobar que la redirección estaba instalada (#1118, cierra #1116). Además: xirr y money_weighted_return lanzaban ZeroDivisionError en horizontes de más de ~51 años, donde el factor de descuento se desborda a cero — exactamente los flujos largos e irregulares para los que existe XIRR (#1119); y un backtest archivado en una ejecución activa se fusionaba con los artefactos del anterior, de modo que un solo informe podía describir dos backtests distintos mientras /runs/{id} listaba los restos como propios (#1094). Gracias a @lorenzozanee, @straun-repo y @pengpengyi92!

  • 2026-08-16 🔧 Las ejecuciones con Anthropic ya no mueren en las rutas de recuperación, y la búsqueda de símbolos deja de reportar resultados vacíos como si fueran correctos: Los mensajes system que las rutas de recuperación añadían a mitad de conversación los rechaza la API de Anthropic, matando la ejecución; el direccionamiento de recuperación viaja ahora como mensajes de usuario con etiquetas <system> en línea (#1112, cierra #1109). search_symbol devolvía cero candidatos para consultas ticker+nombre mientras ambas fuentes reportaban ok, así que la identidad nunca se bloqueaba y todas las herramientas de datos rechazaban la petición; la vía de Yahoo marca ahora esas consultas como skipped en vez de un ok engañoso (#1114, cierra #1108). Además: LANGCHAIN_REASONING_EFFORT ya se aplica en la rama de Anthropic mediante una lista de modelos permitida (#1115); el cargador de Tencent se recupera de CERTIFICATE_VERIFY_FAILED con el paquete CA de certifi (#1113); la derivación revenue - cogs del beneficio bruto deja de ser código muerto (#1111); y los trabajadores del swarm recortan con el helper compartido, así que el subagente siempre ve el aviso de recorte (#1110). ¡Gracias a @lorenzozanee, @straun-repo, @x-lambda, @cgycorey y @Shizoqua!

  • 2026-08-15 🛡️ Actualizaciones de escritorio más seguras, empaquetado fiable en Windows e investigación factorial en Run Detail: El límite del updater inactivo conserva ahora la evidencia de los procesos propios para reintentar la limpieza, comprueba listeners TCP en vez de HTTP health, reserva el recovery journal de forma atómica, vincula Authenticode y los hashes a los mismos bytes preparados y vuelve a verificarlos justo antes del lanzamiento (#1101). El empaquetado de Windows gestiona descargas de Electron acotadas y verificadas por checksum, y extrae el asset GTK fijado como datos mediante 7-Zip en vez de ejecutar su instalador antiguo e inestable; la CI nativa de Windows cubre códigos de salida, timeouts, ensamblado del runtime, NSIS y arranque del paquete (#1104, cierra #1093). Run Detail incorpora series y estadísticas de IC, quantile equity y correlación de IC, con recorrido acotado de artifacts y valores JSON finitos (#1099, cierra #1100); los universal hash locks también se verifican de forma nativa en Linux, macOS ARM64 y Windows (#1102, cierra #1089). ¡Gracias a @QCYTSN y @shadowinlife!

  • 2026-08-14 ⚙️ Un ajuste de razonamiento que no hacía nada, y ejecuciones que se detenían cuando aún podían recuperarse: LANGCHAIN_REASONING_EFFORT era silenciosamente inocuo en casi todos los proveedores — solo OpenAI directo llegaba a recibirlo, así que poner high en DeepSeek no cambiaba nada y no lo advertía en ninguna parte. Ahora el ajuste llega a ambos transportes mediante el campo propio de cada adaptador: Chat Completions por defecto, y la API de Responses cuando LANGCHAIN_USE_RESPONSES_API=true. Los proveedores que reciben un reasoning_effort de primer nivel son una lista de permitidos verificada, no "todo lo que habla el formato de OpenAI" — un endpoint que valida su cuerpo de petición con rigor rechaza la clave desconocida y hace fallar la llamada entera, así que el coste de equivocarse es cada petición, no un ajuste que no surte efecto (#1025). La verificación de evidencia tampoco devuelve ya "confirma y continúa" mientras siga disponible una recuperación determinista de solo lectura: un instrumento sin resolver ahora impulsa search_symbolget_market_data con su propio presupuesto acotado en vez de agotar las iteraciones y cerrarse en fallo (#1092, cierra #1081). Novedades: una página Options Lab — diagrama de resultado multipata, matriz de escenarios precio × volatilidad implícita, griegas de la cartera y cadena de opciones en vivo, calculado por la herramienta de payoff existente y quantlib en lugar de una segunda implementación de las fórmulas (#1096); una pestaña tearsheet de backtest con mapa de calor de rentabilidad mensual, rentabilidad anual y las N mayores caídas (#1091); tickerall como la 25.ª fuente de datos de mercado — barras de forex y metales de MetaTrader 5 alojado, sin terminal local en ningún sistema operativo, solo bajo petición explícita para que una clave de bróker nunca sea un destino de repliegue silencioso, y una ventana histórica truncada es un error en vez de una serie corta sin avisar (#968, cierra #897); y Novita AI junto con GitHub Copilot como proveedores integrados (#1059, #990). eToro incorpora la exploración por clase de activo según el tipo de instrumento, y la operativa de copia ahora rechaza una cuenta demo con un motivo explícito en lugar de fallar de forma opaca (#1070). Gracias a @cgycorey, @Shizoqua, @shadowinlife, @miguelangelo78, @jax-novita, @sykuang, y @ofeksh-tr.

  • 2026-08-13 🎯 Los informes de backtest muestran la cartera que realmente se ejecutó: positions.csv contenía los pesos objetivo del optimizador, así que un informe podía declarar una exposición del 80% mientras el redondeo de lotes, las comisiones o una orden bloqueada dejaban la cartera cerca del 20% — y esos mismos objetivos alimentaban las métricas de peso invertido y la radiografía de riesgo. Las ejecuciones van ahora a positions.csv y las solicitudes a target_positions.csv (#1082). Run Detail incorpora un panel de investigación en ?view=dashboard (#1084), y el español es el sexto idioma de la interfaz (#1087). Además: get_research_reports devolvía HTTP 400 para todos los símbolos de acciones A (#1077); las cotizaciones de IBKR separan el nivel solicitado del aplicado (#1075); .env.partial se escribe de forma atómica (#1086); el flujo de Docker fija las actions a commits y bloquea por hash los SDK de canales (#1088); y la puerta de grounding deja de leer escalones de soporte/resistencia y máximos históricos como precios observados (#1060). Gracias @AndyLongest, @daviddaco1, @zzz607, @jay79-boop, @lukiod, @birdxs y @wiliao.

  • 2026-08-12 📏 El volumen de acciones A ya no se dispara ×100 cuando cambia la fuente de fallback: cinco fuentes de la cadena de fallback de acciones A informaban en lotes de mercado (board lots) mientras que BaoStock informaba en acciones individuales, y como la procedencia (provenance) del dato servido no llevaba unidad, un fallback podía reescalar silenciosamente cualquier señal basada en volumen. Los loaders ahora declaran las unidades de volumen por mercado, la procedencia expone la unidad de la fuente que realmente sirvió cada símbolo, BaoStock convierte acciones a lotes de mercado en el límite del loader, la caché v4 evita que reaparezcan entradas previas a la corrección, y una regresión de datos en vivo entre fuentes exige que los valores de días cerrados coincidan dentro de un 1% (#1065, #1067, cierra #1062). El paquete de diez PR de corrección también le da a eToro un estado de runtime completo y una interfaz conectada al SDK en cinco idiomas (#1051); hace que el DELETE de una ejecución programada devuelva un 204 realmente vacío (#1068); renderiza en la CLI el payload de cuenta del SDK directo de Alpaca (#1073); normaliza las raíces de Ollama a /v1 en el límite de credenciales usado por el constructor de modelo real (#1074); convierte el EOF de stdin de OAuth de Docker Codex en una guía de TTY procesable (#1054, cierra #1050); evita que los marcadores de lista ordenada de Markdown como 1. se conviertan en afirmaciones numéricas no soportadas (#1063); hace que las consultas de memoria de dos caracteres como GE se comporten igual con o sin FTS5 (#1071); y calcula el precio de opciones europeas de volatilidad cero a partir del valor intrínseco forward descontado, restableciendo la lógica del lado del ejercicio y la paridad put-call (#1066). Gracias @shadowinlife, @ofeksh-tr, @zhiwuyazhe-fjr, @zzz607, @pengpengyi92, y @Shizoqua.

  • 2026-08-11 🧠 La compactación deja de descartar contenido de la conversación, y un reintento de swarm ya no puede borrar su propia ejecución: la autocompactación recortaba el historial serializado en un límite estricto de 80.000 caracteres antes de resumir, así que todo lo que quedaba después de ese corte no llegaba ni a la llamada de resumen ni a la cola preservada — desaparecía sin lanzar ningún error, en contra de la propia garantía de «cero pérdida de información» de la función, y el corte caía en medio de un objeto, de modo que el resumidor recibía un JSON inválido. El historial ahora se empaqueta respetando los límites de mensaje y se pliega fragmento a fragmento mediante la plantilla iterativa existente; un único mensaje demasiado grande para un fragmento se convierte en fragmentos etiquetados en lugar de truncarse, y una respuesta vacía del modelo ya no borra el resumen acumulado hasta ese momento (cierra #1055). La nueva limpieza de artefactos en el reintento ejecutaba shutil.rmtree sobre run_dir/artifacts/<agent_id>, donde agent_id llega sin validar desde un preset y los presets de usuario se cargan desde ~/.vibe-trading/swarm/presets/, de modo que un id .. se resolvía como el propio directorio de la ejecución — ahora la ruta se rechaza a menos que sea un único segmento seguro que resuelva dentro del directorio de artefactos de esa ejecución. Además, technical_indicators RSI pasa a la convención Wilder-EWM que su propio docstring ya afirmaba, donde una media móvil simple puede desplazar una lectura a través del límite 30/70 (#1056); excess_return se vuelve a derivar a partir del total de benchmark corregido para que ambos campos dejen de contradecirse dentro de un mismo diccionario de métricas (#1058); la validación de entregables de swarm rechaza sobres de herramientas en bruto con claves ok/success presentados como análisis (#1052); un worker reintentado ya no hereda el report.md del intento fallido (#1053); y los prompts de worker se reordenan para que los bloques invariantes del agente formen un único prefijo apto para caché (#1057). Gracias @Shizoqua y @Echoandelementwebsites.

  • 2026-08-10 🚀 Se lanza v0.1.13 (Notas de la versión, pip install -U vibe-trading-ai): 408 commits y 162 pull requests fusionados desde 0.1.12 — la mayor versión hasta ahora. El titular es una corrección, no una función: la puerta de identidad deja de rechazar respuestas para las que ya tenía la evidencia. Una pregunta bien formada podía pasar minutos haciendo llamadas reales a herramientas y luego devolver "no se puede confirmar de forma segura la identidad del instrumento ni la evidencia de precio". Las causas: .SS y .SH se trataban como instrumentos distintos, así que todo ticker de Shanghái quedaba permanentemente ambiguo; una consulta secundaria fallida podía degradar una identidad ya bloqueada; el HTTP 400 de Yahoo en cada consulta CJK se registraba como un fallo de la fuente en lugar de "no listado aquí"; una lista blanca fija por herramienta bloqueaba 11 de las 17 grafías de argumento documentadas; las respuestas en chino se rechazaban por escribir 雅虎 o en lugar del nombre ASCII del loader; y un separador de miles dividía ¥1,309.22 de modo que 1 se comparaba contra el rango observado. Las preguntas conceptuales y los informes comparativos tampoco quedan ya en un callejón sin salida. Una cotización fuera de la evidencia OHLC registrada sigue rechazándose. Novedades: src/quantlib — 249 funciones probadas en 17 módulos (opciones, bonos, crédito, econometría, VaR/CVaR/EVT, atribución, estudios de eventos, CV purgada) accesibles desde la CLI, la Web UI, la REST API y MCP mediante la herramienta de solo lectura quantlib_call, de modo que las skills importan matemática financiera en lugar de llevar fórmulas en markdown; un motor de valoración (run_dcf / run_comps / tres estados financieros) cuya única regla es que un input faltante hace que un modelo NO SEA EJECUTABLE en lugar de asignarle un valor por defecto silenciosamente; una columna vertebral de entidad + flujos de caja irregulares (XIRR / MOIC / DPI / TVPI, TWR / Modified Dietz vía cashflow_performance) mantenida deliberadamente en paralelo a los motores de barras; gobernanza en cada ejecución — un manifiesto hash sobre el prompt, las skills, el registro de herramientas y las versiones de paquetes, más un libro de auditoría encadenado por hash y con fsync, donde incluso una edición auto-rehasheada se detecta un registro después; cuatro herramientas de datos de solo lectura sobre fuentes públicas gratuitas (SEC 13F con diferencias trimestre a trimestre, ETF look-through donde un tracker del CSI-300 se resuelve en 342 posiciones que cubren el 98.66% de los activos netos en lugar del top diez trimestral, mercados de predicción como probabilidad implícita etiquetada, y arXiv/OpenAlex con afirmaciones ancladas a la fuente); seis comandos institucionales (/comps /dcf /attrib /memo /earnings /screen); lentes de inversor como skill independiente; cinco guiones de investigación programada; un shell de escritorio Electron con empaquetado de Windows anclado por checksum y safeStorage; eToro como decimotercer conector de broker; Corea (KRX) como noveno motor de backtest; un puente a OpenBB Workspace; acciones canadienses de punta a punta; y sentiment, technical_indicators, options_payoff, orderbook_depth, ModelScope y vibe-trading update. Corrección de errores: los períodos de la SEC se indexan por su intervalo (start, end) — las cifras anuales venían devolviendo un único trimestre, una subestimación de 4.2×; los precios de acciones A de Tushare están ajustados por eventos corporativos, donde una rentabilidad bruta a través de una fecha ex-dividendo se desviaba hasta 47 puntos porcentuales; bar_returns ya no registra una suspensión de cotización como un movimiento del 0%; la anualización cubre las 24 fuentes de datos; se cierra un hueco de sandbox donde el código generado podía importar la capa de broker o alcanzar socket/subprocess a través de un binding renombrado; y los backtests compuestos en múltiples divisas se rechazan en lugar de sumarse en una sola curva de equity. Gracias @santhreal, @shadowinlife, @Robin1987China, @he-yufeng, @QCYTSN, @Shizoqua, @honginp, @cgycorey, @wiliao, @ngoanpv, @x-lambda, @ofeksh-tr, @00EVA, @zwrong, @yrk111222, @su322, @hhj123123, @dineeshd, @sambazhu, @ddy4633, @tyj147454413-cmd, @y85998607, @JungHoonGhae, @shugaoye, @TSENGCHIENFENG, @darkknight4563, @MuggleJinx, @klmtseng, @ebujinovch, @g0rdonL, @AmirF194, @Echoandelementwebsites, @yagnikpipaliya, @dvirarad y @1anter.

  • 2026-08-09 🪟 Empaquetado seguro para Windows, mercados de Canadá, ModelScope y Alpha Zoo sobre MCP: el empaquetado de escritorio para Windows ahora ensambla un runtime embebido de Python 3.12 anclado por checksum y rutas de revisión/firma NSIS x64, además de safeStorage de Electron para un conjunto de credenciales en lista blanca. El renderer puede establecer o borrar secretos pero nunca leerlos; la configuración en texto plano se migra una sola vez; los valores descifrados solo llegan al backend propietario; y tanto las builds de revisión sin firmar como las firmadas fallan de forma cerrada ante un estado de firma incorrecto. Este PR no publicó ningún artefacto de instalador (#1015). Las acciones canadienses ahora funcionan de punta a punta: los símbolos .TO/.V se clasifican en CAD, se enrutan a través de Yahoo → yfinance → fallback local, se ejecutan bajo las reglas GlobalEquity específicas de Canadá, se comparan contra XIC.TO, y se rechaza la agregación en múltiples divisas. Los backtests históricos estrictos USD-M también pueden optar por position_adjustment=rebalance preservando el colateral, el funding, las comisiones, el P&L realizado, el comportamiento de liquidación y la evidencia inmutable de ejecuciones a través de aumentos y reducciones (#1024, #1019, cierra #952). ModelScope se une a los proveedores integrados a través de su endpoint oficial de inferencia alojada compatible con OpenAI, con Qwen/Qwen3.5-27B como valor por defecto (#1011); el nuevo vibe-trading update distingue instalaciones por wheel de checkouts editables/desde fuente, instala exactamente la versión que verificó y comprueba metadatos actualizados sin hacer downgrade (#1020); y alpha_zoo junto con alpha_bench acotado ya llegan a MCP (64 herramientas), con límites de horizonte/resultado/ruta de salida y creación segura de informes (#979). Las actualizaciones verificadas de los locks de Python y frontend también actualizan dependencias agrupadas, postcss y akshare (#1021, #1023, #1026, #1027). Gracias @QCYTSN, @wiliao, @honginp, @yrk111222, @zwrong, y @cgycorey.

  • 2026-08-08 🧱 Shell de escritorio, eToro, rebalanceo atómico y una amplia pasada de fiabilidad: un host Electron centrado en la fuente ahora gestiona el ciclo de vida del backend existente — puerto loopback aleatorio, secreto por lanzamiento, recuperación de arranque en cinco idiomas y limpieza de procesos propios — mientras que eToro se incorpora con perfiles demo/real separados por ruta; las acciones en vivo que incrementan el riesgo siguen sujetas a mandato y auditadas, y las superficies de capacidades de la API se autentican bajo un CSP forzado (#923, #989, #961). Los backtests ganan rebalanceo atómico opcional en la misma dirección con evidencia inmutable de ejecuciones; Shadow divide los mercados mixtos por divisa de liquidación sin inventar agregación de FX y respeta la raíz de runtime configurada; los indicadores usan historial consecutivo sin muestrear; el drawdown con equity negativo y las cuentas cruzadas insolventes vacías se gestionan correctamente (#951, #997, #1017, #1005, #958, #959). El OAuth de OpenAI Codex obtiene un almacén de credenciales sincronizado independiente y una recuperación 401 de un solo uso; la exclusión de proxy cubre clientes síncronos y asíncronos; las ejecuciones en sandbox conservan su raíz canónica; la investigación programada aísla registros malformados y corrige la validación de zona horaria de los intervalos; las solicitudes en minúscula 4h devuelven barras de cuatro horas reales (#1014, #995, #1012, #1003, #1004, #1013). Las respuestas de QQ conservan los IDs de mensaje de origen, los slugs largos de modelo siguen siendo legibles, y el agente se detiene cuando la evidencia es suficiente (#1008, #1006, #1010). Gracias @QCYTSN, @Shizoqua, @ngoanpv, @hhj123123, @su322, @Robin1987China, @shadowinlife, @dineeshd, @honginp, @santhreal, @00EVA, @x-lambda, @ofeksh-tr.

  • 2026-08-07 🛡️ Menos rechazos falsos, un hueco de sandbox cerrado, QVeris en MCP: la puerta de fundamentación (grounding) deja de rechazar respuestas bien formadas sobre números que nunca fueron precios — puntuaciones de confianza, lecturas de indicadores, ventanas de media móvil, fechas sin año como 8/5, rangos porcentuales, y los propios niveles de disparo de un plan de trading (close ≥ 6.45 es una condición, no una cotización) — mientras que una cotización fuera de la evidencia OHLC registrada sigue rechazándose, y una tabla de precios fechada 08-05 ahora coincide con su evidencia en lugar de que todas las celdas vuelvan como no disponibles (#1001, #983). Sandbox: el código de estrategia generado ya no puede importar la capa de broker, ni alcanzar socket/subprocess/os.system/ctypes a través de un binding renombrado — ambos se aceptaban antes, y src.quantlib sigue pudiendo importarse. QVeris discovery/inspect/execute se incorporan a la superficie de MCP (62 herramientas), con la cotización de coste leída desde el marketplace en lugar de confiar en la que envía el llamador (#976, cierra #964, gracias @shadowinlife). Además, se repara el enrutamiento de fallback de datos de mercado de HK con una nueva fuente Tencent HK, el crypto de yfinance se enruta al motor de cripto, las entradas de memoria se escriben y recuperan con su sufijo .md, los argumentos list/dict de MCP toleran clientes que envían JSON como string, y los artefactos de Portfolio Studio se muestran en el detalle de la ejecución (#1000, #970, #984, #993, #980, #982, #966, #973, gracias @he-yufeng, @ngoanpv, @sambazhu).

  • 2026-08-06 🧮 Una capa de matemática financiera probada + motor de valoración + flujos de caja irregulares + gobernanza integrada: src/quantlib sustituye las fórmulas que vivían como markdown dentro de las skills por una implementación probada de cada una — opciones, bonos, crédito, econometría, VaR/CVaR/EVT, atribución, estudios de eventos, control de pruebas múltiples, validación cruzada purgada — 265 funciones, accesibles desde la CLI, la Web UI, la REST API y MCP mediante la nueva herramienta de solo lectura quantlib_call. Un motor de valoración (run_dcf / run_comps / tres estados financieros) se niega a ejecutarse si falta un input en lugar de asignarle un valor por defecto silenciosamente, y una nueva columna vertebral de entidad + flujo de caja admite NAVs, capital calls y cupones (XIRR/MOIC/DPI/TVPI y TWR/Modified Dietz vía cashflow_performance; coste de impacto L2 de cripto vía orderbook_depth). Cada ejecución ahora escribe un manifiesto hash, el libro de auditoría está encadenado por hash de modo que la manipulación es detectable, y los 30 presets de swarm fueron reauditados — un entregable que ninguna herramienta concedida puede calcular ahora se declara como tal en lugar de inventarse.

  • 2026-08-05 🔭 Tenencias institucionales, ETF look-through, mercados de predicción, papers de investigación: cuatro herramientas de datos de solo lectura, todas sobre fuentes públicas gratuitas — libros SEC 13F con diferencias de posición trimestre a trimestre; componentes de ETF en distintos mercados (un tracker del CSI-300 se resuelve en 342 posiciones que cubren el 98.7% de los activos netos, no el top diez trimestral); contratos de eventos como probabilidad implícita etiquetada; y búsqueda en arXiv/OpenAlex que marca lo que una fuente no afirma en lugar de inferirlo. Además, cinco plantillas de investigación programada, seis comandos institucionales (/comps /dcf /attrib /memo /earnings /screen), lentes de inversor como skill independiente, y un núcleo de agente que rastrea cada número hasta la herramienta que lo produjo.

  • 2026-08-04 🔧 Pasada de corrección: fundamentales, precios de acciones A, resultados sobredimensionados: los períodos de reporte de la SEC ahora se indexan por su intervalo (start, end) — un 10-Q presenta el trimestre real y el marco año-hasta-la-fecha bajo la misma fecha de cierre y período fiscal, así que period="annual" venía devolviendo un único trimestre para AAPL FY2018–2020 (una subestimación de 4.2×) y cada ranura de Q4 fiscal en una serie trimestral llevaba la cifra del año completo; get_fundamentals("AAPL.US") ya no responde ok:true con un panel completamente nulo. Los precios de acciones A de Tushare ahora están ajustados por eventos corporativos tanto en el factor bench como en los backtests — una rentabilidad bruta de cierre a cierre a través de una fecha ex-dividendo se desviaba hasta 47 puntos porcentuales (300750.SZ, 2023-04-26) — y el benchmark del CSI300 enmascara cada fecha según su composición de índice vigente en ese momento (point-in-time). Los backtests compuestos entre mercados rechazan un conjunto de códigos en múltiples divisas en lugar de sumar CNY, USD y KRW en una sola curva de equity; las patas de opciones se marcan a la volatilidad con la que se abrieron, eliminando un P&L de día cero fabricado de hasta +93% de la prima; los resultados de herramientas sobredimensionados se paginan por registro completo con un total explícito en lugar de cortarse en medio del JSON; y calc_metrics reporta el tracking error y la beta contra el benchmark.

  • 2026-08-03Investigación programada con reconocimiento de zona horaria + desbloqueo del cribado de acciones: los trabajos programados ahora aceptan un timezone IANA opcional y evalúan el cron según el reloj de esa zona, de modo que una cadencia sobrevive al horario de verano — se omite un hueco de adelanto de reloj y un instante ambiguo de retraso de reloj se ejecuta una sola vez — mientras que los campos de cron ganan listas separadas por comas y rangos (1,3-5), los trabajos sin zona horaria mantienen la semántica UTC, y la web UI gana una página Programadas en los cinco idiomas donde antes no había ninguna superficie de programación (#954, cierra #953, gracias @ngoanpv). Una solicitud de cribado ya no llega a un callejón sin salida: una lista corta de muchos candidatos cuenta como una respuesta en lugar de una resolución estancada y se retira una vez que se bloquea un candidato, y la validación de precios deja de leer dígitos de ticker, fechas localizadas, cantidades de acciones y costes de posición como precios cotizados — aunque sigue rechazando cualquier cotización fuera de la evidencia OHLC registrada (cierra #955). La memoria del agente también obtiene coincidencia exacta por ancla de índice y un límite de resultados respetado (#956, #957, gracias @santhreal).

  • 2026-08-02 🧠 Descubrimiento de modelos en vivo, identidad de runtime veraz, y una actualización de dependencias verificada: Settings ahora descubre a demanda los modelos del proveedor configurado con códigos de advertencia estables y controles en cinco idiomas, mientras que cada respuesta registra y recarga la identidad inmutable de proveedor/modelo/razonamiento que realmente la sirvió — que se limpia de forma segura cuando cambian las sesiones (#924, gracias @QCYTSN). Nueve actualizaciones de Python ancladas por hash más jsdom/postcss también se incorporaron con imports de versión exacta, 330 tests focalizados, el build de producción, 373 tests de frontend, el CI completo de main, y el Dependency Graph en verde (#949, #948); el salto disruptivo a MCP 2.0 permanece sin fusionar a la espera de una migración completa de lock/runtime (#950).

  • 2026-08-01 🧮 Analítica de estrategias de opciones + sentimiento de mercado + investigación auditable USD-M: un nuevo flujo de payoff de opciones calcula analíticamente los extremos de P&L al vencimiento, los breakevens exactos — incluyendo intervalos continuos de P&L cero —, las comisiones de entrada alineadas con el motor, y escenarios de spot × IV a través de Agent y MCP (#946, reconstruido a partir de #883, gracias @he-yufeng). La herramienta de solo lectura sentiment puntúa texto arbitrario localmente y recupera el Fear & Greed Index de cripto sin necesitar API key (#939, gracias @Robin1987China). Los backtests estrictos USD-M ahora persisten eventos ordenados de ejecución, funding, riesgo y liquidación además de un resumen de fidelidad, a la vez que rechazan intervalos 100× no soportados (#936, gracias @honginp). Las mejoras de fiabilidad también garantizan que la resolución de símbolo y venue preceda a las llamadas de datos de mercado, que los precios cotizados finales se verifiquen contra la evidencia OHLC registrada, que la investigación programada reintente fallos transitorios, y que los resultados anidados de MCP se serialicen correctamente.

  • 2026-07-31 🔧 Ciclo de vida de liquidación USD-M + indicadores técnicos + directorios de estado por usuario: el modo opcional perpetual_strict liquida el funding histórico antes de las ejecuciones y ejecuta los incumplimientos de margen aislado/cruzado como liquidaciones reales (#903, gracias @honginp). Una herramienta de solo lectura technical_indicators calcula RSI/MACD/Bollinger/SMA/EMA a través de los loaders existentes (#921, refs #920, gracias @Robin1987China). Las sesiones, ejecuciones, ejecuciones de swarm y subidas ahora residen bajo ~/.vibe-trading (reubicable vía VIBE_TRADING_HOME) con una migración automática de una sola vez (#925, cierra #904, gracias @MuggleJinx). Además, un lote de diez correcciones — .SS de Yahoo clasificado como acción A, códigos de acciones A en formato simple/con prefijo, pares de cripto delimitados por barra, guardas de nan/inf (#919, #926#935, gracias @santhreal).

  • 2026-07-30 🎨 Web UI reconstruida + mercado de Corea (KRX) + un puente a OpenBB Workspace: la web UI recibe su renovación de minimalismo guiado — sin parpadeo en el primer frame, un objeto de actividad duradero por turno con un susurro de razonamiento en vivo y un rastro de herramientas resistente a recargas, títulos de sesión escritos por el LLM, paridad completa en cinco idiomas. La renta variable de Corea (KRX: KOSPI/KOSDAQ) se convierte en el noveno motor de backtest — banda de ±30% en tiempo de ejecución, solo largo, impuesto de transacción del 0.20% de 2026, loader opcional pykrx (#693, gracias @JungHoonGhae) — más un puente a OpenBB Workspace (#817, gracias @shugaoye) y una herramienta de solo lectura de snapshot de Taiwán (#848, gracias @TSENGCHIENFENG). Corrección: las bandas de precio diarias se evalúan en el momento de la ejecución, no a partir del cierre de la barra de decisión; una sesión ejecuta un intento a la vez (HTTP 409) y una detención por parte del usuario es su propio estado terminal (#676, gracias @tyj147454413-cmd). Además, trazas duraderas (#662), resultados de herramientas con secretos depurados (#675), argumentos de herramientas con fallo cerrado (#913/#911, gracias @santhreal), reasoning_effort directo de OpenAI (#755, gracias @1anter), y guardas numéricas a través del risk x-ray / edge density / motor de opciones (#909/#908/#907).

  • 2026-07-29 🔧 Retornos seguros ante gaps + modelado de riesgo de liquidación + un risk x-ray en cada ejecución: bar_returns ya no borra el movimiento real a través de una suspensión de cotización más larga que la ventana de forward-fill — el movimiento de reanudación se registraba silenciosamente como 0, subestimando la volatilidad e inflando el Sharpe — y un precio previo inf ya no puede leerse como un limpio −100% (#895, gracias @darkknight4563). La anualización ahora cubre las 24 fuentes de datos en todos los intervalos, con un test de cobertura que hace fallar el CI cuando un loader llega sin entradas (#891, cierra #884, gracias @Robin1987China). La investigación de perpetuos USD-M gana una evaluación determinista de liquidación de margen aislado y cruzado (#889, gracias @honginp), y cada backtest de portafolio ahora emite artefactos de risk x-ray (risk_xray.json/.md) con métricas principales de concentración/volatilidad/drawdown (#900, gracias @he-yufeng). La CLI connector ahora carga ~/.vibe-trading/.env, así que las credenciales de broker con origen en variables de entorno vuelven a resolverse (#902, cierra #901, gracias @MuggleJinx). Además, divisiones de mensajes de canal que preservan la sangría y parseo de frontmatter de skills al final del archivo (EOF) (#867/#861, gracias @santhreal).

  • 2026-07-28 🔧 Desbloqueo de los modelos Claude de próxima generación + retornos seguros ante el signo: los modelos Claude que dejan obsoleto el campo temperature (opus-4-7, opus-5, sonnet-5) ya funcionan — el adaptador descarta el campo cuando la API lo rechaza, reintenta una vez, y recuerda el modelo, así que no se necesita un parche por cada lanzamiento (#890, cierra #856, gracias @yagnikpipaliya). El vibe-trading run no interactivo ahora inyecta un id de sesión de host: las herramientas de objetivo de investigación antes fallaban en cada llamada mientras la ejecución seguía reportando éxito (#885). Los retornos de comprar y mantener (buy-and-hold) son seguros ante el signo — un cierre previo cercano a cero ya no hace explotar el benchmark compuesto, y un cierre exactamente cero ya no produce inf/nan (#872, gracias @darkknight4563). El frontend pasa a Node 22 + React Router 8, resolviendo un aviso de severidad alta.

  • 2026-07-27 🔧 Integridad de la correlación + reparación de exportación a vn.py 4.0 + un lote de codificación: la matriz de correlación móvil ya no rellena hacia adelante (forward-fill) los cierres faltantes — una sesión suspendida se puntuaba como un retorno fabricado del 0% frente al movimiento real del par, distorsionando la matriz (#873, gracias @ddy4633). La skill de exportación a vn.py se repara para el layout de vn.py 4.x, donde vnpy.app.cta_strategy ya no existe upstream — las plantillas ahora importan desde vnpy_ctastrategy (#869, gracias @y85998607). Además, un lote de seis correcciones: decodificación de BOM UTF-16 en el lector de documentos y en los CSV de diario de operaciones, símbolos de divisa eliminados antes de la coerción numérica, símbolos con estilo BTCUSDT inferidos como cripto, intervalos en minúscula 1h/1d anualizados correctamente, y caracteres CJK preservados en los slugs de directorio de skills (#862, #863, #864, #865, #866, #868, gracias @santhreal).

  • 2026-07-26 🔒 Lock de dependencias + transparencia del universo: la instalación anclada por hash de Docker vuelve a funcionar, con una nueva comprobación de lock en el CI (#858, cierra #847). alpha bench ahora revela las fuentes, los recuentos, los fallbacks degradados y el sesgo de supervivencia del CSI300/SP500 (#859, cierra #845). También se actualizaron las Actions y cinco dependencias del frontend (#850#852).

  • 2026-07-25 🔧 Realismo de perpetuos + corrección de un crash de MCP + un lote de correcciones: los perpetuos USD-M ganan contratos de estado de margen (#798, gracias @honginp) y el motor ahora consume tasas de funding históricas en lugar de obtenerlas e ignorarlas (#819, gracias @g0rdonL). Los resultados de dataclass de MCP ya no fallan por un falso Circular reference detected (#849, gracias @Echoandelementwebsites), y la CLI/HTML de alpha bench propagan la divulgación de supervivencia _meta (#841, cierra #797, gracias @AmirF194). Además, 12 correcciones a través de diarios, conectores y canales (#799#810, gracias @santhreal), y una etiqueta de cuenta real en los balances de la CLI (#843, cierra #846, gracias @Robin1987China).

  • 2026-07-24 🔀 Memory Tier 2, restricciones componibles del optimizador + una pasada de manejo de intervalos: la memoria persistente gana organización estructural Tier 2 (#815, gracias @shadowinlife), y los optimizadores de backtest aceptan restricciones de peso componibles (#818, gracias @he-yufeng). Corrección: el validador de barras diarias puede optar por permitir precios no positivos — abriendo en barras negativas mientras sigue rechazando el cero (#816, cierra #571, gracias @darkknight4563). Además, una pasada de normalización de intervalos de 19 PR en los loaders: los alias en minúscula 1h/4h/1d/1w se aceptan en todas partes, los intervalos no soportados ahora fallan rápido en lugar de devolver silenciosamente barras diarias, 4H de Yahoo se mapea a 1h, y MT5 acepta 1W/1M (#812#838, gracias @santhreal), una corrección de diario de operaciones para fechas de número de serie de Excel de Eastmoney (#811, gracias @santhreal), y una corrección de ancla de navegación del README (#840, gracias @dvirarad).

  • 2026-07-23 🔧 Pasada de fiabilidad + alpha-bench estricto expuesto + ciclo de vida de memoria opcional: un lote de 22 PR de contribuidores. Una amplia pasada de fiabilidad corrige el manejo de timeframes de punta a punta — yfinance 1M→mensual (no minuto), CCXT 1W/1M, akshare/india-broker rechazando intervalos no soportados en lugar de devolver silenciosamente barras diarias, y los conectores Tiger/Alpaca/OKX/Shoonya/Longbridge manteniendo 1H/4H como barras horarias — además de normalización de fechas Excel en el diario de operaciones (float YYYYMMDD de eastmoney, fechas de número de serie de Futu/Tonghuashun), report_audit con JSON finito, validación de holding_days en blanco, y bordes de tablas markdown en Feishu/CLI (#778#794, gracias @santhreal). trading_history de MT5 ahora convierte los escalares de numpy de modo que la serialización JSON ya no muere con int64 (#776, cierra #774, gracias @shadowinlife), y los fundamentales PIT deduplican filas reformuladas y evitan que el snapshot retroceda a un período fiscal más antiguo ante una reformulación tardía (#772, cierra #771, gracias @klmtseng). Novedad: alpha bench --strict finalmente conecta la puerta estricta de control aleatorio de mismo universo + OOS que había quedado inalcanzable desde 0.1.9 (#796, cierra #773, gracias @he-yufeng), un ciclo de vida de memoria opcional (puntuación de calidad, decaimiento de Ebbinghaus, GC solo de archivado — todo desactivado por defecto) (#733, cierra #732, gracias @shadowinlife), y artefactos de notas de rebalanceo de backtest + métricas de turnover (#795, gracias @he-yufeng).

  • 2026-07-22 🚀 Se lanza v0.1.12 (Notas de la versión, pip install -U vibe-trading-ai): la línea de tiempo de regímenes de correlación añade un endpoint GET /correlation/regime + una franja opcional en la pestaña Correlation — la edge density pasa por una máquina de estados de histéresis causal que marca episodios de mercado FUSED, un contexto de riesgo descriptivo y no una señal (#756, cierra #719, gracias @ebujinovch). La resolución del endpoint del proveedor ahora recae en la URL base canónica de cada proveedor y maneja con elegancia los endpoints que no son SSE, corrigiendo el proveedor nativo zai en glm-5.1 (#758). Además, una pasada de fiabilidad de JSON estricto / números finitos a través de métricas, factores, patrones, sesión y diario (#761#770, gracias @santhreal) y un desacople del bracket de mantenimiento de Binance que mantiene los backtests -PERP sin necesidad de credenciales (#757, gracias @honginp). Consolida ~90 correcciones desde 0.1.11.

  • 2026-07-21 🔧 Completitud de los loaders de datos + una pasada de correcciones de fiabilidad: los resultados parciales de datos de mercado ahora completan los símbolos faltantes a través de la cadena de fallback y fallan de forma cerrada en lugar de reducir silenciosamente el universo del backtest (#689, cierra #681, gracias @xkam7ar), y las barras de OKX usan el endpoint history-candles con reintento por límite de tasa para backfills profundos (#644, gracias @tyj147454413-cmd). Además, una pasada de correcciones: la guarda de red de MCP acepta hosts IPv6 / con variantes de mayúsculas (#750, gracias @Robin1987China), los parsers de diario de operaciones omiten filas de símbolo en blanco/NaN (#749, gracias @Robin1987China), la Shadow Account omite la puerta de hora de entrada minada en barras diarias (#748, gracias @Robin1987China), y los endpoints regionales de la API de MiniMax son seleccionables (#731, gracias @octo-patch).

  • 2026-07-20 🔀 Proveedores, MetaTrader 5, y una pasada de fiabilidad: la Anthropic Messages API nativa (extra opcional [anthropic], #695, gracias @jelech), SiliconFlow (#565, gracias @UNHNQ), y iFlytek Spark (#537, gracias @FenjuFu) se unen al listado de proveedores, y llega un conector de broker MetaTrader 5 (Exness) + una fuente de datos forex/metales mt5 (conectores de broker → 12, #481, gracias @StaniellG). Además, un motor OCR llm-vision agnóstico de proveedor (#548, gracias @shadowinlife), una vectorización de alineación de señales 80× (#698, gracias @shadowinlife), datos históricos de funding/bracket de Binance USD-M (#716, gracias @honginp), una caché de descubrimiento MCP para swarm (#704), y una consolidación de fiabilidad que cierra 13 issues de SSE/sesión/CLI/swarm/scheduler (#584, gracias @xkam7ar). Corrección: el cierre parcial de opciones ahora respeta la cantidad solicitada en lugar de aplanar el lote completo (#577), resolución centralizada de credenciales de proveedor (#563), manejo de cancelación en cola (#641), una condición de carrera de streaming-DOM en el frontend (#717, gracias @Marnie0415), y los renderers de la CLI del connector (#726, gracias @nareshkps).

  • 2026-07-19 🔧 Artículos reales de noticias bursátiles de EE. UU./HK + corrección de análisis factorial de MCP + una pasada de robustez: la herramienta de noticias bursátiles ahora devuelve artículos reales de Yahoo Finance (título/url/fuente/fecha de publicación/fragmento) para tickers de EE. UU. y HK en lugar de coincidencias de instrumentos relacionados, todavía enrutados a través del cliente congelado con limitación de IP (#730, gracias @yxhuang). La herramienta MCP factor_analysis se realinea con el contrato CSV real de la herramienta registrada, así que las llamadas ya no mueren por KeyError antes de ejecutarse (#715, cierra #635, gracias @Robin1987China). Además, una pasada de robustez: toda la serie Kimi K (k2/k3/…/for-coding) ahora fuerza automáticamente temperature=1 como exige la API (#701, gracias @sambazhu), y split_message, los rangos de páginas de PDF, y los filtros de fecha del diario de operaciones fallan rápido ante entradas degeneradas o invertidas en lugar de colgarse o devolver silenciosamente nada (#727#729, gracias @santhreal).

  • 2026-07-18 🔧 Fallback de cripto en Binance + correcciones de ejecución paralela y de corrección: un loader de Binance se une a la cadena de fallback de datos históricos de cripto (#643, gracias @tyj147454413-cmd), y el connector de IBKR pasa a un pool de conexiones thread-local con cotizaciones snapshot, corrigiendo bloqueos bajo ejecuciones paralelas de agentes (#636, gracias @MikeCer). Además, una pasada de corrección: el análisis factorial rechaza n_groups no positivos, los rangos de período invertidos y las ventanas de detección no positivas fallan rápido, se maneja un DatetimeIndex sin nombre en la matriz de correlación, se aceptan los alias de columna nav/value de equity.csv, y los códigos de acciones A vacíos ya no se coaccionan a 000000.SZ (#709#714, gracias @santhreal). Un factor de estabilidad de reconexión de correlación se une al zoo académico (#705, gracias @ebujinovch), el zoo fundamental queda en lista blanca para el análisis factorial (#707, gracias @sambazhu), el estado de ejecución persistido ahora es durable mediante fsync (#645, gracias @tyj147454413-cmd), y el extra dev instala el toolchain documentado de Black/Ruff (#634, gracias @xkam7ar).

  • 2026-07-17 🧩 Skill de régimen de correlación + una amplia pasada de corrección de backtest / datos / seguridad en vivo: una nueva skill de detección de régimen de correlación (skills incluidas → 88, #557, gracias @ebujinovch), una tarjeta de conexión de runtime de Longbridge (#569, gracias @fanfpy), y presets de swarm definidos por el usuario cargados desde ~/.vibe-trading (#570, gracias @darkknight4563). Además, endurecimiento a través de toda la pila: correcciones de corrupción silenciosa de datos en los loaders de Futu / Tencent / CCXT / mootdx, guardas de look-ahead-bias y de OOS estricto en el factor bench y en la Shadow Account, seguridad en el trading en vivo (límites de exposición firmados, límites diarios de órdenes atómicos, confirmaciones de mandato con consentimiento previo, estado en vivo con fallo cerrado), y mejoras de diario / presupuesto de QVeris / swarm / puerta de CI (#552, gracias @xor-xe; buena parte del trabajo de corrección de @xkam7ar).

  • 2026-07-16 🔧 Lock de dependencias reparado + corrección al guardar configuración en Windows: el lock de runtime verificado por hash se regenera de modo que pip install --require-hashes de Docker vuelve a resolverse limpiamente, corrigiendo los pins incompatibles de caio/pydantic-core/websockets (#564, cierra #558, gracias @tianrking). Guardar la configuración del LLM del Agent desde la Web UI ya no devuelve HTTP 500 en Windows — el endurecimiento os.fchmod, exclusivo de POSIX, ahora está protegido por plataforma, con un test de regresión para plataformas sin fchmod (#561, gracias @CRui5in).

  • 2026-07-15 🧮 Corrección de backtest + núcleo de Portfolio Studio: una pasada de convergencia de 10 PR hizo que los rebalanceos fueran causales e independientes del orden, cobró los costes de cierre terminal, reportó el turnover derivado de las ejecuciones, aplicó los límites de exposición, y mantuvo la salida de validación finita y estricta (#530/#531/#532/#540). Los gráficos ahora reutilizan la fuente de datos real de la ejecución, las consultas de mercado repetibles ya no se descartan, y las cargas de .env refrescan la configuración en caché (#535/#544/#554). Se cierran Portfolio Studio #456 y el bug de configuración #541; también se cierran las correcciones de proveedor #528/#529. Gracias @YZY0108, @santhreal, @Robin1987China, @xkam7ar, @Marnie0415, y @marichu99.

  • 2026-07-14 🌉 Datos de mercado de Longbridge + transporte MCP moderno + fiabilidad de proveedores: Longbridge se une a la capa de fallback de datos históricos con credenciales controladas por clave, división por ventana de fechas, comprobaciones estrictas de completitud, y una dependencia opcional del SDK; cuatro herramientas de flujo del mercado chino ganan fallbacks verificados de Tushare, y un equity final negativo ya no hace fallar las métricas de backtest. El servidor MCP ahora soporta Streamable HTTP, write_file recupera de forma segura argumentos de ruta con alias o faltantes, las actualizaciones de hipótesis rechazan campos no soportados, y las solicitudes de Correlation están autenticadas. NVIDIA NIM ahora es un proveedor de primera clase tanto en Web Settings como en ambos flujos de onboarding de la CLI, con un User-Agent de compatibilidad versionado para abordar el 403 reportado; Web Settings ahora escribe en el ~/.vibe-trading/.env canónico, migra la configuración heredada, y reporta con claridad los fallos de permisos, corrigiendo el 500 de DeepSeek al guardar (#534, cierra #516/#524; #528/#529). Gracias @fanfpy, @asahikiko, @santhreal, @sTunnaSu, @abhishekjaisinghani, @huangcheng, @ShiroKSH, @Meru143, @DIEGOD79, y @not-knope por el código, los reportes y el diagnóstico.

  • 2026-07-13 🔒 Endurecimiento de seguridad: se cierran los 10 hallazgos de la auditoría externa + lote de contribuidores: todos los hallazgos de la auditoría de seguridad externa del 2026-07-10 (issue #476, discusión #468) ya están resueltos en main — reconstrucción multi-etapa de Docker con imágenes ancladas por digest, un sandbox de backtest endurecido con AST que bloquea network/subprocess/eval/os.environ/unsafe-open (incluso dentro de cuerpos de función anidados), tickets de autenticación SSE de un solo uso y de corta duración, Compose endurecido (rootfs de solo lectura, capabilities eliminadas, límites de recursos), autenticación + limitación de tasa en /correlation, cabeceras de seguridad, dependencias ancladas por hash, y más. También se fusionó: modo TAP opcional para el aislamiento de claves de Alpaca (#377, gracias @0xZKnw), el turnover de portafolio realizado expuesto en las métricas de backtest (#478, gracias @Robin1987China), un factor académico de betting-against-beta de Frazzini-Pedersen (Alpha Zoo → 461, #480, gracias @YogeshModi24), una corrección de look-ahead-bias en los 5 optimizadores de portafolio (#487, gracias @YZY0108), y dos correcciones de preflight/configuración de proveedor (#479/#484, cierra #477/#482, gracias @ananaymital/@Bortlesboat).

  • 2026-07-12 🧪 Strategy Development Manager + lote de correcciones de contribuidores: la nueva skill strategy-dev-manager (#87) convierte papers académicos e investigación de brokers en factores/estrategias registrados con un almacén persistente de artefactos y monitoreo automatizado de decaimiento de IC/Sharpe — sdm_register / sdm_status / sdm_decay_scan gestionan un ciclo de vida activo → en monitoreo → decaído → deshabilitado sobre ~/.vibe-trading/ (#457, cierra #455, gracias @shadowinlife). También se fusionó: la pestaña Correlation acepta tickers simples (AAPL,SPY) y recorre toda la cadena de fallback de loaders (#472, cierra #471, gracias @yxhuang), el loader local respeta los intervalos solicitados mediante remuestreo de OHLCV (#467, gracias @Shizoqua), el historial de perpetuos USD-M de Binance llega con enrutamiento explícito de BTC-USDT-PERP + separación de precio de ejecución/marca como la primera porción de #462 (#470, gracias @honginp), los imports de transporte de FastMCP ahora funcionan en ambos layouts de módulo (#469, gracias @roberttidball), y Requesty está disponible como proveedor de gateway LLM compatible con OpenAI (#474, gracias @Thibaultjaigu).

  • 2026-07-11 🚀 Se lanza v0.1.11 (pip install -U vibe-trading-ai): consolida tres semanas desde 0.1.10 — backtesting de primera clase para acciones indias (NSE/BSE), la capa de factores fundamentales segura ante PIT (Alpha Zoo → 460), el runtime de canales IM con 16 adaptadores, investigación programada de punta a punta, datos premium opcionales de QVeris, y el lote de contribuidores de hoy: un optimizador consciente del turnover (#466, gracias @Robin1987China), una herramienta de visión analyze_image + emparejamiento de DM de NapCat + la corrección de lectura de medios IM (#464/#463/#465, gracias @fei-moss), serialización Decimal de Longbridge (#459, gracias @fanfpy), y guardas de recuento del manifiesto empaquetado (#461, gracias @asahikiko). Detalles completos: CHANGELOG · notas de la versión.

  • 2026-07-10 🇮🇳 Soporte para acciones indias (NSE/BSE) + configuración de entorno centralizada: llega un IndiaEquityEngine dedicado — liquidación T+1, bandas de circuito, y una pila de costes STT/stamp/exchange/SEBI/GST gobernada por configuración — con enrutamiento de símbolos .NS/.BO, un puente de datos opcional de solo lectura para Shoonya/Dhan, y 255 factores alpha101/qlib158 incorporados al nuevo universo equity_in (#305, gracias @muku314115). Las variables de entorno ahora fluyen a través de un único esquema Pydantic EnvConfig con una puerta de CI basada en AST contra la futura proliferación de os.getenv (#440, cierra #438, gracias @shadowinlife). Además: un diálogo de segunda confirmación antes de confirmar un mandato de trading real más toasts de error unificados (#453, gracias @wison1717-maker), tests de rutas de investigación programada (#452, gracias @Robin1987China), y los modelos de razonamiento de GLM ya no pierden su stream de razonamiento en el proveedor zhipu (#458).

  • 2026-07-09 🧯 Desbloqueo del arranque de Docker + lote de contribuidores de proveedores/CLI: el arranque de Docker/servidor ya no falla cuando la iteración de rutas de FastAPI encuentra una entrada tipo router incluido sin path (#450, gracias @Penn-Live). También incorporamos las correcciones rápidas en cola de contribuidores: las firmas de fetch() de los loaders ahora coinciden con el protocolo en OKX / Tushare / yfinance (#437, gracias @shadowinlife), el prompt de reanudación de la CLI preserva el primer mensaje del usuario (#448, cierra #447, gracias @morluto), el OAuth de Codex usa por defecto openai-codex/gpt-5.4 (#446, gracias @morluto), Kimi for Coding está disponible como un proveedor distinto (#435, gracias @yxhuang), los mapeos de proveedor de opencode están conectados (#444, gracias @imsankz), y los bloques de código de referencia de Tushare ahora dicen python en lugar de pyhton (#449, gracias @flash1234pku). La validación incluyó tests focalizados de servidor/CLI/proveedor/loader además de un build de Docker y un smoke test de /health.

  • 2026-07-08 💎 Capa de factores fundamentales (Fase 1) + datos premium opcionales de QVeris + día de mantenimiento: los fundamentales de la SEC seguros ante PIT ahora fluyen a los paneles de factores diarios — columnas de panel fund:*, anclaje por fecha de presentación con protección ante reformulaciones y marcos YTD, y 4 nuevos factores de calidad/valor (el registro ya tiene 460 alphas). El enrutamiento de datos gana una vía premium opcional: las 18 fuentes gratuitas siguen siendo la opción por defecto, mientras que QVeris desbloquea más de 63 proveedores vía Settings → QVeris o vibe-trading data mode paid (ver la sección de QVeris más abajo). Además: se completa la modularización de api_server (1,103 → 371 líneas, #424 cerrando #331, gracias @shadowinlife), el validation.json del backtest ya no requiere un directorio de artefactos preexistente (#429, gracias @isaveall), errores de --swarm-run más claros (#428, gracias @isaveall), y revertimos la pila de gobernanza que rompía los chats de sesión (#433, gracias @yxhuang por el diagnóstico preciso).

  • 2026-07-07Lote de PR de contribuidores: se fusionó el trabajo en cola de contribuidores para la configuración de timeout de canales IM (#413, gracias @SyntaxSawdust), las vistas previas sociales de Alpha Library y el tutorial para principiantes (#396, #393, gracias @kadaliao), skills / herramientas / presets de comité de value investing (#407, gracias @sambazhu), el manejo de campos de orden de tamaño cero en trading_place_order (#417, gracias @irfanallana-oss), y timestamps UTC con reconocimiento de zona horaria en las rutas de sesión/API (#397, gracias @mustafakamal88).

  • 2026-07-06 🧭 Endurecimiento del preflight, particiones de API, y fallback de búsqueda para CN: el preflight de proveedor ya no sigue redirecciones (#404, cierra #402, gracias @SyntaxSawdust), las rutas de API restantes se movieron a módulos focalizados (#387, sustituyendo a #383-#386, gracias @shadowinlife), y los fallbacks de búsqueda web para CN ahora incluyen Alibaba Cloud IQS (#408, gracias @sambazhu). La limpieza de mantenimiento añadió tests de fallback sin red y limpieza de espacios en blanco al final de archivo (EOF) (fbac74f); el CI de main está en verde (ejecución 28780619018).

  • 2026-07-05Cola de PR de contribuidores cerrada + baseline de Windows en verde: se fusionaron los cuatro PR no-draft seleccionados para la pasada de mantenimiento de hoy. Las extracciones por lote de mootdx de acciones A ahora dejan propagar KeyboardInterrupt / SystemExit en lugar de que un except desnudo los engulla (#399, cierra #398, gracias @shadowinlife). La partición de rutas de Settings y los pisos de dependencia parcheados ya están fusionados bajo sus PR de contribuidores originales (#382, #390, gracias @shadowinlife y @aeonframework). La compatibilidad de baseline de Windows ahora aísla las cachés de loaders, hace que las aserciones de caché de OAuth sean conscientes de la plataforma, omite un test mock exclusivo de fork en Windows, y evita los proxies para los fixtures de loopback de MCP (#401, gracias @Elfsa-Miranda). Validación: 4701 passed, 47 skipped.

  • 2026-07-04 🧩 Particiones de rutas de API, documentación de tutorial, y pisos de dependencia: las rutas de canales IM y de Settings se movieron fuera de api_server.py hacia src/api/channels_routes.py y src/api/settings_routes.py, continuando la vía acotada de modularización de #331 a partir del trabajo de contribuidores (#379, #382, gracias @shadowinlife). El wiki ganó un tutorial para principiantes en chino para lectores sin formación financiera (#393, gracias @kadaliao), y los pisos de dependencia ahora mantienen a Pillow / LangChain / LangGraph en la vía parcheada instalable (#390, gracias @aeonframework).

  • 2026-07-04 🧹 Limpieza de timestamps UTC para rutas de sesión y API: se reforzó la corrección de timestamps de #395 para que los timestamps de sesión, objetivo, canal y API ahora emitan valores UTC con zona horaria explícita en formato ISO.

  • 2026-07-03 🛡️ Actualización de Robinhood MCP + modularización de API + protección SSRF: Robinhood Agentic Trading ahora usa los nombres de herramientas MCP actuales en las lecturas genéricas, la plomería del live-runner, las semillas de solo lectura por defecto y las pruebas de la puerta de mandato, mientras que el arranque interactivo respeta el mismo orden de búsqueda de .env que el cargador de proveedores (~/.vibe-trading/.envagent/.env$CWD/.env) (#391, cierra #381 y #380). Las rutas del sistema (/health, /correlation, /system/shutdown, /skills, /api) se movieron a src/api/system_routes.py como el siguiente tramo acotado de modularización de la API (#378, gracias @shadowinlife). Las defensas SSRF de medios de canal ahora rechazan objetivos CGNAT/mesh/no globales, y los redireccionamientos de medios de QQ hacia destinos internos se bloquean antes de la obtención (#389, gracias @hobostay).

  • 2026-07-02Aceleración de factores + límites de runtime más seguros: los operadores de factores rolling en caliente ahora usan las rutas rápidas de bottleneck/NumPy, el paralelismo del alpha bench evita cargas de trabajo repetidas sobre paneles grandes, y las matemáticas base de equity cuentan con cobertura de regresión (#376, cierra #339, trabajo original de #342 por @shadowinlife). Las rutas de subida y de informes Shadow se sacaron del monolítico api_server.py como el primer tramo acotado de modularización de la API, mientras #331 permanece abierto (#375, basado en #358, gracias @shadowinlife). Los backtests generados ahora heredan solo un entorno de subproceso en lista blanca en lugar de la superficie completa de secretos del proceso padre (#374, cierra #332), y los canales de mensajería instantánea ganaron el restablecimiento de sesión /new y comandos de emparejamiento insensibles a mayúsculas/minúsculas (#372, cierra #371, gracias @shadowinlife).

  • 2026-07-01 🧹 Refinamiento de seguridad + limpieza del tracker: se reforzaron los valores por defecto de desarrollo de API/Docker/frontend, se estabilizaron el canal de Settings y los bordes de zh-CN, se resolvieron alertas de dependencias/CSP del frontend y se cerraron elementos obsoletos del tracker de WhatsApp y paper-trading (#338, #351, #349, #365, #367, #350, #335, #283).

  • 2026-06-30 💬 Runtime de canales de mensajería instantánea para entrega de investigación: Vibe-Trading ahora puede conectar el mismo runtime de sesión de agente a 16 adaptadores de mensajería integrados — WebSocket, Telegram, Slack, Discord, Matrix, WhatsApp, Signal, QQ/NapCat, WeChat/WeCom, Feishu/Lark, DingTalk, Teams, correo electrónico y Mochat. La CLI (vibe-trading channels status/start/stop/login/pairing), REST (/channels/status, /channels/start, /channels/stop, /channels/pairing/command) y el panel de Settings de la Web UI exponen estado, sugerencias de recuperación, arranque/detención y emparejamiento de remitentes; los adaptadores respaldados por SDK permanecen detrás de extras como vibe-trading-ai[telegram] o vibe-trading-ai[channels] (#341).

  • 2026-06-29 🛡️ Seguridad de asesoría en vivo + conector de solo lectura de Trading 212 + correcciones de Windows/Gemini: las protecciones de órdenes en vivo ahora cuentan con una PreTradeAdvisoryInterface opcional y agnóstica de broker que registra revisiones de asesoría sin eludir la puerta de mandato, el interruptor de emergencia ni el registro de auditoría (#328, cierra #317, gracias @shadowinlife). Trading 212 se incorpora a la capa de conectores con soporte de solo lectura para cuenta, posiciones, órdenes, historial y metadatos de instrumentos; place_order / cancel_order siguen rechazando de forma estricta hasta que exista un límite estructural entre paper y live (#321, cierra #309, gracias @mvanhorn). El arranque en Windows evita el fallo de Timestamp de pandas 3.0 mediante la restricción <3.0.0 (#329, cierra #324, gracias @hannibal-lee); se verificó/corrigió en main la reproducción del historial en formato dict de thought_signature de Gemini (#318); los estados financieros de .US ahora se enrutan a SEC EDGAR en lugar de Eastmoney (#325); y la página de aterrizaje de la Alpha Library recibió endurecimiento de caché/fecha/selector/noscript/DNS-prefetch, mientras que un CSP más estricto y mejoras de tarjetas sociales siguen en seguimiento (#323).

  • 2026-06-28 🧰 Configuración/desarrollo multiplataforma + endurecimiento de runtime y herramientas de archivo: vibe-trading setup y vibe-trading dev ahora manejan compilaciones de TypeScript en Windows, lanzan el backend desde el cwd correcto, usan el puerto 5899 de Vite y cierran los procesos hijos de forma limpia (#292, gracias @digger-yu). El sondeo de estado del runtime ahora se degrada en lugar de fallar (#322); las claves de caché de OAuth de MCP se sanean (#313); se reforzaron los valores por defecto de OpenAI y la validación de agent.json de Robinhood (#319, #320, gracias @mvanhorn); y las herramientas de archivo obtuvieron raíces de lectura/escritura aisladas más pruebas de sandbox más amplias (#299, gracias @skloxo).

  • 2026-06-27 🧯 Resiliencia del filtro de contenido + limpieza del contrato de funciones de la cuenta espejo: las ejecuciones dirigidas por eventos y de swarm ahora omiten los rechazos individuales de moderación de contenido de LLM, advierten en las tarjetas de ejecución cuando las tasas de filtrado son altas, y reconocen los motivos de finalización de seguridad de Gemini en lugar de abortar todo un análisis (#308, cierra #307, gracias @shadowinlife). La extracción/generación de código de la cuenta espejo ahora comparte un único contrato PRICE_FEATURES y mantiene límites de retorno de cuatro decimales, evitando la desviación entre reglas y código generado y la pérdida de precisión en prior_5d_return (#316, gracias @Robin1987China).

  • 2026-06-26 🎯 Entrada condicional de la cuenta espejo + enrutamiento de tushare para ETF/índice/HK: las reglas extraídas de la cuenta espejo ahora incorporan límites de RSI / retorno previo, de modo que el SignalEngine generado entra en condiciones reales (RSI dentro de rango, retorno previo dentro de rango) en lugar de replicar ciegamente la cadencia de tenencia (#314, sigue a #302, gracias @Robin1987China). El cargador de tushare también enruta ETF/LOF → fund_daily(), índices → index_daily(), y acciones de HK → hk_daily() en lugar de llamar siempre a daily() (que devuelve vacío silenciosamente para no-acciones), con advertencias de resultado vacío/obtención parcial por símbolo (#315, cierra #310, gracias @shadowinlife).

  • 2026-06-25 🧪 JSON de validación estricto + contexto de agente más ligero: la validación de backtest independiente ahora normaliza los valores anidados NaN / Infinity antes de escribir artifacts/validation.json o la salida estándar de la CLI, de modo que los analizadores JSON estrictos ya no fallan con los payloads de validación (#306, gracias @gyx09212214-prog). El prompt del agente también deriva el número actual de fuentes de datos desde el registro del cargador, y _microcompact() ahora espera a que haya presión real de tokens en lugar de limpiar resultados de herramientas antiguos durante ejecuciones cortas (#296, cierra #282, gracias @MarkfuGod).

  • 2026-06-24 🎯 Contexto de precio de la cuenta espejo + UI china reactiva + corrección de autenticación LAN: la extracción de reglas de la cuenta espejo ahora ve un contexto de entrada seguro en el tiempo (PIT) — entry_rsi14 y prior_5d_return obtenidos a través del registro del cargador a la fecha de buy_dt, con degradación elegante sin conexión/sin datos (#302, sigue a #295, gracias @Robin1987China). Los paneles principales de la Web UI ahora usan traducciones reactivas en inglés / zh-CN en gráficos, chat, Alpha Library, Correlation y Run Detail (#301, gracias @skloxo). Los despliegues remotos del mismo origen de la Web UI con API_AUTH_KEY pueden volver a publicar y subir archivos tras el endurecimiento de CSRF, mientras que los orígenes cross-site no coincidentes siguen bloqueados (#304, gracias @Hinotoi-agent).

  • 2026-06-23 🛡️ Endurecimiento de CSRF de la API local: una página web maliciosa ya no puede impulsar solicitudes cross-site inseguras (POST/PUT/DELETE) contra la API loopback — CORS bloquea la lectura de la respuesta pero no el efecto secundario, así que la confianza del modo de desarrollo loopback ahora aplica la protección cross-site existente a los métodos inseguros antes de otorgarla. Los métodos seguros y las subidas locales de CLI / no-navegador no se ven afectados (#293, gracias @Hinotoi-agent).

  • 2026-06-22 🔧 Corrección de OAuth de autorización en vivo + corrección del titular de Alpha Zoo: connector authorize ahora mantiene abierto el intercambio OAuth durante un inicio de sesión de broker de varios minutos (ajustable mediante VIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS) y ya no lanza un servidor de callback competidor en el reintento, de modo que el token realmente persiste (#281, cierra #259, gracias @Robin1987China). La página de Alpha Zoo ya no imprime su recuento de alphas dos veces (#287, cierra #286, gracias @digger-yu). La investigación programada también recibió documentación de uso de extremo a extremo (#288).

  • 2026-06-21Ejecutor de investigación programada + biblioteca de informes + atribución posterior al backtest: la investigación programada ahora funciona de extremo a extremo — un ejecutor en segundo plano desactivado por defecto (VIBE_TRADING_ENABLE_SCHEDULER) dispara los trabajos de intervalo/cron vencidos a través del runtime de sesión (#278, gracias @mvanhorn, cerrando #254). Una nueva página de biblioteca de ejecuciones /reports lista, busca y filtra ejecuciones dignas de informe con enlaces a Run Detail + Compare (#224, gracias @LemonCANDY42). Y después de cada backtest el agente ahora ejecuta atribución por capas — ganadores/perdedores a nivel de operación, regresión beta, análisis de régimen de mercado, y una prueba de permutación de Monte Carlo, condicionada por la disponibilidad de datos y el enrutamiento (#280, gracias @shadowinlife).

  • 2026-06-20 🔬 Se cierra el bucle del Research Autopilot (fase 3) + protección de integridad OHLC del cargador + 4 alphas académicos: Research Autopilot ahora ejecuta hipótesis → motor de señales → backtest de extremo a extremo — scaffold_signal_engine escribe un motor con contrato correcto y link_autopilot_backtest retroalimenta las métricas de la ejecución a la hipótesis (68 herramientas) (#267). Una comprobación estructural de sanidad OHLC descarta barras corruptas (high < low, precios no positivos, mal encuadre) de forma centralizada en el límite del cargador, protegiendo cada fuente de datos (#274, gracias @Shizoqua). Y la familia de alphas académicos crece de 6 a 10 — reversión de Jegadeesh, máximo de 52 semanas de George-Hwang, iliquidez de Amihud, asimetría de Harvey-Siddique (456 factores) (#277, gracias @Robin1987China).

  • 2026-06-19 🚀 v0.1.10 — Capa de datos global: las fuentes de datos de mercado crecen de 10 a 18 (gratuitas Eastmoney / Sina / Stooq / Yahoo + con clave Finnhub / Alpha Vantage / Tiingo / FMP, con respaldo ante riesgo de bloqueo) más 18 herramientas de datos de solo lectura (flujo de fondos, dragon-tiger, flujo hacia el norte, margen, operaciones en bloque, SEC EDGAR + XBRL, estados financieros, cadenas de opciones, cribado de todo el mercado…) en A-share / US / HK, todo a través de MCP. También agrupa todo lo publicado desde 0.1.9 — 10 conectores de broker, alpha compare, la revisión general de fiabilidad de proveedores, y la caché de datos opcional. pip install -U vibe-trading-ai

  • 2026-06-18 🔬 Research Autopilot fase 1 + un cargador local Data Bridge, + un aviso de seguridad de Discord: las nuevas run_research_autopilot + generate_backtest_config conectan Hipótesis → Objetivo de Investigación → backtest de extremo a extremo (ahora 50 herramientas), y un cargador local lee OHLCV directamente desde tus propios archivos CSV / Parquet / DuckDB (#260, #252, gracias @Robin1987China), junto con el análisis de llamadas a herramientas DSML de DeepSeek y una ola de endurecimiento de contención de identificadores. ⚠️ Seguridad: la antigua invitación de Discord de la comunidad ahora apunta a un servidor que no controlamos, que ejecuta una estafa de phishing con una falsa "verificación" de wallet de Collab.Land — eliminada en todas partes; el único Discord oficial es el servidor de HKUDS (discord.gg/6TdQnT5xcF), y nunca te pediremos que conectes una wallet.

  • 2026-06-17 🧩 Compatibilidad de instalación + correcciones de proveedores Opus/Kimi: la instalación base pip install vibe-trading-ai ya no arrastra la cadena de dependencias opcional pyharmonics / ta; la detección armónica ahora vive detrás de vibe-trading-ai[harmonic] mientras el detector integrado sigue disponible (#250, cierra #249). El bucle del agente también evita los mensajes de traspaso de prellenado del asistente rechazados por Opus 4.8+, y Kimi/Moonshot puede sobrescribir el User-Agent del cliente con MOONSHOT_USER_AGENT (#248, cierra #246 y #204); las pruebas de seguimiento ahora cubren directamente las rutas de traspaso de resultados en segundo plano y de auto-compactación (#251).

  • 2026-06-16 🛡️ Endurecimiento de seguridad/API + alias GLM/Zhipu: las escrituras de Settings requieren autenticación cuando está configurada (#245); las herramientas de la API con capacidad de shell requieren la habilitación explícita VIBE_TRADING_ENABLE_SHELL_TOOLS=1 (#243); el apagado local requiere autenticación cuando hay una clave de API configurada (#241); y los hosts con apariencia loopback no confiables se rechazan en lugar de tratarse como locales (#242). También se limpiaron bordes del runtime: el chat de la Web UI sincroniza los intentos completados (#236), las tarjetas de ejecución emiten JSON estricto para métricas no finitas (#238), un valor malformado de RSSHUB_TIMEOUT_S / RSSHUB_FETCH_BUDGET_S recurre de forma segura a su valor por defecto (#240), y el respaldo de reintento de ddgs cuenta con cobertura de regresión (#239). GLM/Zhipu es ahora un alias de proveedor de primera clase con inferencia de nombre de modelo (#247, cierra #237).

  • 2026-06-15 🧭 Resiliencia de búsqueda web + correcciones de continuidad de ejecución en la Web UI: web_search ya no falla cuando un solo motor está limitado por tasa — ahora consulta varios motores gratuitos sin clave en orden (DuckDuckGo, Google, Bing, Brave, Mojeek, Yahoo) con reintento/backoff, trata "sin resultados" como una respuesta vacía en lugar de un error, y devuelve un mensaje útil en lugar de un ❌ escueto cuando todos los motores están limitados (sobrescribe la lista de motores con VIBE_TRADING_SEARCH_BACKENDS) (#232, cierra #231, gracias @Ethan-sun01). En la Web UI, cambiar de página durante una ejecución ya no la congela — el chat se vuelve a suscribir a la transmisión en vivo y reproduce el progreso perdido al regresar (#234) — y el botón Detener ahora surte efecto en medio de la transmisión y entre herramientas en lugar de solo en los límites de iteración (#235), cerrando ambas mitades de #229 (gracias @kalkinj). El cargador de baostock también acepta códigos nativos sh.601398 / sz.000001 junto con el estilo tushare 601398.SH (#230, gracias @bhlt).

  • 2026-06-14 📊 Uso de tokens por ejecución + gráficos progresivos en Run Detail: cada ejecución del agente ahora persiste el uso de tokens reportado por el proveedor como un llm_usage.json a nivel de ejecución — proveedor/modelo, totales agregados y conteos por iteración — expuesto de forma aditiva en /runs/{id}, de modo que el costo en tokens de una ejecución terminada sigue siendo auditable después de que la transmisión en vivo desaparece (solo datos reportados por el proveedor; sin captura de prompt/contenido, sin estimación de precio) (#223, gracias @LemonCANDY42). La página Run Detail ya no carga por adelantado las velas de todos los símbolos: la respuesta por defecto de /runs/{id} no cambia, pero la UI ahora renderiza primero el resumen de la ejecución y carga el gráfico de cada símbolo a demanda mediante los modos opcionales ?chart_payload=summary / ?chart_symbol=, con estado de carga por símbolo y un control de "cargar todo con progreso" (#225, gracias @LemonCANDY42). Dos correcciones del cargador cierran el ciclo: el límite exclusivo end de yfinance ya no descarta el último día de negociación solicitado — la descarga ahora pasa end + 1 día mientras las claves de caché conservan el rango original (#226, gracias @gyx09212214-prog) — y un valor malformado de CCXT_TIMEOUT_MS / OKX_TIMEOUT_S ahora advierte y recurre a su valor por defecto en lugar de lanzar una excepción en la importación y bloquear el arranque (#227, gracias @gyx09212214-prog).

  • 2026-06-13 ↩️ Reanudar una sesión pasada por ID desde la CLI: la CLI interactiva ahora imprime el id de sesión al salir, con una sugerencia lista para copiar y pegar vibe-trading resume <session-id> — de modo que localizar el rastro de una ejecución terminada ya no implica adivinar cuál carpeta bajo agent/sessions/ es la más reciente por timestamp. El nuevo subcomando vibe-trading resume <session-id> reabre exactamente esa sesión y reproduce sus turnos recientes en el bucle; un id desconocido falla rápido en lugar de iniciar silenciosamente una sesión en blanco (#218, gracias @zwrong).

  • 2026-06-12 🩺 Revisión general de fiabilidad de proveedores — bloqueos de DeepSeek, acceso a Kimi, viveza del streaming: un conjunto de reportes de proveedores — ejecuciones de DeepSeek atascadas en "Agent is working…" (#208, gracias @XYWOX), reached max iterations enmascarando respuestas vacías del modelo (#203, gracias @mojianliang), la UI que nunca se recupera tras un estancamiento (#195, gracias @mafia23), y Kimi rechazando al cliente (#204, gracias @liao497) — compartían una misma raíz: cada proveedor compatible con OpenAI pasaba por un único shim que aplicaba peculiaridades de DeepSeek/Kimi/Gemini de forma global y silenciaba fallos de transmisión. El comportamiento específico de cada proveedor ahora vive en una capa de capacidades explícita — captura/reproducción de razonamiento, firmas de pensamiento de Gemini, el User-Agent de Kimi, el cuerpo de razonamiento de OpenRouter están cada uno acotados a su propio proveedor en lugar de contaminarse entre sí. Las transmisiones que solo contienen razonamiento muestran un indicador en vivo de "Reasoning…" en lugar de silencio absoluto; un fallo de transmisión lanza un provider_stream_error contextual con un reintento automático para reinicios transitorios (los 4xx deterministas fallan rápido) en lugar de recurrir silenciosamente a una llamada no transmitida más lenta; una respuesta vacía del modelo se reporta como empty_model_response en lugar de "max iterations"; los heartbeats de SSE ya no rompen la reproducción de reconexión; y una herramienta de solo lectura atascada expira en lugar de esconderse detrás de los heartbeats para siempre. Un nuevo vibe-trading provider doctor imprime una instantánea redactada de proveedor/modelo/paquete/proxy para triaje en un solo comando de bloqueos del lado del entorno. Los usuarios de DeepSeek pueden optar por el adaptador nativo oficial con pip install "vibe-trading-ai[deepseek]", y el requisito temperature=1 de kimi-k2.x se aplica automáticamente — la ruta de Kimi está verificada de extremo a extremo contra la API en vivo (llamadas a herramientas + reproducción estricta de razonamiento multi-turno en kimi-k2.6).

  • 2026-06-11 🐝 Los workers del swarm ahora obtienen datos de mercado a través de la capa del cargador: una ejecución del comité de inversión sobre NVDA expuso una cadena de brechas — los workers escribían scripts ad-hoc de yfinance, confiaban en una última barra malformada (volumen presente, OHLC vacío), filtraban NaN en JSON no estricto, y un prompt de continuación sin contexto reenrutaba al preset equivocado (#198, gracias @BillDin por un diagnóstico excepcional además de ambas correcciones). Los workers del swarm ahora obtienen una herramienta local get_market_data respaldada por el mismo registro de cargador normalizado que MCP — JSON estricto, los flotantes no finitos se serializan como null — conectada a cada preset de datos de mercado (21 workers en 13 presets) con una política de prompt que orienta el trabajo de OHLCV primero hacia herramientas (#199); run_swarm toma un preset_name explícito y rechaza fragmentos de continuación ambiguos en lugar de recurrir silenciosamente a equity_research_team (#200). El anclaje también se volvió más inteligente: un ticker estadounidense simple como NVDA en un prompt de swarm se promueve a NVDA.US (con protección contra stopwords), de modo que los workers parten de precios pre-obtenidos y autorizados. La herramienta también se une al registro del agente principal — ahora 48 herramientas. Además: tus datos de Docker ahora sobreviven a las actualizaciones — la memoria persistente, el índice de búsqueda de sesiones, las skills creadas por el usuario, las cuentas espejo y la configuración de broker viven en volúmenes con nombre, de modo que docker compose up --build ya no los borra (#197, gracias @FlyerJ).

  • 2026-06-10 🐳 Docker alcanza un Ollama del lado del host listo para usar: dentro del contenedor, localhost es el propio contenedor, así que el OLLAMA_BASE_URL=http://localhost:11434 incluido por defecto fallaba en la comprobación previa del LLM para cada configuración de Ollama en Docker. docker-compose.yml ahora por defecto usa http://host.docker.internal:11434 (exporta OLLAMA_BASE_URL para apuntar a otro lugar) y agrega el mapeo host-gateway en extra_hosts para que el mismo archivo funcione tanto en Linux como en Docker Desktop (#196, gracias @ShahNewazKhan).

  • 2026-06-09 🔑 Error más claro cuando la Web UI se abre desde otra máquina: acceder al chat desde un cliente no loopback (otra máquina, un host VM, un teléfono en tu LAN) sin API_AUTH_KEY configurado devolvía 403 en cada endpoint sensible — enviar un mensaje, listar sesiones, estado en vivo — pero el chat solo mostraba un genérico "Failed to send message, please retry.". La ruta de envío ahora muestra la razón real — "Remote API access requires an API key. Add it in Settings, or run the backend on localhost for local-only use." — y la configuración de la Web UI en el README explica la regla de localhost frente a LAN además de las tres soluciones (navegar vía localhost en la misma máquina; configurar API_AUTH_KEY e ingresarlo una vez en Settings; o VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 para la puerta de enlace del host de Docker Desktop) (#191, gracias @mafia23).

  • 2026-06-08 🔧 Corrección de llamadas a herramientas multi-turno de Gemini 3.x: esto completa la corrección del modelo de pensamiento de Gemini 3.x. El intercambio del 6/05 (#176) solo cubría el historial en memoria, pero el bucle real del agente reproduce el historial como diccionarios en formato OpenAI, donde LangChain descartaba la thought_signature por llamada a herramienta antes de construir la solicitud — así que las llamadas a herramientas multi-turno seguían fallando con 400 por missing thought_signature. Ahora se vuelve a adjuntar en el único punto de estrangulamiento _convert_input por el que pasan tanto invoke como stream (incluidas las llamadas paralelas, donde solo la primera de N está firmada) (#184, gracias @ngoanpv).

  • 2026-06-07 🐝 Estado del swarm en vivo en la línea de tiempo del chat: cuando el agente lanza un swarm multiagente (comité de inversión, mesa cuantitativa, comité de riesgo, …), el chat ahora renderiza una tarjeta de estado en línea que transmite el estado de cada worker — esperando / ejecutando / hecho / fallido / bloqueado / reintentando — en tiempo real, la misma visibilidad por agente que ya tenía el panel independiente del swarm. Los eventos del runtime se puentean hacia la transmisión SSE de la sesión sin cambiar la API /swarm/runs existente, y una tarjeta terminada se rehidrata desde el resultado final de run_swarm al reconectar o reproducir el historial (#188, gracias @BillDin). El enrutamiento de presets también se volvió más preciso: un preset nombrado explícitamente (p. ej., investment_committee, con o sin guiones bajos) ahora gana sobre la puntuación por palabras clave, y la palabra clave desnuda IV de derivados ya no coincide falsamente dentro de palabras comunes como "given" (#189, gracias @BillDin).

  • 2026-06-06 ⚖️ Alpha compare — cara a cara entre CLI, Web UI, REST y agente: un nuevo alpha compare enfrenta una lista corta de alphas de Alpha Zoo entre sí en un universo y periodo, y luego los clasifica por IC medio/desviación, IR, ratio de IC positivo o número de muestras — cada uno con su brecha respecto al líder. A diferencia de un bench completo del zoo, evalúa solo los alphas que nombres (un nuevo filtro de subconjunto run_bench(only=…)), así que comparar tres alphas ya no puntúa los 191 de su zoo. Un núcleo compartido impulsa cada superficie: vibe-trading alpha compare <id1> <id2> … --sort ir (CLI), una vista Compare en la Web UI de Alpha Zoo (marca alphas en el catálogo → comparación con un clic con una tabla de clasificación transmitida), POST /alpha/compare + SSE (REST), y una herramienta de agente de solo lectura alpha_compare (47 herramientas ahora).

  • 2026-06-05 🇮🇳 Conectores Dhan + Shoonya (India) — 10 brokers en total: la capa de trading orientada a conectores agrega Dhan y Shoonya para el mercado indio (acciones NSE/BSE + F&O), llevando el total a diez brokers. Ambos son solo paper + solo lectura — como Longbridge, sus APIs no exponen ningún discriminador de runtime entre paper y live, así que sus place_order / cancel_order rechazan de forma estricta cualquier configuración que no sea paper desde la primera línea (la regla: un broker sin protección estructural entre paper y live queda limitado a paper + solo lectura) (#181, cierra #174). Este ciclo también corrige los modelos de pensamiento de Gemini 2.5 / 3.x: su thoughtSignature por llamada a herramienta ahora se propaga correctamente a través de la ruta compatible con OpenAI, así que las llamadas a funciones multi-turno ya no fallan con INVALID_ARGUMENT (#176, cierra #170, gracias @mvanhorn y @jliu6789). Se agregaron docstrings en chino a los 452 factores de Alpha Zoo (#180, gracias @LeeCQiang), y una suite de pruebas frontend (197 pruebas vitest) más pruebas de seguridad backend de autenticación / recorrido de rutas / CORS se unieron a la CI (#175, gracias @sambazhu).

  • 2026-06-04 🗃️ Caché de datos local opcional para las 7 fuentes de datos: un nuevo interruptor VIBE_TRADING_DATA_CACHE permite que cada cargador de backtest — tushare, okx, ccxt, akshare, mootdx, yfinance, futu — almacene en caché las barras históricas ya asentadas bajo ~/.vibe-trading/cache (directorio de usuario, nunca el repositorio), de modo que los backtests repetidos y de largo horizonte / entre mercados evitan la red y las limitaciones de tasa del proveedor. Desactivado por defecto. Los cargadores por lotes y de conexión (yfinance, futu) omiten por completo la descarga masiva / la conexión a FutuOpenD ante un acierto total de caché, una protección de obsolescencia nunca almacena en caché un rango que termina hoy (su última barra aún se está formando), y los marcos en caché se reproducen byte a byte idénticos a los recién obtenidos (#177, gracias @mvanhorn). También se publicó una nueva guía para colaboradores para PR asistidos por IA / automatización, que mapea las comprobaciones locales seguras y las superficies de alto riesgo de broker/MCP/credenciales (#173).

  • 2026-06-03 🧹 Triaje comunitario + correlación de trazas: las entradas de traza de llamadas a herramientas ahora llevan el call_id original, de modo que un tool_result pueda emparejarse de vuelta con su tool_call al reproducir la traza de una ejecución — las vistas previas de argumentos se mantienen truncadas para que los archivos de traza sean pequeños (#168, gracias @zwrong). Los comentarios del código fuente ya no apuntan a una ruta de documentación de uso interno que los colaboradores externos no podían encontrar (#166, gracias @jaleelpersonal). También se clarificó que la advertencia del resolutor de langchain-community en la instalación es solo un aviso inofensivo de paquete residual, no un fallo (#167), y se catalogó la propagación de thoughtSignature de Gemini 2.5/3.0 para llamadas a funciones como una tarea help wanted con un plan de corrección completo (#170, gracias @jliu6789).

  • 2026-06-02 🔌 Seis nuevos conectores de broker (Tiger / Longbridge / Alpaca / OKX / Binance / Futu): la capa de trading orientada a conectores gana un transporte de SDK directo junto a IBKR (local) y Robinhood (MCP). Cada conector expone cuenta / posiciones / órdenes / cotización / historial de solo lectura más colocación de órdenes en cuenta paper; prueba tus estrategias en estas cuentas paper de broker. Cinco de ellos (Tiger, Alpaca, OKX, Binance, Futu) también admiten colocación de órdenes acotada y con puerta de mandato bajo el mismo modelo de seguridad que Robinhood: un mandato comprometido por el usuario (universo de símbolos / tamaño de orden / exposición / apalancamiento / límite diario), un interruptor de emergencia a nivel de sistema de archivos, una puerta previa a la operación que falla de forma segura, y un libro de auditoría completo. Longbridge es solo paper + solo lectura (su API no expone ningún discriminador de runtime entre paper y live). Cada distinción entre paper y live es una protección estructural por broker — formato de id de cuenta, separación de host, bandera de demo o entorno de trading. Nuevas herramientas trading_place_order / trading_cancel_order; se agregaron las clases de activos de HK y A-share al universo del mandato. Experimental / usar bajo tu propio riesgo.

  • 2026-06-01 🚀 Se publica v0.1.9 (pip install -U vibe-trading-ai): recoge todo lo publicado desde 0.1.8. Perfiles de broker orientados a conectores (IBKR local de solo lectura TWS / IB Gateway + Robinhood Agentic Trading detrás de OAuth, un mandato comprometido, protección de órdenes, libro de auditoría y parada instantánea). Runtime de Objetivo de Investigación en CLI / REST / MCP / Web. Un pase sobre el swarm — reconciliación en vivo + keepalive de MCP, herramientas MCP de worker configuradas por el operador, un control aleatorio estricto para el alpha-bench, y un nuevo retry_run para relanzar ejecuciones fallidas/obsoletas (ahora 36 herramientas MCP). La refactorización del paquete agent/cli/ con una UI de terminal renovada, el cargador de A-share sin token mootdx, y un pase de robustez en backtest / bucle del agente / sesiones. --version ahora siempre coincide con el paquete instalado, corrigiendo la desviación de 0.1.8 (#156).

  • 2026-05-31 🔌 Arquitectura de broker orientada a conectores (IBKR + Robinhood): el acceso al trading ahora parte de un perfil de conector seleccionable en lugar de puntos de entrada separados de broker/live. vibe-trading connector list/use/check/account/positions/orders/quote/history y las herramientas MCP trading_* comparten el mismo perfil seleccionado, donde paper/live es un atributo del conector. IBKR puede usarse de inmediato a través de un perfil local de solo lectura TWS / IB Gateway, mientras que la ruta oficial de MCP remoto de IBKR se establece como una sonda OAuth mcp.read hasta que haya nombres de herramientas de lectura estables disponibles. Robinhood Agentic Trading sigue siendo el conector MCP en vivo acotado detrás de OAuth, un mandato comprometido, protección de órdenes, libro de auditoría y parada instantánea.

  • 2026-05-30 🧰 Pase de robustez — backtest, bucle del agente, sesiones: los motores de señales generados por LLM ahora pasan una validación de interfaz previa antes de instanciarse, detectando auto-importaciones circulares, un generate() faltante, argumentos de __init__ sin valor por defecto y tipos de retorno incorrectos con errores JSON útiles en lugar de tracebacks sin procesar (#149); una mejora posterior enruta los errores de validación AST a nivel de código fuente a través del mismo sobre JSON limpio. El bucle del agente ya no consume las 50 iteraciones para terminar en un estado failed sin salida — ahora refleja el aviso de cierre del worker del swarm al 80% del presupuesto de iteraciones y descarta las definiciones de herramientas en la última iteración para forzar una respuesta de texto final (#148), protegido para activarse solo a mitad de ejecución de modo que nunca desplace el contexto del objetivo de investigación. Las escrituras de mensajes de sesión ahora hacen flush + fsync en cada append para que las respuestas de IA costosas sobrevivan a un fallo a mitad de escritura, y la ruta de lectura omite las líneas JSONL corruptas (registrando los primeros 200 caracteres para recuperación) en lugar de devolver un 500 en todo el endpoint /messages (#147). El compositor de la Web también corrige el manejo de Enter con IME para que un Enter que confirma una composición ya no envíe a mitad de palabra (#146).

  • 2026-05-29 🔐 Soporte de Robinhood Agentic Trading (opcional, autonomía acotada): agrega soporte para Robinhood Agentic Trading (MCP remoto, OAuth). Desactivado y de solo lectura por defecto; el agente actúa solo dentro de un mandato comprometido por el usuario (símbolos / tamaño de orden / exposición / apalancamiento / límite diario), con un interruptor de emergencia instantáneo a nivel de sistema de archivos, cierre preventivo de posiciones, expiración automática de mandato, un libro de auditoría completo y un runner autónomo persistente. Sin custodia, sin sede de negociación propia — el broker retiene los fondos y ejecuta; nosotros solo transmitimos la intención. Experimental / usar bajo tu propio riesgo.

  • 2026-05-28 🧪 Seguridad del swarm + puerta estricta de alpha + MCP de worker: el DAG del swarm bloquea tareas posteriores cuando falla una anterior (#145). El nuevo run_bench_strict() agrega un control aleatorio sobre el mismo universo + una división OOS para detectar factores que solo siguen el beta del mercado (#143, gracias @Soli22de). Los workers del swarm pueden llamar a servidores MCP externos configurados por el operador, con el límite de confianza fijado (#142, gracias @shadowinlife).

  • 2026-05-27 📊 Fuente de datos A-share mootdx + refinamiento de salida: el nuevo cargador mootdx habla el protocolo TCP nativo 通达信 para OHLCV de A-share (sin autenticación, sin límite de tasa por IP, diario + intradía con paginación de retroceso de 25 páginas), ubicándose entre tushare y akshare en la cadena de respaldo (#107). El cargador CCXT ahora lee HTTP_PROXY/HTTPS_PROXY/ALL_PROXY para que los datos públicos de Binance/OKX funcionen desde redes restringidas (#126, gracias @ruok808). El renderizado de la respuesta final también eliminó los feos separadores horizontales --- de ancho completo en CLI y Web: el prompt del sistema ahora orienta al agente hacia tablas markdown y encabezados ##, el renderizador de la CLI elimina los HR independientes como defensa adicional, y la burbuja de chat oculta cualquier <hr> que se filtre (#139, gracias @sdwxm188).

  • 2026-05-26Cierre del ciclo de vida del Objetivo de Investigación: el modo Goal ahora se comporta como un ejecutor de tareas real: la creación de objetivos en la Web UI crea o vincula la sesión y envía de inmediato el turno de arranque; los objetivos activos pueden continuarse, editarse, cancelarse y completarse a través de Web/API/CLI/MCP; y el agente avanza desde la instantánea actual del objetivo (criterios, evidencia, afirmaciones, elementos abiertos) en lugar de solo el prompt original. Los objetivos cubiertos pero aún activos ahora entran en una actualización de auditoría/estado en lugar de detenerse en silencio, con cobertura de regresión en backend, CLI, MCP y eventos del frontend.

  • 2026-05-25 🧼 UI de chat más limpia + flujo de trabajo del compositor: la Web UI mantiene el chat centrado en la siguiente acción: los modos de subida, swarm y objetivo de investigación ahora viven detrás del menú + del compositor en lugar de paneles flotantes. El contexto activo aparece encima del campo de entrada como chips compactos, y los detalles del objetivo se expanden en línea solo cuando es necesario. La UI también elimina la antigua capa de i18n personalizada en favor de texto directo en inglés, restringe las tarjetas de Full Report a ejecuciones dignas de informe, y refuerza el arranque/reporte de estado del desarrollo local para pruebas de humo confiables en el navegador.

  • 2026-05-24 🎯 Runtime del Objetivo de Investigación: se agregó una capa de Objetivo de Investigación con alcance de sesión en backend, CLI, API/MCP, SSE y Web UI. Los objetivos persisten afirmaciones, criterios de aceptación, filas de evidencia, presupuestos y política de finalización; las herramientas del agente pueden crear objetivos y adjuntar evidencia; /goal le da a la CLI un punto de entrada directo; REST/MCP exponen instantáneas de objetivos y escrituras de evidencia; SSE mantiene actualizados a los clientes de chat. Correcciones de auditoría posteriores blindaron la evidencia verificada, bloquearon niveles de riesgo de trading en vivo a través de herramientas del agente, conectaron los objetivos creados por CLI a turnos posteriores, limpiaron los libros de objetivos al eliminar la sesión, habilitaron reproducir-todo, y corrigieron condiciones de carrera del frontend entre sesiones.

  • 2026-05-23 🖥️ Renovación de la CLI interactiva: la puerta de entrada de la terminal ahora se abre con un banner más grande de Vibe-Trading, un divisor de prompt más limpio, resumen del turno anterior, tiempo posterior a la ejecución, y un riel de actividad estilo Claude Code para el trabajo en vivo del agente. Las llamadas a herramientas, obtenciones de datos/web, acciones estilo shell, respuestas en Markdown y tablas con pipes se renderizan en una transcripción más legible, mientras que las ejecuciones canalizadas (piped) o sin TTY mantienen la salida de texto simple para automatización. Las capturas de pantalla de la CLI generadas ahora se tratan como artefactos locales en lugar de archivos de documentación versionados, manteniendo el repositorio más ligero.

  • 2026-05-22 🧭 Recuperación del swarm + keepalive de MCP: el estado del swarm ahora se reconcilia a partir de los archivos de tarea en vivo en cada lectura, de modo que las vistas de API/MCP/SSE/lista recuperan ejecuciones caídas o obsoletas en lugar de mostrar instantáneas permanentes de running. run_swarm envía heartbeats de progreso de MCP mientras hace sondeo, con un primer frame fijo de swarm_started run_id=<id> para los clientes que se reconectan tras cortes de transporte; los workers ahora emiten heartbeat durante el streaming del LLM, las obtenciones de anclaje y la ejecución de herramientas. El recolector de ejecuciones obsoletas usa umbrales por ejecución y deriva el estado terminal de los estados de las tareas, SwarmTool ya no cancela un equipo aún en ejecución solo porque su presupuesto de espera venció, y los clientes MCP pueden llamar a reap_stale_runs() para limpieza explícita. El pase de DX de hoy también actualizó los modelos por defecto de los proveedores y alineó las comprobaciones de sintaxis de CI con el nuevo paquete agent/cli/. 22 nuevas pruebas de regresión cubren hidratación, recuperación de terminal, recolección de obsoletos, cadencia de keepalive, análisis de entorno y conexión de heartbeat; la suite completa de swarm/MCP está en 169 aprobadas, 4 omitidas.

  • 2026-05-21 🧱 Refactorización del paquete CLI: agent/cli.py (3216 LOC) se dividió en el paquete agent/cli/ — puerta de entrada interactiva, enrutador de slash, componentes Rich, más un shim _legacy.py que preserva cada subcomando y reexporta cada símbolo público para que cli.cmd_* / cli._INIT_ENV_PATH / cli.Confirm sigan funcionando. Un nuevo middleware de FastAPI sirve el shell de la SPA cuando un navegador abre /runs/{id} o /correlation directamente; el mismo estrechamiento se aplicó al proxy de desarrollo de Vite. La versión se unificó a través de cli/_version.py (ya no hay desviación entre --version y el banner), python -m cli se restauró mediante __main__.py, y la puerta del chat se estrechó para que chat --help / chat extra lleguen al argparse heredado en lugar de ser engullidos por el REPL.

  • 2026-05-20 🔬 CLI del Registro de Hipótesis: cierra el lado de CLI del Registro de Hipótesis publicado solo en backend el 2026-05-16. vibe-trading hypothesis list imprime una tabla Rich o JSON (filtro --status, --limit); show <id> renderiza un panel de detalle incluyendo tarjetas de ejecución vinculadas; invalidate <id> --note "..." cambia el estado a rejected preservando las notas de invalidación previas cuando se omite --note. Respeta la sobrescritura existente por variable de entorno VIBE_TRADING_HYPOTHESES_PATH y agrega un --path por invocación. 22 nuevas pruebas cubren la conexión, la salida JSON, el filtro de estado, el límite, los errores de id faltante y la persistencia de notas.

  • 2026-05-19Retroalimentación de herramientas en vivo + cancelación elegante: las herramientas de larga duración (backtests, PDFs grandes, workers de swarm) ya no parecen congeladas. Cada llamada a herramienta ahora emite un heartbeat de 3 segundos más progreso estructurado por etapa — run_backtest muestra marcadores de fase (validate / simulate / finalize), read_document marca el avance por página en PDF o por hoja en Excel, read_url marca fetch / parse. El panel Rich Live de la CLI renderiza un spinner Unicode, una barra de progreso ASCII, ETA, y apila hasta 3 herramientas en paralelo identificadas por nombre; el chat del frontend incorpora un nuevo ToolProgressIndicator con renderizados coalescidos por rAF, ARIA role="status" + un <progress> nativo oculto para lectores de pantalla, y un ProgressRing SVG determinado cuando se conoce el total. El primer Ctrl+C durante una ejecución de la CLI ahora llama a agent.cancel() para una salida elegante (el paso actual termina, la traza se cierra limpiamente); un segundo dentro de 2s fuerza el cierre. Primitivas reutilizables extraídas en el proceso: ProgressBar.tsx y lib/tools.ts (i18n de nombres de herramientas compartido).

  • 2026-05-18 🧹 Pase de limpieza + tres correcciones de errores latentes: CompositeEngine ya no enruta incorrectamente códigos de futuros chinos simples como RB2410 a GlobalFuturesEngine_is_china_futures se movió a un módulo compartido _market_hooks con una tabla de productos normalizada por mayúsculas/minúsculas y una protección para bolsas no chinas, más 9 nuevos casos de regresión. Los índices FTS5 de sesión ahora persisten timestamps para que la búsqueda entre sesiones pueda ordenar por fecha; la misma ruta también corrigió un re-upsert que actualizaba el reloj de pared del started_at de cada sesión. El proxy de modo desarrollo de Vite ganó la entrada faltante de /alpha para que la página AlphaZoo resuelva en npm run dev. tests/test_e2e_harness_v2.py (suite e2e con LLM real) ahora está condicionada por VIBE_TRADING_RUN_LIVE_E2E=1 para que la CI ya no cambie de forma según la presencia de claves de entorno. Se agregaron per-file-ignores de Ruff para el zoo de factores (3783 → 0 avisos F401), el tsconfig del frontend habilita noUnusedLocals / noUnusedParameters como protecciones de regresión, y se eliminaron 76 líneas de código repetitivo sin uso vw = vwap(...) de los alphas de gtja191. Neto -918 LOC.

  • 2026-05-17 🧬 Alpha Zoo v1 (0.1.8): 452 alphas cuantitativos preconstruidos en 4 zoos — qlib158 (Microsoft Qlib, atribución Apache-2), alpha101 (Kakushadze 101 Formulaic Alphas, reescritura del paper de arXiv:1601.00991), gtja191 (informe de factores de corto plazo de Guotai Junan de 2014), y academic (proxies basados en precio de Fama-French 5 + Carhart). Un comando CLI de una línea para benchmarking de cualquier zoo en tu universo: vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025. Incluye una puerta de pureza AST, una prueba de protección contra lookahead, un interruptor de emergencia de red pytest-socket, un LICENSE.md por zoo, y un flujo de Developer Certificate of Origin (DCO) para PRs de la comunidad. Alpha Library autogenerada en vibetrading.wiki/alpha-library/ + artículo del laboratorio de investigación ¿Cuáles de los 191 alphas de GTJA aún funcionan en 2026?.

  • 2026-05-16 🧪 Actualización de la columna vertebral de investigación: se agregó un Registro de Hipótesis en el backend con create_hypothesis, update_hypothesis, link_backtest y search_hypotheses; los lectores de contenido externo ahora adjuntan security_warnings solo de advertencia; y el escaneo de la cuenta espejo ahora usa evaluación determinista de características OHLCV en lugar del antiguo stub de fase calendárica.

  • 2026-05-15 🪪 la página de detalle de ejecución ahora muestra la tarjeta de la Capa de Confianza junto a métricas y artefactos, completando el lado de UI del trabajo de run_card.json publicado el 2026-05-12. PersistentMemory.add() también se reforzó en cuanto a longitud, nombres vacíos o con solo espacios en blanco, y bytes de control C0/C1 a partir del triaje de #108/#109/#110 (#112, gracias @Teerapat-Vatpitak).

  • 2026-05-14 🌐 la wiki pública ya está en línea en vibetrading.wiki con secciones de documentación, tutoriales, Research Lab y Alpha Library desplegadas a través de Cloudflare Pages. La memoria persistente también es inspeccionable desde la CLI mediante vibe-trading memory list/show/search/forget (#102, gracias @Teerapat-Vatpitak), y la tokenización/slugs de memoria ahora admiten texto en tailandés, árabe, hebreo y cirílico (#104).

  • 2026-05-13 🧭 las ejecuciones de swarm ahora fundamentan a los workers con datos de mercado obtenidos e informes persistidos más limpios (#93, #84).

  • 2026-05-12 🧾 los backtests ahora emiten run_card.json y run_card.md junto con los artefactos para ejecuciones de investigación reproducibles.

  • 2026-05-11 🧭 Slugs de memoria, contabilidad de swarm y comprobación previa de la CLI: la memoria persistente ahora preserva los caracteres CJK al generar slugs de archivo, evitando colisiones silenciosas de nombre de archivo para notas en chino/japonés/coreano (#95, gracias @voidborne-d). Los totales de ejecución de swarm ahora prefieren el uso de tokens reportado por el proveedor con el respaldo de estimación existente (#94, gracias @Teerapat-Vatpitak), y la UI de ejecución de la CLI obtuvo una comprobación previa de arranque para problemas comunes de entorno (#96, gracias @ykykj).

  • 2026-05-10 🧱 Protecciones de regresión + metadatos de ejecución: la recuperación de memoria ahora trata los guiones bajos como límites de token, de modo que las memorias guardadas en snake_case como mcp_wiring_test coincidan con consultas en lenguaje natural como "mcp wiring" (#87, gracias @hp083625). El servidor MCP tiene una prueba de humo de subproceso que cubre initialize → tools/listtools/call para proteger la ruta de bloqueo en la primera llamada (#86), mientras que se aplicó endurecimiento de bajo riesgo para pruebas sensibles a rutas en Windows, manejo de excepciones best-effort de la API, validación de raíz permitida de run_dir en el backtest, y metadatos de proveedor/modelo de SwarmRun (#88, #90, #91, #92, gracias @Teerapat-Vatpitak).

  • 2026-05-09 🛡️ Endurecimiento de rutas de la API + estabilidad del servidor MCP: las rutas de ejecución/sesión de la API ahora validan los IDs de ruta antes de la búsqueda, rechazando parámetros malformados que contienen saltos de línea y fijando el comportamiento en la suite de regresión de autenticación/seguridad (#80, gracias @SJoon99). El servidor MCP ahora precalienta el registro de herramientas en el hilo principal antes de servir tools/call, evitando un bloqueo en la primera llamada en el descubrimiento perezoso de herramientas (#85, gracias @Teerapat-Vatpitak). El proxy de desarrollo de Vite también respeta VITE_API_URL para destinos de backend no predeterminados (#82, gracias @voidborne-d).

  • 2026-05-08 🧾 Campos de estados financieros de Tushare en filtros: los backtests diarios de A-share ahora pueden solicitar campos de estados financieros seguros en el tiempo (PIT) mediante fundamental_fields, de modo que los motores de señales puedan filtrar por income_total_revenue, income_n_income, balancesheet_total_hldr_eqy_exc_min_int, fina_indicator_roe y columnas similares con prefijo de tabla después de sus fechas de anuncio/divulgación (#76, gracias @mrbob-git). Un endurecimiento posterior hace que las solicitudes explícitas de campos de estados financieros fallen rápido si el enriquecimiento de Tushare no puede ejecutarse, en lugar de recurrir silenciosamente a las barras de precio sin procesar (#77).

  • 2026-05-07 📈 Fundamentales de Tushare + triaje comunitario: se agregó un contrato TushareFundamentalProvider seguro en el tiempo (point-in-time) para flujos de trabajo de investigación fundamental, con cobertura de regresión para la ruta de variable de entorno TUSHARE_TOKEN del proyecto (#74). El triaje comunitario también clarificó que Vibe-Trading mantiene la iteración rápida enfocada en un solo idioma de UI por ahora, evita agregar dependencias de búsqueda redundantes mientras web_search respaldado por DuckDuckGo ya está incluido, y trata los despliegues alojados no oficiales como lugares no confiables para claves de API o tokens de fuente de datos.

  • 2026-05-06 🚀 Se publica v0.1.7 (Notas de la versión, pip install -U vibe-trading-ai): el endurecimiento del límite de seguridad ya está publicado en PyPI y ClawHub, cubriendo valores por defecto más seguros de API/lectura/subida/archivo/URL/código generado/herramienta de shell/Docker mientras se mantiene la baja friccion de los flujos de trabajo de CLI/Web UI en localhost. Este ciclo también incluye Settings de la Web UI, mapa de calor de correlación, OAuth de OpenAI Codex, filtrado de pre-ST de A-share, UX de CLI interactiva, inspección de presets de swarm, análisis de dividendos, refinamiento del flujo de desarrollo y pisos de dependencias de compilación del frontend auditados. Gracias a los colaboradores de 0.1.7 y a lemi9090 (S2W) por la validación de seguridad coordinada.

  • 2026-05-05 🛡️ Seguimiento del límite de seguridad: completa el endurecimiento restante del límite de seguridad en torno a orígenes CORS explícitos, indicadores de credenciales de Settings, lectura de URL web, y generación de código de la cuenta espejo, con pruebas de regresión agregadas para cada ruta. Los flujos de trabajo normales de CLI/Web UI en localhost permanecen igual; los despliegues remotos deberían seguir usando API_AUTH_KEY y orígenes de confianza explícitos.

  • 2026-05-04 🖥️ UX de CLI interactiva + limpieza de CI: el modo interactivo ahora tiene una barra de estado inferior en vivo que muestra proveedor/modelo, duración de sesión, latencia de la última ejecución y estadísticas acumuladas de llamadas a herramientas, además de navegación por el historial de prompts y edición con el cursor mediante las flechas del teclado a través de prompt_toolkit (#69). La CLI sigue recurriendo a los prompts de Rich cuando prompt_toolkit o una TTY no están disponibles. Las expectativas de rutas de la CI también se alinearon con el sandbox reforzado de importación de archivos y la resolución multiplataforma de /tmp, devolviendo main a verde (bb67dc7).

  • 2026-05-03 🛡️ Parche de endurecimiento de seguridad: refuerza la autenticación de API por defecto para despliegues no locales, protege las lecturas sensibles de ejecución/sesión/swarm, restringe los límites de subida y lectura de archivos locales, condiciona las herramientas con capacidad de shell por punto de entrada, valida la carga de estrategias generadas antes de la importación, y ejecuta la imagen de Docker como usuario no root con un puerto publicado solo en localhost por defecto. Los flujos de trabajo de CLI local y Web UI en localhost siguen teniendo baja fricción; los despliegues remotos de API/Web deberían configurar API_AUTH_KEY.

  • 2026-05-02 🧭 Análisis de dividendos + hoja de ruta más definida: se agregó la skill dividend-analysis para acciones de ingreso, sostenibilidad de pagos, crecimiento de dividendos, rendimiento para el accionista y comprobaciones de trampas de rendimiento, fijada mediante pruebas de regresión de skills incluidas. La hoja de ruta pública ahora se enfoca en el trabajo próximo: Research Autopilot, Data Bridge, Options Lab, Portfolio Studio, Alpha Zoo, Research Delivery, Trust Layer y compartición con la comunidad.

  • 2026-05-01 🔥 Mapa de calor de correlación + OAuth de OpenAI Codex + filtro de pre-ST de A-share: el nuevo panel/API de correlación calcula correlaciones de retorno rolling y renderiza un mapa de calor ECharts para análisis de portafolio y símbolos (#64). El soporte del proveedor OpenAI Codex ahora usa OAuth de ChatGPT mediante vibe-trading provider login openai-codex, con metadatos de Settings y pruebas de regresión del adaptador (#65). Se agregó y reforzó la skill ashare-pre-st-filter para el cribado de riesgo ST/*ST de A-share, incluyendo filtrado de relevancia de sanciones de Sina para que las menciones de cuentas de valores no inflen los recuentos E2 (#63).

  • 2026-04-30 ⚙️ Settings de la Web UI + endurecimiento de la CLI de validación: nueva página de Settings para proveedor/modelo de LLM, URL base, esfuerzo de razonamiento y credenciales de fuente de datos, respaldada por APIs de configuración locales/protegidas por autenticación y metadatos de proveedor basados en datos (#57). También refuerza python -m backtest.validation <run_dir> para que entradas faltantes, en blanco, malformadas, inexistentes y que no sean directorios fallen con mensajes claros orientados al operador antes de que comience la validación (#60).

  • 2026-04-28 🚀 Se publica v0.1.6 (pip install -U vibe-trading-ai): corrige que vibe-trading --swarm-presets devolviera vacío después de pip install / uv tool install (#55) — los YAML de presets ahora están incluidos dentro del paquete src.swarm y fijados mediante una suite de regresión de 6 pruebas. Además, el cargador de AKShare ahora enruta correctamente ETFs (510300.SH) y forex (USDCNH) a los endpoints correctos con respaldo de registro reforzado. Recoge todo lo publicado desde v0.1.5: panel de comparación de benchmark, streaming de /upload + límites de tamaño, cargador Futu (HK + A-share), skill de exportación a vnpy, endurecimiento de seguridad, carga diferida del frontend (688KB → 262KB).

  • 2026-04-27 📊 Panel de benchmark + seguridad de subida: la salida del backtest ahora incluye un panel de comparación de benchmark (ticker / retorno del benchmark / retorno excedente / ratio de información) con resolución respaldada por yfinance para SPY, CSI 300, etc. (#48). Además, /upload transmite el cuerpo de la solicitud en fragmentos de 1 MB y aborta al superar MAX_UPLOAD_SIZE, acotando la memoria ante clientes sobredimensionados/malformados (#53) — fijado por una suite de regresión de 4 casos.

  • 2026-04-22 🛡️ Endurecimiento + nuevas integraciones: se aplicó contención de rutas en safe_path + sandbox de la herramienta de journal/shadow, MANIFEST.in incluye .env.example / pruebas / archivos de Docker en el sdist, la carga diferida a nivel de ruta reduce el paquete inicial del frontend de 688KB a 262KB. Además, cargador de datos Futu para acciones de HK y A-share (#47) y skill de exportación de CtaTemplate de vnpy (#46).

  • 2026-04-21 🛡️ Espacio de trabajo + documentación: run_dir relativo normalizado al directorio de ejecución activo (#43). Ejemplos de uso en el README (#45).

  • 2026-04-20 🔌 Razonamiento + Swarm: reasoning_content se preserva en todas las rutas de ChatOpenAI — Kimi / DeepSeek / Qwen funcionan de extremo a extremo con pensamiento (#39). Streaming de swarm + Ctrl+C limpio (#42).

  • 2026-04-19 📦 v0.1.5: publicado en PyPI y ClawHub. Actualización del piso de la CVE de python-multipart, 5 nuevas herramientas MCP conectadas (analyze_trade_journal + 4 herramientas de cuenta espejo), corrección del registro pattern_recognitionpattern, paridad de dependencias de Docker, manifiesto SKILL sincronizado (22 herramientas MCP / 71 skills).

  • 2026-04-18 👥 Cuenta espejo: extrae las reglas de tu estrategia desde un journal de broker → haz backtest de la cuenta espejo en distintos mercados → informe HTML/PDF de 8 secciones que muestra exactamente cuánto dejas sobre la mesa (violaciones de reglas, salidas anticipadas, señales perdidas, operaciones contrafactuales). 4 nuevas herramientas, 1 skill, 32 herramientas en total. Las muestras de Trade Journal + Shadow Account ya están en la pantalla de bienvenida de la web UI.

  • 2026-04-17 📊 Analizador de journal de trading + lector universal de archivos: sube exportaciones de broker (同花顺/东财/富途/CSV genérico) → perfil de trading automático (días de tenencia, tasa de aciertos, ratio de PnL, drawdown) + 4 diagnósticos de sesgo (efecto de disposición, sobreoperación, persecución del momentum, anclaje). read_document ahora despacha PDF, Word, Excel, PowerPoint, imágenes (OCR) y más de 40 formatos de texto detrás de una sola llamada unificada.

  • 2026-04-16 🧠 Arnés del agente: memoria persistente entre sesiones, búsqueda de sesiones con FTS5, skills autoevolutivas (CRUD completo), compresión de contexto en 5 capas, agrupamiento de herramientas de lectura/escritura. 27 herramientas, 107 pruebas nuevas.

  • 2026-04-15 🤖 Z.ai + MiniMax: proveedor Z.ai (#35), corrección de temperatura de MiniMax + actualización de modelo (#33). 13 proveedores.

  • 2026-04-14 🔧 Estabilidad de MCP: se corrigió el error Connection closed de la herramienta de backtest en el transporte stdio (#32).

  • 2026-04-13 🌐 Backtest compuesto entre mercados: el nuevo CompositeEngine hace backtest de portafolios de mercados mixtos (p. ej., A-shares + cripto) con un pool de capital compartido y reglas por mercado. También se corrigió el respaldo de variables de plantilla de swarm y un timeout del frontend.

  • 2026-04-12 🌍 Exportación multiplataforma: /pine exporta estrategias a TradingView (Pine Script v6), TDX (通达信/同花顺/东方财富) y MetaTrader 5 (MQL5) en un solo comando.

  • 2026-04-11 🛡️ Fiabilidad y DX: arranque de .env con vibe-trading init (#19), comprobaciones previas, respaldo de fuente de datos en runtime, motor de backtest reforzado. README multilenguaje (#21).

  • 2026-04-10 📦 v0.1.4: corrección de Docker (#8), herramienta MCP web_search, 12 proveedores de LLM, dependencias akshare/ccxt. Publicado en PyPI y ClawHub.

  • 2026-04-09 📊 Backtest oleada 2: motores ChinaFutures, GlobalFutures, Forex, Options v2. Monte Carlo, IC Bootstrap, validación Walk-Forward.

  • 2026-04-08 🔧 Backtest multi-mercado con reglas por mercado, exportación a Pine Script v6, 5 fuentes de datos con respaldo automático.


✨ Key Features

Self-improving trading agent

🔍 Agente de Trading Autoperfeccionable

• Investigación de mercado en lenguaje natural
• Borradores de estrategias y análisis de archivos/web
• Flujos de trabajo respaldados por memoria
Multi-agent trading teams

🐝 Equipos de Trading Multiagente

• Equipos de inversión, cuantitativo, cripto y riesgo
• Progreso en streaming e informes persistidos
• Workers fundamentados con datos de mercado obtenidos en tiempo real
Cross-market data and backtesting

📊 Datos Multimercado y Backtesting

• Acciones de A / HK / EE. UU. / Canadá / India / Corea, cripto, futuros y forex
• Fallback de datos y backtests compuestos
• Datos PIT, validación y run cards
Shadow Account

👥 Shadow Account

• Diagnóstico de comportamiento a partir del diario del broker
• Comparaciones de Shadow Account basadas en reglas
• Informes de auditoría exportables y código de estrategia

💡 What Is Vibe-Trading?

Vibe-Trading es un espacio de trabajo de investigación de código abierto para convertir preguntas financieras en análisis ejecutables. Conecta prompts en lenguaje natural con cargadores de datos de mercado, generación de estrategias, motores de backtest, informes, exportaciones y memoria de investigación persistente.

Está diseñado para investigación, simulación y backtesting, y, cuando tú lo decidas, para trading autónomo a través de un broker que autorices tú mismo (por ejemplo, Robinhood Agentic Trading). No retiene fondos y nunca opera fuera de los límites que establezcas, y puedes detenerlo al instante.


✨ What You Can Do

Tarea Resultado
Hacer una pregunta de trading Investigación de mercado con herramientas, datos, documentos y contexto de sesión reutilizable.
Backtestear una idea de estrategia Código de estrategia, métricas, contexto de benchmark, artefactos de validación y run cards.
Revisar tus propias operaciones Análisis del diario del broker, diagnóstico de comportamiento, extracción de reglas y comparaciones de Shadow Account.
Leer documentos y gráficos Analiza PDF / DOCX / XLSX / PPTX / imágenes con OCR conectable (read_document), y lee capturas de gráficos de forma semántica con un modelo de visión (analyze_image). El chat web acepta hasta cinco archivos a la vez mediante el selector, arrastrar y soltar o pegar desde el portapapeles.
Leer informes institucionales y libros de fondos Libros de gestores SEC 13F con diferencias de posiciones trimestre a trimestre, componentes de ETF en distintos mercados, probabilidad implícita de contratos de eventos y extracción de factores de arXiv / OpenAlex, todo de solo lectura, sobre fuentes públicas gratuitas.
Mejorar la investigación repetida La memoria persistente y las skills editables convierten rutinas útiles en flujos de trabajo reutilizables.
Ejecutar equipos de analistas Revisiones de investigación multiagente para flujos de trabajo de inversión, cuantitativo, cripto, macro y riesgo.
Llevar la investigación a canales de mensajería Ejecuta el mismo runtime de sesión a través de WebSocket, Telegram, Slack, Discord, Matrix, WhatsApp, Signal, QQ/NapCat, WeChat/WeCom, Feishu/Lark, DingTalk, Teams, correo electrónico y Mochat, con controles de CLI, REST y Web UI.
Entregar artefactos utilizables Informes, TradingView Pine Script, TDX, MetaTrader 5, herramientas MCP y sesiones de investigación posteriores.
Evaluar un zoológico de alfas preconstruido Clasificación IC + viva/invertida/muerta en una línea, en 462 alfas (Qlib 158 + Kakushadze 101 + GTJA 191 + académicas + fundamentales PIT-safe) sobre tu universo.
Detectar regímenes de correlación Una línea de tiempo de densidad de aristas + histéresis en la superficie /correlation que muestra cuándo los mercados se fusionan en un solo bloque: contexto de riesgo descriptivo, no una señal.

⚡ Quick Example

pip install vibe-trading-ai

# Natural-language research
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024, summarize return and drawdown, then export the report"

# Bench a pre-built alpha zoo (one line)
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

👥 Shadow Account

Shadow Account parte de tus propios registros de trading en lugar de una plantilla de estrategia genérica.

Sube una exportación del broker, deja que el agente resuma tu comportamiento y luego compara tu trayectoria real de trading con una estrategia espejo basada en reglas.

Paso Resultado del agente
1. Lee tu diario Analiza exportaciones de broker de 同花顺, 东方财富, 富途 y formatos CSV genéricos.
2. Perfila tu comportamiento Días de tenencia, tasa de aciertos, ratio de PnL, drawdown, efecto disposición, sobreoperación, persecución de momentum y verificaciones de anclaje.
3. Extrae tus reglas Convierte entradas/salidas recurrentes en un perfil de estrategia explícito en lugar de un resumen vago.
4. Ejecuta la cuenta espejo Backtestea las reglas extraídas y resalta incumplimientos de reglas, salidas anticipadas, señales perdidas y trayectorias de operación alternativas.
5. Entrega el informe Genera un informe HTML/PDF que puede inspeccionarse, archivarse o refinarse en una sesión posterior.
vibe-trading --upload trades_export.csv
vibe-trading run -p "Analyze my trading behavior, extract my shadow strategy, and compare it with my actual trades"

💼 Cartera Local Multi-Broker

La Web UI añade una página Cartera de solo lectura que agrega las posiciones de las conexiones de broker que elijas. Las fuentes son instancias de conexión de perfiles de solo lectura que declaran account.read y positions.read — configúralas en Conectores de Broker dentro de Detailed Capabilities. El perfil MCP oficial de IBKR aún no puede usarse como fuente.

Comportamiento Qué obtienes
Procedencia por fuente Cada posición indica de qué conexión proviene, valorada en USD con conversión a CNY.
Fuentes fallidas excluidas Una fuente que falla se reporta como error y queda fuera de los totales — nunca se arrastra el valor anterior — y la instantánea se marca como incompleta.
Instantáneas inmutables Cada actualización se guarda en ~/.vibe-trading/portfolio/portfolio.sqlite3; los ajustes sin credenciales viven en ~/.vibe-trading/portfolio.json y connections.json.
Exportación y análisis Exportación CSV, más una herramienta de agente portfolio_summary saneada cuyos risk_xray_args se pasan directamente a portfolio_risk_xray. La misma instantánea se imprime en la terminal con vibe-trading portfolio show (también refresh / sources).

Los conectores de solo lectura que instales tú permanecen fuera del checkout, en ~/.vibe-trading/connectors/<name>/: un manifiesto connector.json más un adapter.py que implemente check_status / get_account_snapshot / get_positions. Un manifiesto que declare cualquier capacidad de escritura es rechazado.

vibe-trading connector init my-broker --destination /tmp
vibe-trading connector validate /tmp/my-broker
vibe-trading connector install /tmp/my-broker

Sus credenciales van al llavero del sistema operativo (macOS Keychain, Windows Credential Manager, Linux Secret Service) con pip install "vibe-trading-ai[keyring]", nunca a los archivos de configuración. Nada en esta ruta puede enviar ni cancelar una orden.


🧪 Research Workflow

La mayoría de las ejecuciones siguen la misma ruta de evidencia: enrutar la solicitud, cargar el contexto de mercado correcto, ejecutar herramientas, validar resultados y mantener los artefactos inspeccionables.

Capa Qué sucede
Plan Selecciona las skills financieras, herramientas, fuentes de datos y el preset de swarm relevantes cuando resulta útil.
Ground Extrae acciones A, acciones de HK/EE. UU./Canadá, cripto, futuros, forex, documentos o contexto web a través de los cargadores disponibles.
Execute Genera código de estrategia comprobable, ejecuta herramientas y utiliza el motor de backtest o el flujo de análisis correspondiente.
Validate Añade métricas, comparación con benchmark, Monte Carlo, Bootstrap, Walk-Forward, run cards y advertencias cuando corresponde.
Deliver Devuelve informes, artefactos, trazas de herramientas y exportaciones para TradingView, TDX, MetaTrader 5, clientes MCP o sesiones posteriores.

📡 Fuentes de Datos y Fallback Inteligente

Una sola llamada get_market_data, 23 fuentes de datos de mercado gratuitas (además del mercado premium opcional QVeris). Establece source: "auto": el cargador elige según el símbolo y luego recorre una cadena por mercado ordenada por riesgo de bloqueo de IP: primero las fuentes públicas que nunca se bloquean, al final las limitadas o que requieren clave. Cero configuración, sin punto único de fallo.

Fuente Mercados Autenticación Rol
tencent · mootdx A-share + HK ninguna nunca bloqueada por IP (mootdx = 通达信 TCP)
eastmoney A / EE. UU. / HK ninguna OHLCV + herramientas de fundamentales y flujo profundas (limitada)
baostock · akshare A (+ EE. UU./HK/futuros/macro/fx) ninguna fallbacks gratuitos
tushare A / HK / futuros / fondos / macro token la más completa para A-share
yahoo EE. UU. / HK / Canadá ninguna gráfico/cotizaciones/opciones directos; TSX .TO / TSXV .V
sina · stooq EE. UU. ninguna velas hasta 1984 · CSV EOD
yfinance EE. UU. / HK / Canadá ninguna wrapper; TSX .TO / TSXV .V pasan a través
longbridge EE. UU. / HK App Key + App Secret + Access Token fuente OHLCV histórica opcional; instala el SDK opcional
finnhub · alphavantage · tiingo · fmp EE. UU. clave proveedores opcionales
qveris multiactivo global clave · créditos mercado premium — 63+ proveedores mediante una sola clave (solo explícito, nunca en el fallback automático)
okx · ccxt · binance cripto ninguna OKX + 100+ exchanges + históricos de Binance / perpetuos USD-M
futu HK / A OpenD FutuOpenD local opcional
mt5 forex / metales terminal MT5 barras de forex/metales de MetaTrader 5 (estilo Exness), 1m–1D
pykrx Corea (KRX: KOSPI/KOSDAQ) ninguna barras diarias de KOSPI / KOSDAQ para .KS / .KQ (extra opcional krx)
india_broker India (NSE/BSE) login de broker barras de solo lectura de Shoonya / Dhan para .NS / .BO (al final de la cadena de fallback)
local cualquiera ninguna tu propio CSV / Parquet / DuckDB mediante el prefijo local:

Cadenas de fallback (por riesgo de bloqueo de IP):

  • A-sharetencent · mootdx · eastmoney · baostock · akshare · tushare · local
  • EE. UU.yahoo · stooq · sina · eastmoney · yfinance · tiingo · fmp · finnhub · alphavantage · longbridge · akshare · local
  • HKtencent · eastmoney · yahoo · futu · akshare · yfinance · tushare · longbridge · local
  • India (NSE/BSE)yahoo · yfinance · india_broker · local
  • Corea (KOSPI/KOSDAQ)pykrx · yahoo · yfinance · local
  • Criptookx · ccxt · binance · yfinance · local
  • Forex / metalesmt5 · yfinance · akshare · local  ·  (futuros / fondos / macro → tushare/aksharelocal)

Uso explícito de Longbridge

Longbridge es un cargador histórico OHLCV opcional para EE. UU./HK. Instala su SDK con:

pip install "vibe-trading-ai[longbridge]"

Configura las tres credenciales en .env:

LONGBRIDGE_APP_KEY=...
LONGBRIDGE_APP_SECRET=...
LONGBRIDGE_ACCESS_TOKEN=...

Para un backtest, establece source en config.json:

{
  "codes": ["QQQ.US"],
  "start_date": "2025-01-01",
  "end_date": "2025-01-10",
  "interval": "1D",
  "source": "longbridge"
}

En una conversación con el Agent, pide explícitamente: "Use Longbridge to fetch QQQ.US historical data." La solicitud explícita de fuente es independiente de source: "auto"; auto mantiene la cadena de fallback normal por mercado.

Más allá del OHLCV, 22 herramientas de datos de solo lectura alcanzan fundamentales y flujo: flujo de fondos, dragon-tiger, northbound, margen, operaciones en bloque, número de accionistas, lockup, sector, informes de investigación, noticias, presentaciones ante la SEC, estados financieros, cadenas de opciones, perfil de la acción, screening de mercado, búsqueda de símbolos, macro, iwencai, tenencias institucionales (13F), look-through de ETF, mercados de predicción y papers de investigación, todo expuesto a través de MCP. Un símbolo local: explícito nunca recurre en silencio a una fuente de red.

💎 Datos premium opcionales — QVeris

QVeris

Datos: enrutamiento gratuito o premium, tú decides. Lo gratuito sigue siendo el valor por defecto: 23 fuentes integradas con fallback por riesgo de bloqueo, sin clave, sin costo. Lo premium mediante QVeris añade más de 10.000 capacidades (según QVeris) en 63+ proveedores para Greeks de opciones, fundamentales premium, datos de China/HK/globales, macro, cripto, noticias y presentaciones regulatorias; las llamadas fallidas no se cobran. Actívalo en Settings -> QVeris o con vibe-trading data mode paid.

Aviso de QVeris: registrarte a través del enlace de referido de Vibe-Trading te da +1.000 créditos de bonificación y apoya el proyecto.


🔩 Detailed Capabilities

Los inventarios detallados se pliegan a continuación para mantener el README principal fácil de escanear. Ábrelos cuando quieras inspeccionar los bloques de construcción disponibles.

Biblioteca de Skills Financieras 90 skills en 9 categorías
  • 📊 90 skills financieras especializadas organizadas en 9 categorías
  • 🌐 Cobertura completa desde mercados tradicionales hasta cripto y DeFi
  • 🔬 Capacidades integrales que abarcan desde el sourcing de datos hasta la investigación cuantitativa
Categoría Skills Ejemplos
Fuente de Datos 10 data-routing, tushare, yfinance, okx-market, akshare, mootdx, ccxt, eastmoney, sec-edgar, qveris
Estrategia 19 strategy-generate, cross-market-strategy, technical-basic, candlestick, ichimoku, elliott-wave, smc, multi-factor, ml-strategy
Análisis 23 factor-research, correlation-regime, macro-analysis, global-macro, valuation-model, investor-lenses, credit-analysis, dividend-analysis
Clase de Activo 9 options-strategy, options-advanced, convertible-bond, etf-analysis, asset-allocation, sector-rotation
Cripto 7 perp-funding-basis, liquidation-heatmap, stablecoin-flow, defi-yield, onchain-analysis
Flujo 8 hk-connect-flow, us-etf-flow, edgar-sec-filings, financial-statement, adr-hshare
Herramienta 10 backtest-diagnose, report-generate, pine-script, doc-reader, web-reader, vnpy-export, trade-journal
Investigación 2 alpha-zoo, strategy-dev-manager
Análisis de Riesgo 1 ashare-pre-st-filter
Fuente de Datos Personalizada registra tu propio loader histórico de OHLCV

¿Necesitas un mercado o proveedor para el que no incluimos un loader? Añade tu propio loader de barras históricas y selecciónalo con source="<name>". Los pasos modifican el código fuente del paquete, así que ejecútalos desde un clon (pip install -e .).

  1. Escribe el loader — crea agent/backtest/loaders/<name>_loader.py con una clase que satisfaga DataLoaderProtocol (duck-typed, sin necesidad de clase base) y esté etiquetada con @register:

    import pandas as pd
    from backtest.loaders.registry import register
    
    @register
    class DataLoader:
        name = "mysource"            # the value you pass as source=
        markets = {"us_equity"}      # a_share/us_equity/hk_equity/crypto/futures/fund/macro/forex
        requires_auth = False
    
        def is_available(self) -> bool:
            return True              # token present? network reachable?
    
        def fetch(self, codes, start_date, end_date, *, interval="1D", fields=None):
            # return {symbol: DataFrame indexed by trade_date,
            #         columns: open, high, low, close, volume}
            ...
  2. Registra el módulo para que @register se active — añade "backtest.loaders.<name>_loader" a _loader_modules en agent/backtest/loaders/registry.py.

  3. Habilita el nombre en la validación de configuración — añade "mysource" a _VALID_SOURCES en agent/backtest/runner.py.

  4. (Opcional) insértalo en el FALLBACK_CHAINS de un mercado en registry.py para que source="auto" pueda alcanzarlo.

  5. Úsalosource="mysource" en una configuración de backtest, o vía la CLI / el agente.

Los ticks en tiempo real / la profundidad del libro de órdenes quedan fuera del alcance de los loaders — la capa de loaders es solo barras históricas point-in-time. Los datos de mercado en vivo fluyen a través de los conectores de broker en su lugar: okx / binance / ccxt para cripto, futu / tiger para acciones.

Conectores de Broker 13 brokers — lectura + paper, live acotado donde esté soportado

Perfiles centrados en el conector. La mayoría hace lectura + colocación de órdenes en cuenta paper — IBKR es de solo lectura, Robinhood es solo live (sin cuenta paper), y Trading 212 rechaza la colocación de órdenes por completo, incluido el paper; la colocación de órdenes live está acotada por un mandato definido por el usuario (lista blanca de símbolos, límites de tamaño de orden / exposición, límite diario de operaciones, interruptor de apagado instantáneo) y nunca retiene fondos — el broker ejecuta. Las herramientas de colocación de órdenes se mantienen fuera de MCP (solo agente + CLI). Las rutas de investigación / backtest están estructuralmente vetadas de cualquier endpoint live.

Broker Mercados Capacidades
IBKR global TWS / Gateway local, solo lectura
Robinhood EE. UU. MCP agéntico (OAuth de escritorio) — lectura + live acotado
Tiger EE. UU. / HK / A lectura + paper + live acotado
Alpaca EE. UU. lectura + paper + live acotado (+ modo TAP de aislamiento de credenciales)
OKX · Binance cripto lectura + paper + live acotado
Futu HK / EE. UU. / A lectura + paper + live acotado
eToro global lectura + paper + live acotado (API pública; las claves demo solo alcanzan rutas /demo, además de flujos de copy-trading)
MetaTrader 5 forex / CFD lectura + paper + live acotado (estilo Exness; guardia de identidad demo ⇔ paper)
Longbridge · Dhan · Shoonya EE. UU. / HK · India (NSE/BSE) solo lectura + paper — sin discriminador de runtime paper/live, por lo que la colocación de órdenes live se rechaza de forma estricta
Trading 212 Reino Unido / UE completamente de solo lectura — place_order / cancel_order se rechazan de forma estricta incluso en paper

Paper-vs-live es una guardia de runtime estructural por broker (formato de id de cuenta, separación de host, flag demo, o entorno de trading), nunca un flag de configuración que el agente pueda cambiar. Un broker que no exponga tal discriminador queda limitado a paper + solo lectura.

Equipos de Trading Preconfigurados 30 presets de swarm
  • 🏢 30 equipos de agentes listos para usar
  • ⚡ Flujos de trabajo financieros preconfigurados
  • 🎯 Presets de inversión, trading y gestión de riesgo
Preset Flujo de trabajo
investment_committee Debate alcista/bajista → revisión de riesgo → decisión final del PM
global_equities_desk Investigador de A-share + HK/US + cripto → estratega global
crypto_trading_desk Funding/basis + liquidaciones + flujo → gestor de riesgo
earnings_research_desk Fundamental + revisión + opciones → estratega de resultados
macro_rates_fx_desk Tasas + FX + materias primas → PM macro
quant_strategy_desk Screening + investigación de factores → backtest → auditoría de riesgo
technical_analysis_panel TA clásico + Ichimoku + armónicos + Elliott + SMC → consenso
risk_committee Drawdown + riesgo de cola + revisión de régimen → aprobación final
global_allocation_committee A-shares + cripto + HK/US → asignación cross-market

Además de más de 20 presets especializados adicionales — ejecuta vibe-trading --swarm-presets para explorarlos todos. Trae los tuyos: coloca los YAML de preset en ~/.vibe-trading/swarm/presets/ — se listan junto al catálogo incluido (los archivos con el mismo nombre lo sobrescriben, igual que los skills de usuario) y sobreviven a las actualizaciones.

Alpha Zoo 462 alphas cuantitativos preconstruidos en 5 familias
  • 🧬 462 alphas cross-sectional, con prohibición de lookahead a nivel de la capa de operadores
  • 📈 Categorización de IC + IR + vivo/invertido/muerto en un solo comando de la CLI
  • 🔬 Puerta de pureza AST + test centinela de lookahead de 300 filas + interruptor de apagado de red pytest-socket
  • 📦 Atribución Apache-2 para Qlib; LICENSE.md por zoo que declara las fórmulas como contenido matemático
  • 🤝 Flujo de firma Developer Certificate of Origin (DCO) para PRs de la comunidad
Zoo Cantidad Fuente Licencia
qlib158 154 Microsoft Qlib Alpha158 (Apache-2.0, fijado a un commit) Apache-2.0
alpha101 101 Kakushadze (2015), "101 Formulaic Alphas", arXiv:1601.00991 Las fórmulas son contenido matemático
gtja191 191 Guotai Junan (2014), "191 Short-period Trading Alpha Factors" Las fórmulas son contenido matemático
academic 12 Fama-French 5 + momentum de Carhart + reversión de Jegadeesh + máximo de 52 semanas de George-Hwang + iliquidez de Amihud + skew de Harvey-Siddique + betting-against-beta de Frazzini-Pedersen + estabilidad por recableado de correlación (proxies basados en precio) Literatura académica pública
fundamental 4 Datos de company facts de la SEC seguros PIT — earnings yield, ROE, rentabilidad bruta, crecimiento de activos (anclados a la fecha de presentación) Datos financieros públicos

Ejecuta vibe-trading alpha list para explorar, vibe-trading alpha show <id> para ver fórmulas + fuente, vibe-trading alpha bench --zoo X --universe Y --period Z para puntuar un zoo completo, y vibe-trading alpha compare --all para clasificar zoos entre sí.

Motores de Backtest 10 motores + cartera de opciones, composite cross-market
Motor Mercado Notas
ChinaA A-share T+1, límites de precio, filtro pre-ST
GlobalEquity EE. UU. / HK / Canadá trading en la misma sesión; lotes, ticks y costos específicos de cada mercado
IndiaEquity India (NSE/BSE) T+1, bandas de circuito, pila de costos STT / stamp / SEBI / GST basada en configuración
KoreaEquity Corea (KRX: KOSPI/KOSDAQ) solo largo, banda de ±30% evaluada en el momento de ejecución sobre la malla de ticks unificada, impuesto de transacción del 0.20% en 2026
Crypto spot cripto / perps USD-M liquidaciones de funding, división ejecución/mark
ChinaFutures · GlobalFutures futuros margen, multiplicadores de contrato
Forex FX / metales vía el loader mt5
Composite cross-market un único pool de capital compartido entre mercados (source="auto")
options_portfolio opciones multi-leg, greeks, payoff/escenario

Barras intradía: 1m / 5m / 15m / 30m / 1H / 4H / 1D. 15 métricas + comparación con benchmark, 5 optimizadores de cartera (volatilidad-igual / risk-parity / media-varianza / máxima diversificación / con conciencia de turnover), y 3 herramientas de validación (Monte Carlo / Bootstrap / Walk-Forward).

Quant Library 286 funciones probadas en 19 módulos, invocables desde cualquier transporte

src/quantlib contiene una implementación probada de cada pieza de matemática financiera que el agente necesita. Las skills importan estas funciones en lugar de llevar fórmulas dentro de bloques de código markdown — si encuentras una fórmula de pricing viviendo en un SKILL.md, eso es un bug, no un patrón.

Módulo Qué cubre
options Precio Black-Scholes + greeks, inversión de volatilidad implícita
fixedincome Matemática de bonos, ajuste de curva Nelson-Siegel / Svensson
credit Z-score de Altman, distancia al default Merton / KMV
timeseries Estacionariedad, cointegración, GARCH, bootstrap
risk · var_backtest VaR / CVaR / EVT y sus backtests
attribution Descomposición de Brinson-Fachler
performance · fundmath TWR / MWR / Dietz modificado; XIRR / MOIC / DPI / TVPI
factormodel · eventstudy Regresiones de factores, estudios de eventos
multipletesting · crossvalidation Significancia deflacionada, CV purgada
impact Modelos de impacto de mercado

La herramienta de solo lectura quantlib_call da acceso a todo esto mediante un único contrato, de modo que la matemática financiera funciona en la CLI, la Web UI, la API REST y MCP — incluidos despliegues donde bash está bloqueado. Es estructuralmente no un shell — allowlist de módulos, despacho solo mediante __all__, export_* rechazado. La econometría necesita el extra stats (pip install "vibe-trading-ai[stats]"); esas funciones hacen lazy-import y te indican cuál falta.

Valoración e Investigación Institucional DCF, comparables, three-statement, y seis comandos de investigación

Un motor de valoración que se niega a inventar sus propios inputs. La única regla en contracts.py: un input faltante hace que un modelo sea NOT RUNNABLE y nunca se le asigna un valor por defecto de forma silenciosa — cada valor por defecto en un modelo de valoración es una opinión disfrazada de constante.

Modelo Comportamiento que vale la pena conocer
run_dcf Puente FCFF, construcción de WACC, descuento a mitad de año, puente de deuda neta, grilla de sensibilidad WACC×g. Valor terminal dual: cada método se contrasta contra el múltiplo implícito y la g implícita del otro
run_comps Puente de EV, calendarización LTM + año calendario, matriz de múltiplos. Un peer con un denominador no positivo se excluye y se reporta, nunca se promedia como un múltiplo negativo
threestatement Proyección enlazada con una aserción de balance estricta, un plug explícito de revolver, y una circularidad iterada interés↔deuda que debe converger o lanzar un error

Los artefactos están hasheados por input y versionados, con exportación a xlsx / pptx.

Seis slash commands impulsan los flujos de trabajo — /comps /dcf /attrib /memo /earnings /screen — cada uno con un esqueleto de pasos y un ejemplo resuelto aritméticamente consistente (la descomposición de Brinson suma exactamente al retorno activo; el puente de resultados suma exactamente a la variación del EPS). La skill investor-lenses apila marcos de razonamiento de inversores reconocidos por encima como capas de análisis: cada lente es un procedimiento operativo — señales prioritarias, condiciones descalificantes, mal uso típico — no una biografía, y no nombra ninguna herramienta.

Más allá de las barras, src/entities ingiere flujos de caja con fechas irregulares (NAVs, capital calls, cupones) y cashflow_performance reporta XIRR / MOIC / DPI / TVPI / TWR / Dietz modificado / MWR sobre ellos. Esta ruta es deliberadamente paralela a los motores de barras para que una columna nav nunca pueda llegar a uno de ellos y ser valorada como un cierre.

Gobernanza y Registro de Auditoría responder "¿qué metodología produjo ese número?"

Cada ejecución escribe un manifiesto que hashea el prompt, el contenido de la skill, el registro de herramientas y las versiones del paquete, de modo que un número producido el mes pasado pueda rastrearse hasta la metodología exacta que lo produjo.

El ledger de auditoría encadena cada registro al hash de su predecesor y hace fsync, de modo que editar o eliminar un registro es detectable — e incluso una edición que recalcula su propio hash queda igualmente atrapada un registro más adelante vía prev_hash_mismatch. Las marcas de tiempo siempre son proporcionadas por el llamador; ningún módulo aquí llama a datetime.now().

La redacción de trazas es consciente del sink: los argumentos de las llamadas a herramientas y el ledger de auditoría en vivo usan un sink de fallo cerrado donde content permanece redactado, mientras que el sink de resultado de herramienta lo libera y depura por patrones sus hojas de string. env nunca se libera en ninguno de los dos.

🎬 Demo

cli_sm.mp4
frontend_sm.mp4
☝️ Backtest en lenguaje natural y debate de swarm multiagente — Web UI + CLI

🚀 Quick Start

Instalación en una línea (PyPI)

pip install vibe-trading-ai

Luego ejecuta una primera tarea de investigación:

vibe-trading init
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024 and summarize return and drawdown"

¿Actualizando desde una versión anterior? La 0.1.10 pasó a LangChain 1.x. Si las importaciones fallan después de ejecutar pip install -U vibe-trading-ai sobre una instalación anterior a la 0.1.10 (por ejemplo, si langgraph no se puede importar), recrea el venv o ejecuta pip install --force-reinstall vibe-trading-ai. Una instalación nueva no se ve afectada.

Nombre del paquete frente a los comandos: El paquete de PyPI es vibe-trading-ai. Una vez instalado, obtienes tres comandos:

Comando Propósito
vibe-trading CLI / TUI interactivo
vibe-trading serve Inicia el servidor web FastAPI
vibe-trading-mcp Inicia el servidor MCP (para Claude Desktop, OpenClaw, Cursor, etc.)
vibe-trading init              # configuración interactiva de .env
vibe-trading                   # inicia la CLI
vibe-trading serve --port 8899 # inicia la interfaz web
vibe-trading-mcp               # inicia el servidor MCP (stdio)

O elige una ruta

Ruta Ideal para Tiempo
A. Docker Pruébalo ya, sin configuración local 2 min
B. Local install Desarrollo, acceso completo a la CLI 5 min
C. MCP plugin Conéctalo a tu agente existente 3 min
D. ClawHub Un solo comando, sin clonar 1 min

Requisitos previos

  • Una clave de API de LLM de cualquier proveedor compatible, o ejecútalo localmente con Ollama (no necesita clave)
  • Python 3.11+ para el Path B
  • Docker para el Path A
  • OpenAI Codex también se puede usar con ChatGPT OAuth: configura LANGCHAIN_PROVIDER=openai-codex y luego ejecuta vibe-trading provider login openai-codex. Esto no usa OPENAI_API_KEY.

Proveedores de LLM compatibles: OpenRouter, Requesty, OpenAI, Anthropic (API de Messages nativa), DeepSeek, Gemini, Groq, DashScope/Qwen, Zhipu, Moonshot/Kimi, MiniMax, SiliconFlow (CN + Global), Xiaomi MIMO, Novita AI, iFlytek Spark, Z.ai, NVIDIA NIM, ModelScope, GitHub Copilot, Ollama (local). Cuando no se configura ningún *_BASE_URL, cada proveedor recurre a su endpoint canónico, así que basta con una clave. Consulta .env.example para la configuración.

Consejo: Todos los mercados funcionan sin ninguna clave de API gracias al fallback automático. yfinance/Yahoo (HK/US/Canadá), OKX (cripto), mootdx (acciones A, conexión TCP directa, sin limitación de IP) y AKShare (acciones A, EE. UU., HK, futuros, forex) son gratuitos. El token de Tushare es opcional — mootdx es el fallback preferido sin token para acciones A, con AKShare como respaldo más amplio.

Ruta A: Docker (configuración cero)

git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
cp agent/.env.example agent/.env
# Edit agent/.env — uncomment your LLM provider and set API key
docker compose up --build

Abre http://localhost:8899. Backend + frontend en un mismo contenedor.

Note

OAuth de OpenAI Codex con Docker: el inicio de sesión en el navegador necesita una terminal para que puedas pegar la URL de callback. Ejecútalo a través de Compose, que asigna automáticamente una terminal interactiva:

docker compose exec vibe-trading vibe-trading provider login openai-codex

Si usas docker exec directamente, pasa -it antes del nombre del contenedor.

Docker publica el backend en 127.0.0.1:8899 de forma predeterminada y ejecuta la aplicación como un usuario de contenedor no root. Si expones la API intencionalmente más allá de tu propia máquina, configura un API_AUTH_KEY fuerte y envía Authorization: Bearer <key> desde los clientes.

Note

Uso de Ollama con Docker: el contenedor accede a un Ollama alojado en el host mediante host.docker.internal, no localhost (dentro del contenedor, localhost es el propio contenedor). docker-compose.yml establece OLLAMA_BASE_URL en http://host.docker.internal:11434 por defecto; exporta OLLAMA_BASE_URL (o configúralo en un .env de nivel superior) para apuntar a otro lugar. Esto depende del mapeo host-gateway en extra_hosts, que requiere Docker Engine ≥ 20.10 / Compose v2 (disponible automáticamente en Docker Desktop).

Tus datos sobreviven a las actualizaciones: la memoria persistente, el índice de búsqueda entre sesiones, las skills creadas por el usuario, las cuentas shadow, la configuración de conectores de broker, las sesiones web, las ejecuciones de backtest, el historial de swarm y los archivos subidos residen todos en volúmenes de Docker con nombre, así que git pull && docker compose up --build los conserva. Las respuestas web en curso también se guardan como checkpoints, de modo que un reinicio restaura la respuesta parcial y marca el intento como interrumpido en lugar de descartarla en silencio. Los datos solo se eliminan con docker compose down -v.

Ruta B: Instalación local

git clone https://github.com/HKUDS/Vibe-Trading.git
cd Vibe-Trading
python -m venv .venv

# Activate
source .venv/bin/activate          # Linux / macOS
# .venv\Scripts\activate.bat       # Windows CMD
# .venv\Scripts\Activate.ps1       # Windows PowerShell

pip install -e .
cp agent/.env.example agent/.env   # Edit — set your LLM provider API key
vibe-trading                       # Launch interactive TUI

Note

En Windows: cp es un alias de PowerShell para Copy-Item, así que los fragmentos anteriores funcionan tal cual en PowerShell. CMD no tiene cp — usa en su lugar copy agent\.env.example agent\.env (esto también aplica al fragmento de Docker anterior). Si PowerShell se niega a ejecutar Activate.ps1, ejecuta primero Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned; esto se aplica solo a esa sesión de shell.

Iniciar la interfaz web (opcional)
# Terminal 1: API server
vibe-trading serve --port 8899

# Terminal 2: Frontend dev server
cd frontend && npm install && npm run dev  # requiere Node >= 22.22

Abre http://localhost:5899. El frontend envía las llamadas a la API mediante proxy a localhost:8899.

Modo de producción (un solo servidor):

cd frontend && npm run build && cd ..
vibe-trading serve --port 8899     # FastAPI serves dist/ as static files

[!NOTE] vibe-trading serve se vincula a 0.0.0.0 pero, de forma predeterminada, solo confía en loopback: abrir la interfaz en la misma máquina (http://localhost:8899) funciona sin ninguna configuración. Si navegas desde otra máquina, un host de VM o un teléfono en tu LAN, los endpoints sensibles devuelven 403 y el chat muestra "Remote API access requires an API key" — configura un API_AUTH_KEY fuerte en agent/.env, reinicia, e introduce la misma clave una vez en Settings. (Puerta de enlace de host de Docker Desktop: configura VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1 manteniendo el enlace de puerto predeterminado 127.0.0.1.)

Ruta C: Plugin MCP

Consulta la sección MCP Plugin más abajo.

Ruta D: ClawHub (un comando)

npx clawhub@latest install vibe-trading --force

El skill + configuración MCP se descarga en el directorio de skills de tu agente. Consulta ClawHub install para más detalles.


🧠 Environment Variables

Copia agent/.env.example a agent/.env y descomenta el bloque del proveedor que quieras usar. Cada proveedor necesita entre 3 y 4 variables:

Variable Obligatoria Descripción
LANGCHAIN_PROVIDER Nombre del proveedor (openrouter, deepseek, groq, ollama, etc.)
<PROVIDER>_API_KEY Sí* Clave de API (OPENROUTER_API_KEY, DEEPSEEK_API_KEY, etc.)
<PROVIDER>_BASE_URL URL del endpoint de la API
LANGCHAIN_MODEL_NAME Nombre del modelo (p. ej., deepseek-v4-pro)
TUSHARE_TOKEN No Token de Tushare Pro para datos de acciones A (recurre a AKShare como fallback)
TIMEOUT_SECONDS No Tiempo de espera para llamadas al LLM, 120 s por defecto
API_AUTH_KEY Recomendado para despliegues en red Token Bearer requerido cuando la API es accesible desde clientes no locales
VIBE_TRADING_ENABLE_SHELL_TOOLS No Activación explícita de herramientas con capacidad de shell en despliegues tipo API remota/MCP-SSE
VIBE_TRADING_ALLOWED_FILE_ROOTS No Rutas raíz adicionales, separadas por comas, para la importación de documentos y diarios de broker
VIBE_TRADING_ALLOWED_RUN_ROOTS No Rutas raíz adicionales, separadas por comas, para directorios de ejecución de código generado
VIBE_TW_STOCK_DB No Ruta a una instantánea SQLite del mercado taiwanés; la herramienta de solo lectura taiwan_stock_data solo se registra cuando el esquema es válido
VIBE_TRADING_EXTRA_CORS_ORIGINS No Orígenes separados por comas que se añaden a los valores predeterminados de CORS de loopback (CORS_ORIGINS los reemplaza en cambio)
CONTENT_FILTER_WARNING_THRESHOLD No Umbral de proporción de aviso del filtro de contenido (por defecto 0.05 = 5%). Cuando la proporción de respuestas del LLM bloqueadas por moderación de contenido supera este valor, la run card te avisa para que cambies de proveedor.

* Ollama no requiere clave de API. OpenAI Codex usa ChatGPT OAuth y almacena los tokens mediante oauth-cli-kit, no en agent/.env.

Datos gratuitos (sin necesidad de clave): acciones A mediante AKShare, acciones de HK/EE. UU./Canadá mediante Yahoo/yfinance, cripto mediante OKX, más de 100 exchanges de cripto mediante CCXT. El sistema selecciona automáticamente la mejor fuente disponible para cada mercado.

🎯 Recommended Models

Vibe-Trading es un agente que depende intensamente de herramientas: skills, backtests, memoria y swarms fluyen todos a través de llamadas a herramientas. La elección del modelo determina directamente si el agente usa sus herramientas o fabrica respuestas a partir de datos de entrenamiento.

Nivel Ejemplos Cuándo usarlo
Best anthropic/claude-opus-4.7, anthropic/claude-sonnet-4.6, openai/gpt-5.5-pro, google/gemini-3.5-flash Swarms complejos (3+ agentes), sesiones de investigación largas, análisis de calidad de paper
Sweet spot (predeterminado) deepseek-v4-pro, deepseek/deepseek-v4-pro, x-ai/grok-4.20, z-ai/glm-5.1, moonshotai/kimi-k2.6, qwen/qwen3-max-thinking Opción diaria — llamadas a herramientas confiables a ~1/10 del costo
Evitar para uso en agentes *-nano, *-flash-lite, *-coder-next, variantes pequeñas / destiladas Las llamadas a herramientas son poco confiables — el agente parecerá "responder de memoria" en lugar de cargar skills o ejecutar backtests

El agent/.env.example predeterminado viene configurado con la API oficial de DeepSeek + deepseek-v4-pro; los usuarios de OpenRouter pueden usar deepseek/deepseek-v4-pro.


🖥 CLI Reference

La TUI interactiva (vibe-trading) ahora usa una transcripción nativa de terminal: un banner de inicio, una regla de prompt, un resumen del turno anterior, una barra de actividad en vivo, el renderizado de Markdown/tablas y el tiempo de ejecución, todo permanece en la CLI. Las invocaciones no interactivas como vibe-trading run, los pipes y --json siguen siendo adecuadas para scripts.

vibe-trading               # interactive TUI
vibe-trading run -p "..."  # single run
vibe-trading serve         # API server
vibe-trading alpha list    # explora 462 alphas preconstruidos; subcomandos show / bench / compare / export-manifest disponibles
vibe-trading playbook list # cinco plantillas de investigación programada; subcomandos show / create disponibles
vibe-trading channels status --local  # inspecciona la configuración de canales IM y sugerencias de instalación
vibe-trading provider doctor  # imprime diagnósticos redactados de provider/proxy/paquetes
Comandos slash dentro de la TUI
Comando Descripción
/help Muestra los atajos de teclado y la lista de comandos
/model Cambia el proveedor de LLM y el modelo
/memory Muestra / administra la memoria persistente
/history Explora y reanuda sesiones anteriores
/goal Inicia / inspecciona un objetivo de investigación financiera
/search Búsqueda de texto completo en todas las sesiones
/swarm Preajustes multiagente (comité / cuantitativo / riesgo)
/skill Lista / carga / descarga skills
/show Muestra una ejecución anterior por id
/clear Borra la conversación actual
/pine Exporta la estrategia actual como Pine Script
/journal Analiza el CSV del diario de operaciones
/shadow Entrena / visualiza la cuenta shadow
/export Exporta la sesión actual (md / json)
/debug Activa o desactiva el panel de depuración (uso de tokens / latencia)
/comps Análisis de empresas comparables (múltiplos de pares → rango implícito)
/dcf Valoración por flujo de caja descontado con cuadrícula de sensibilidad
/attrib Atribución Brinson-Fachler (asignación vs. selección)
/memo Memo de inversión — tesis, visión alternativa, escenarios, criterios de invalidación
/earnings Revisión de resultados — puente de sorpresas de ingresos a EPS
/screen Filtro sistemático de ideas — hipótesis, funnel, cola de supervivientes
/playbook Plantillas de investigación programada (listar / ejecutar / programar)
/connector Perfiles de conectores de trading (estado / iniciar / detener)
/halt Interruptor de emergencia — detiene TODO el trading en vivo de inmediato
/resume Desactiva el interruptor de emergencia (reactiva el trading en vivo)
/data Modo de enrutamiento de datos
/quit Salir (también: q, exit, :q)
Single run y flags
vibe-trading run -p "Backtest BTC-USDT MACD strategy, last 30 days"
vibe-trading run -p "Analyze AAPL momentum" --json
vibe-trading run -f strategy.txt
echo "Backtest 000001.SZ RSI" | vibe-trading run
vibe-trading -p "your prompt"
vibe-trading --skills
vibe-trading --swarm-presets
vibe-trading --swarm-run investment_committee '{"topic":"BTC outlook"}'
vibe-trading --list
vibe-trading --show <run_id>
vibe-trading --code <run_id>
vibe-trading --pine <run_id>           # Export indicators (TradingView + TDX + MT5)
vibe-trading --trace <run_id>
vibe-trading --continue <run_id> "refine the strategy"
vibe-trading --upload report.pdf
vibe-trading alpha list --zoo gtja191 --limit 10
vibe-trading alpha show gtja191_171
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
Canales IM

Los adaptadores de canales IM conectan aplicaciones de chat externas al mismo runtime de sesión que usan la Web UI y la CLI. Configura los adaptadores habilitados en channels dentro de ~/.vibe-trading/agent.json; los adaptadores basados en SDK son extras opcionales, y si falta un SDK se muestran sugerencias de recuperación en lugar de bloquear el runtime.

Para tareas de canal de larga duración, ajusta el presupuesto central de espera de respuesta del asistente con replyTimeoutS (segundos, por defecto 600):

{
  "channels": {
    "replyTimeoutS": 1800,
    "feishu": {
      "enabled": true
    }
  }
}

Esto controla cuánto tiempo espera el runtime de canal compartido a que la sesión del agente produzca un mensaje del asistente; los timeouts HTTP/socket de cada adaptador siguen siendo específicos de cada uno.

vibe-trading channels status --local   # inspecciona la configuración y sugerencias de SDK faltante sin usar la API
vibe-trading channels status           # consulta el runtime de la API en ejecución
vibe-trading channels start            # inicia los adaptadores habilitados a través de la API
vibe-trading channels stop             # detiene los adaptadores habilitados a través de la API
vibe-trading channels login weixin     # ejecuta el hook de inicio de sesión del adaptador cuando sea necesario
vibe-trading channels pairing --channel telegram list

Los adaptadores integrados cubren websocket, telegram, slack, discord, matrix, whatsapp, signal, qq, napcat, weixin, wecom, feishu, dingtalk, msteams, email y mochat. Usa extras específicos como pip install "vibe-trading-ai[telegram]", o instala el conjunto completo de canales con pip install "vibe-trading-ai[channels]".

Comandos slash dentro del chat (independientes del canal, funcionan en los 16 adaptadores):

Comando Descripción
/new Reinicia la sesión actual — el siguiente mensaje inicia una conversación nueva
/reset Alias de /new
/newsession Alias de /new
/pairing list Muestra las solicitudes de emparejamiento de remitentes pendientes (solo operadores)

Los comandos no distinguen mayúsculas/minúsculas y deben enviarse como el mensaje completo (por ejemplo, hello /new se trata como un mensaje normal, no como un reinicio).

/pairing está restringido a operadores. Los comandos de control de emparejamiento dentro del chat se rechazan a menos que el remitente figure como operador — configura channels.operators (autoridad entre canales) o la propia lista operators de la sección de un canal en tu configuración de canales. Sin operadores configurados, /pairing dentro del chat se rechaza (fail-closed) y el emparejamiento solo se gestiona a través de la CLI autenticada (vibe-trading channels pairing …) y el endpoint REST protegido por autenticación. Esto evita que cualquier miembro de un grupo en la lista de permitidos pueda tomar control del emparejamiento entre canales.


💡 Examples

Strategy & Backtesting

# Moving average crossover on US equities
vibe-trading run -p "Backtest a 20/50-day moving average crossover on AAPL for the past year, show Sharpe ratio and max drawdown"

# RSI mean-reversion on crypto
vibe-trading run -p "Test RSI(14) mean-reversion on BTC-USDT: buy below 30, sell above 70, last 6 months"

# Multi-factor strategy on A-shares
vibe-trading run -p "Backtest a momentum + value + quality multi-factor strategy on CSI 300 constituents over 2 years"

# After backtesting, export to TradingView / TDX / MetaTrader 5
vibe-trading --pine <run_id>

Compara un alpha zoo predefinido (una línea):

vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20

Explora el catálogo e inspecciona un alpha individual:

vibe-trading alpha list --zoo gtja191 --theme reversal --limit 10
vibe-trading alpha show gtja191_171

Compón una señal multifactor a partir del zoo (Python):

from src.skills.multi_factor.zoo_signal_engine import ZooSignalEngine
engine = ZooSignalEngine.from_zoo(["gtja191_171", "gtja191_111", "gtja191_163"])
panel = ...  # your wide OHLCV panel
signal = engine.compute_signal(panel)

Market Research

# Equity deep-dive
vibe-trading run -p "Research NVDA: earnings trend, analyst consensus, option flow, and key risks for next quarter"

# Macro analysis
vibe-trading run -p "Analyze the current Fed rate path, USD strength, and impact on EM equities and gold"

# Crypto on-chain
vibe-trading run -p "Deep dive BTC on-chain: whale flows, exchange balances, miner activity, and funding rates"

Swarm Workflows

# Bull/bear debate on a stock
vibe-trading --swarm-run investment_committee '{"topic": "Is TSLA a buy at current levels?"}'

# Quant strategy from screening to backtest
vibe-trading --swarm-run quant_strategy_desk '{"universe": "S&P 500", "horizon": "3 months"}'

# Crypto desk: funding + liquidation + flow → risk manager
vibe-trading --swarm-run crypto_trading_desk '{"asset": "ETH-USDT", "timeframe": "1w"}'

# Global macro portfolio allocation
vibe-trading --swarm-run macro_rates_fx_desk '{"focus": "Fed pivot impact on EM bonds"}'

Cross-Session Memory

# Save your preferences once
vibe-trading run -p "Remember: I prefer RSI-based strategies, max 10% drawdown, hold period 5–20 days"

# The agent recalls them in future sessions automatically
vibe-trading run -p "Build a crypto strategy that fits my risk profile"

Upload & Analyze Documents

# Analyze a broker export or earnings report
vibe-trading --upload trades_export.csv
vibe-trading run -p "Profile my trading behavior and identify any biases"

vibe-trading --upload NVDA_Q1_earnings.pdf
vibe-trading run -p "Summarize the key risks and beats/misses from this earnings report"

🌐 API Server

vibe-trading serve --port 8899
Method Endpoint Description
GET /runs Listar runs
GET /runs/{run_id} Detalles del run
GET /runs/{run_id}/pine Exportación de indicador multiplataforma
POST /sessions Crear sesión
POST /sessions/{id}/messages Enviar mensaje
GET /sessions/{id}/events Flujo de eventos SSE
POST /upload Subir un documento, archivo de datos o imagen
GET /swarm/presets Listar presets de swarm
POST /swarm/runs Iniciar un run de swarm
GET /swarm/runs/{id}/events Flujo SSE del swarm
GET /alpha/list Listar alphas (filtrar por zoo/theme/universe)
GET /alpha/{alpha_id} Metadatos del alpha + código fuente
POST /alpha/bench Iniciar un job de bench (devuelve job_id)
GET /alpha/bench/{job_id}/stream Flujo SSE de progreso
GET /settings/llm Leer los ajustes de LLM de la Web UI
PUT /settings/llm Actualizar los ajustes de LLM locales
GET /settings/data-sources Leer los ajustes locales de fuentes de datos
PUT /settings/data-sources Actualizar los ajustes locales de fuentes de datos
GET /channels/status Leer el estado del runtime y los adaptadores de canales de IM
POST /channels/start Iniciar los adaptadores de canales de IM configurados
POST /channels/stop Detener los adaptadores de canales de IM configurados
POST /channels/pairing/command Ejecutar un comando de emparejamiento de remitente contra el almacén compartido
POST /scheduled-runs Crear un job de investigación programada (interval-ms o cron)
GET /scheduled-runs Listar jobs programados
DELETE /scheduled-runs/{job_id} Cancelar un job programado
GET /scheduled-runs/playbooks Listar las plantillas de investigación
GET /scheduled-runs/playbooks/{slug} Mostrar una plantilla, con sus variables
POST /scheduled-runs/playbooks/{slug} Programar un job a partir de una plantilla
POST /sessions/{id}/cancel Detener el run en curso de la sesión (se registra como cancelado, no como fallido)
POST /sessions/{id}/title/auto Resumir el primer intercambio en un título de sesión (nunca sobrescribe un renombrado manual)
GET /correlation/regime Línea de tiempo del régimen de densidad de correlación
GET /agents.json · POST /v1/query Puente con OpenBB Workspace — registrado solo con el extra opcional openbb; /v1/query requiere autenticación

La documentación interactiva está disponible en http://localhost:8899/docs en modo de desarrollo loopback sin clave. Cuando se configura API_AUTH_KEY, /docs y /redoc quedan deshabilitados; las herramientas autenticadas pueden obtener /openapi.json con un encabezado Authorization: Bearer <key>.

Security defaults

Para desarrollo en localhost, vibe-trading serve mantiene simple el flujo del navegador. Para cualquier cliente no local, los endpoints sensibles de la API requieren API_AUTH_KEY; usa Authorization: Bearer <key> para las solicitudes JSON/upload. Los flujos EventSource del navegador son gestionados por la Web UI después de que ingreses la misma clave una vez en Settings.

Las herramientas de proceso con capacidad de shell (bash / background_run / cancel_background) están habilitadas solo para la CLI local interactiva. Cualquier otra superficie — la API HTTP/SSE y el servidor MCP en todos los transportes (incluido stdio) — las mantiene desactivadas a menos que optes explícitamente por activarlas con VIBE_TRADING_ENABLE_SHELL_TOOLS=1 (o pases --enable-shell-tools a vibe-trading-mcp). El tipo de transporte nunca otorga acceso a shell de forma implícita. cancel_background solo detiene el task ID rastreado devuelto por background_run; la terminación amplia de procesos de Python por nombre se rechaza porque podría terminar Vibe-Trading mismo. Los lectores de documentos y journals están limitados por defecto a las raíces de upload/import; coloca los archivos bajo ~/.vibe-trading/uploads, ~/.vibe-trading/runs, ./uploads, ./data (o las heredadas agent/uploads / agent/runs), o agrega un directorio dedicado mediante VIBE_TRADING_ALLOWED_FILE_ROOTS. Las sesiones, runs, swarm runs, uploads y el índice sessions.db viven bajo ~/.vibe-trading (reubicable mediante la variable de entorno de shell VIBE_TRADING_HOME); el historial preexistente se traslada allí automáticamente en el primer arranque.

El código de backtest generado se ejecuta como un subproceso local de Python y puede hacer solicitudes de red a través de los cargadores de datos de mercado configurados. Su entorno es intencionalmente limitado: el runner conserva lo básico de OS/Python, la configuración de proxy/certificados, VIBE_TRADING_ALLOWED_RUN_ROOTS, y claves de solo lectura para datos de mercado como TUSHARE_TOKEN, FMP_API_KEY, FRED_API_KEY y VIBE_TRADING_IWENCAI_KEY. Por defecto no pasa claves de proveedores de LLM, tokens de autenticación de la API, interruptores de herramientas de shell, secretos de trading de brokers ni toggles de live/advisory al código de estrategia generado.

Web UI Settings

La página de Settings de la Web UI permite a los usuarios locales actualizar el proveedor/modelo de LLM, la URL base, los parámetros de generación, el reasoning effort y credenciales opcionales de datos de mercado como el token de Tushare. Los ajustes se persisten en agent/.env; los valores por defecto del proveedor se cargan desde agent/src/providers/llm_providers.json.

Las lecturas de Settings no tienen efectos secundarios: GET /settings/llm y GET /settings/data-sources nunca crean agent/.env, y solo devuelven rutas relativas al proyecto. Las lecturas y escrituras de Settings pueden exponer el estado de credenciales o actualizar credenciales/entorno de runtime, por lo que requieren API_AUTH_KEY cuando está configurada. Si API_AUTH_KEY no está definida en modo dev, el acceso a settings solo se acepta desde clientes loopback.

La misma página de Settings incluye un panel de Canales de IM para operadores locales. Consulta periódicamente /channels/status, muestra los estados configured/enabled/available/loaded/running, expone sugerencias de recuperación del adaptador, y puede iniciar o detener el runtime del canal configurado sin volver a la terminal.

Scheduled research

Ejecuta un prompt de investigación o un backtest con una programación repetida — desde la página Scheduled en la web UI o mediante REST. El ejecutor en segundo plano está desactivado por defecto — inicia el servidor con VIBE_TRADING_ENABLE_SCHEDULER=1 para habilitarlo:

VIBE_TRADING_ENABLE_SCHEDULER=1 vibe-trading serve --port 8899

Luego crea jobs mediante REST. schedule es o bien un entero simple (intervalo en milisegundos) o una expresión cron de 5 campos (min hour dom mon dow; cada campo acepta *, */n, números, listas separadas por comas, o rangos como 1-5). Cron se ejecuta según el reloj de pared de la timezone opcional del job (una clave IANA), de modo que la cadencia se mantiene a través de las transiciones de horario de verano — un hueco de "spring-forward" se omite, y un momento ambiguo de "fall-back" se ejecuta una sola vez, en su primera ocurrencia. Los jobs sin timezone mantienen la semántica UTC habitual:

# every 6 hours (cron)
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Scan CSI300 for momentum breakouts and backtest the top 5","schedule":"0 */6 * * *"}'

# weekdays at 23:30 Auckland wall time — DST-proof
curl -X POST http://localhost:8899/scheduled-runs \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Pre-open scan of NZX names","schedule":"30 23 * * 1-5","timezone":"Pacific/Auckland"}'

# list / cancel
curl http://localhost:8899/scheduled-runs
curl -X DELETE http://localhost:8899/scheduled-runs/<job_id>

Cada disparo ejecuta el prompt a través de una sesión de agente nueva (los parámetros opcionales de backtest van en config), y los jobs se persisten bajo ~/.vibe-trading/ para sobrevivir a los reinicios. Sin el flag, los endpoints /scheduled-runs siguen registrando jobs, pero ninguno se dispara. Agrega -H "Authorization: Bearer <key>" a cada llamada cuando API_AUTH_KEY está configurada.

Cinco plantillas listas para programar vienen incluidas con el scheduler — premarket-brief, earnings-season-tracker, portfolio-checkup, a-share-money-flow, institutional-holdings-diff. Cada una expresa en lenguaje natural los datos que necesita un run en lugar de nombrar herramientas, de modo que una plantilla sigue funcionando a medida que crece la superficie de herramientas, y cada una está obligada a señalar un input faltante en lugar de completarlo de memoria. Accede a ellas desde la CLI, mediante REST, o con /playbook en la TUI:

vibe-trading playbook list                     # the five templates
vibe-trading playbook show premarket-brief     # body, declared variables, suggested cadence
vibe-trading playbook create premarket-brief \
  --var home_market="US equities" --var watchlist="AAPL, MSFT, NVDA" \
  --timezone America/New_York

curl http://localhost:8899/scheduled-runs/playbooks
curl http://localhost:8899/scheduled-runs/playbooks/premarket-brief
curl -X POST http://localhost:8899/scheduled-runs/playbooks/premarket-brief \
  -H "Content-Type: application/json" \
  -d '{"variables":{"home_market":"US equities","watchlist":"AAPL, MSFT, NVDA"}}'

Enviar {} programa una plantilla con su propia cadencia sugerida y sus valores por defecto declarados. El cuerpo renderizado se convierte textualmente en el prompt del job, y una variable no declarada se rechaza en lugar de ignorarse silenciosamente.


🔌 MCP Plugin

Vibe-Trading expone 74 MCP tools para cualquier cliente compatible con MCP. Se ejecuta como un subproceso stdio — no requiere configuración de servidor. Las herramientas de investigación principales funcionan sin ninguna API key para HK/US/crypto; las herramientas del conector de trading usan el perfil de conector seleccionado, y run_swarm necesita una LLM key.

Variables de entorno: el cliente lanza el servidor él mismo, así que un export de shell nunca le llega — configúralas en el bloque env del cliente. El código de backtest generado está confinado a los run roots permitidos, así que para escribir resultados en un workspace propio necesitas VIBE_TRADING_ALLOWED_RUN_ROOTS:

{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp",
      "env": { "VIBE_TRADING_ALLOWED_RUN_ROOTS": "C:\\Users\\me\\research" }
    }
  }
}
Claude Desktop

Añade a claude_desktop_config.json:

{
  "mcpServers": {
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}
OpenClaw

Añade a ~/.openclaw/config.yaml:

skills:
  - name: vibe-trading
    command: vibe-trading-mcp

Para una primera prueba de humo solo de investigación, confirma el descubrimiento de herramientas y ejecuta una solicitud de datos de mercado o de backtest antes de seleccionar un perfil de conector de trading. Las herramientas de investigación principales pueden ejecutarse sin credenciales de broker; las herramientas trading_* respaldadas por conector solo deben usarse después de seleccionar y verificar intencionadamente un perfil de conector. run_swarm requiere una LLM key.

Cursor / Windsurf / other MCP clients
vibe-trading-mcp                   # stdio (default)
vibe-trading-mcp --transport http  # Streamable HTTP (current MCP spec default) at http://127.0.0.1:8900/mcp
vibe-trading-mcp --transport sse   # legacy SSE (deprecated) for older clients

Para clientes HTTP (QwenPaw, y cualquier cliente que negocie enviando por POST una InitializeRequest), usa --transport http y apunta el cliente al único endpoint /mcp — por ejemplo, http://127.0.0.1:8900/mcp. No apuntes un cliente HTTP a /sse; esa ruta pertenece al transporte SSE de dos endpoints ya obsoleto y devolverá 405 Method Not Allowed en POST. Sobrescribe la dirección de bind con --host / --port.

MCP tools expuestas (74): list_skills, load_skill, start_research_goal, get_research_goal, add_goal_evidence, update_research_goal_status, backtest, factor_analysis, alpha_zoo, alpha_bench, analyze_options, analyze_options_payoff, pattern_recognition, read_url, read_document, web_search, write_file, read_file, list_strategies, query_strategies, get_strategy_evidence, refresh_strategy_evidence, trading_connections, trading_select_connection, trading_check, trading_account, trading_positions, trading_orders, trading_quote, trading_history, list_swarm_presets, run_swarm, get_market_data, get_fund_flow, get_dragon_tiger, get_northbound_flow, get_margin_trading, get_block_trades, get_shareholder_count, get_lockup_expiry, get_sector_info, get_research_reports, get_stock_news, get_sec_filings, get_financial_statements, get_options_chain, get_stock_profile, screen_market, search_symbol, get_macro_series, iwencai_search, qveris_search, qveris_inspect, qveris_execute, get_institutional_holdings, etf_holdings, prediction_market, research_papers, get_swarm_status, get_run_result, list_runs, reap_stale_runs, retry_run, analyze_trade_journal, extract_shadow_strategy, run_shadow_backtest, render_shadow_report, scan_shadow_signals, quantlib_call, cashflow_performance, orderbook_depth, sentiment, technical_indicators, get_fundamentals.

SWARM external MCP tools

Los workers de run_swarm pueden llamar a herramientas aprobadas por el operador provenientes de servidores MCP externos. Configura la allowlist del lado del servidor en VIBE_TRADING_SWARM_AGENT_CONFIG, ~/.vibe-trading/swarm-agent.json, o el respaldo ~/.vibe-trading/agent.json; luego lista las herramientas remotas en un swarm preset usando el nombre del wrapper MCP local, como mcp_internal_kb_search. Las variables proporcionadas por el llamador permanecen como simples datos de plantilla y no pueden inyectar URLs de MCP, comandos, variables de entorno ni overrides de la allowlist.

Install from ClawHub (one command)
npx clawhub@latest install vibe-trading --force

--force es necesario porque el skill hace referencia a APIs externas, lo cual dispara el escaneo automático de VirusTotal. El código es completamente open-source y seguro de inspeccionar.

Esto descarga el skill + la configuración MCP al directorio de skills de tu agente. No se necesita clonar nada.

Explora en ClawHub: clawhub.ai/skills/vibe-trading

OpenSpace — self-evolving skills

Los 90 skills de finanzas están publicados en open-space.cloud y evolucionan de forma autónoma mediante el motor de auto-evolución de OpenSpace.

Para usarlo con OpenSpace, añade ambos servidores MCP a la configuración de tu agente:

{
  "mcpServers": {
    "openspace": {
      "command": "openspace-mcp",
      "toolTimeout": 600,
      "env": {
        "OPENSPACE_HOST_SKILL_DIRS": "/path/to/vibe-trading/agent/src/skills",
        "OPENSPACE_WORKSPACE": "/path/to/OpenSpace"
      }
    },
    "vibe-trading": {
      "command": "vibe-trading-mcp"
    }
  }
}

OpenSpace descubrirá automáticamente los 90 skills, habilitando auto-fix, auto-improve y compartición comunitaria. Busca skills de Vibe-Trading mediante search_skills("finance backtest") en cualquier agente conectado a OpenSpace.


MetaTrader 5 (Exness and other MT5 brokers)

Se conecta a una terminal MT5 en ejecución local a través del paquete oficial MetaTrader5 (solo Windows):

pip install "vibe-trading-ai[mt5]"

Configura ~/.vibe-trading/mt5.json (créalo tú mismo; chmod 600 donde esté soportado):

{
  "login": 12345678,
  "password": "...",
  "server": "Exness-MT5Trial8",
  "symbol_suffix": "m",
  "max_order_volume": 1.0,
  "max_order_notional_usd": 10000
}

Luego:

vibe-trading connector use mt5-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector quote EURUSD
vibe-trading connector history EURUSD
Profile Account Orders
mt5-paper-sdk demo solo lectura
mt5-live-sdk-readonly real solo lectura
mt5-paper-trade demo colocación directa (aplican los límites de tamaño por orden del connector)
mt5-live-trade real controlado por mandato + kill-switch

Límite de seguridad: "paper" significa la propia cuenta demo del broker, reverificada en cada llamada — la terminal reporta account_info().trade_mode y el número de cuenta con sesión iniciada, por lo que apuntar un perfil paper a una cuenta de dinero real (o al revés) se rechaza de plano. MT5 dimensiona las órdenes en lotes (1 lote EURUSD = 100.000 EUR); el gate de mandato live cotiza los lotes a través del hook USD del connector, y los propios límites max_order_volume / max_order_notional_usd del connector aplican tanto en demo como en live, fallando de forma cerrada cuando un nocional no puede cotizarse. En cuentas de hedging (el valor predeterminado de Exness), ten en cuenta que una orden opuesta abre una posición de hedge — cierra por ticket en su lugar (pasa el ticket de la posición a trading_cancel_order) para que la ejecución quede anclada a esa posición y solo pueda reducir la exposición. Ruta de rollback / detención: el kill switch bloquea nuevas órdenes live, mientras que la cancelación sigue disponible y se registra en el audit log. Los límites de mandato están denominados en USD; una moneda de cuenta distinta de USD es margenada por el broker en su propia moneda.

El loader de datos de mercado mt5 — la cabeza de la cadena de fallback de forex — comparte este mismo mt5.json. Si no existe dicho archivo, se conecta en modo solo lectura a la terminal usada más recientemente que ya tenga la sesión iniciada.


🔌 Conector de API Pública de eToro

Se conecta a la API Pública de eToro para cuentas demo y reales mediante un par de claves de API (x-api-key + x-user-key). Los entornos demo y real están separados estructuralmente: las claves demo solo pueden acceder a las rutas de API /demo.

Configura ~/.vibe-trading/etoro.json (créalo tú mismo; usa chmod 600 donde esté disponible):

{
  "api_key": "YOUR_PUBLIC_API_KEY",
  "user_key": "YOUR_USER_KEY",
  "profile": "paper"
}

También puedes definir ETORO_API_KEY y ETORO_USER_KEY en ~/.vibe-trading/.env.

Luego:

vibe-trading connector use etoro-paper-sdk
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector quote BTC
Perfil Cuenta Órdenes
etoro-paper-sdk demo solo lectura
etoro-live-sdk-readonly real solo lectura
etoro-paper-trade demo colocación directa en rutas demo
etoro-live-trade real condicionado por mandato + kill-switch

La búsqueda de símbolos usa el buscador internalSymbolFull de eToro (por ejemplo, BTC → id de instrumento 100000). Usa la herramienta de agente etoro_search_instruments para resolver los tickers antes de operar.

Límite de seguridad: demo y real están separados por ruta y vinculados a la clave (paper_guard: path_separated_key_bound). Las acciones en real que aumentan el riesgo (abrir posiciones y copy-start/increase) requieren un mandato autorizado, un estado de halt despejado y una cuenta USD verificada para la aplicación del nocional de copia. Los cierres totales y parciales de posición validados, la cancelación de órdenes abiertas y el cierre de copia siguen disponibles en estado de halt y quedan registrados en auditoría. Cancelar un cierre pendiente o editar los stops de una posición es exclusivo de paper: la ruta real falla en cerrado (fail closed) porque esas operaciones pueden aumentar la exposición o transferir margen adicional sin suficientes datos de la API para cuantificar el riesgo incremental en USD. Los importes de copia se denominan en la divisa de la cuenta de eToro, y cada inicio/ajuste de copia requiere un id de referencia URL-safe de 1 a 35 caracteres proporcionado por el llamador para hacer polling. Las herramientas de escritura específicas de eToro (etoro_close_position, etoro_copy_*, etc.) son solo herramientas de agente, no se exponen vía MCP ni CLI. Rollback: revertir el/los commit(s) del conector o desactivar los perfiles; el halt bloquea nuevas acciones en real que aumenten el riesgo.


🔌 Cargar Herramientas desde Servidores MCP Externos (Modo Cliente MCP)

Esta es la dirección opuesta al Plugin MCP descrito arriba. El Plugin MCP permite que otros agentes llamen a las herramientas de Vibe-Trading. Esta sección permite que el agente integrado de Vibe-Trading llame a herramientas de tus servidores MCP externos.

Inicio rápido

Crea ~/.vibe-trading/agent.json:

{
  "mcpServers": {
    "my-server": {
      "command": "uvx",
      "args": ["my-mcp-server"]
    }
  }
}

Ejecuta cualquier comando de la CLI: las herramientas de servidores externos ordinarios se inyectan automáticamente en el registro del agente después de las herramientas locales:

vibe-trading run "use my-server to do X"

Sonda de solo lectura del MCP oficial de IBKR

Vibe-Trading puede conectarse directamente al endpoint MCP remoto oficial de Interactive Brokers en modo de solo lectura. Añade esto a ~/.vibe-trading/agent.json:

{
  "mcpServers": {
    "ibkr": {
      "type": "streamableHttp",
      "url": "https://api.ibkr.com/v1/api/mcp-public",
      "auth": {
        "type": "oauth",
        "scopes": ["mcp.read"],
        "clientName": "Vibe-Trading",
        "cacheDir": "~/.vibe-trading/live/ibkr/oauth"
      },
      "enabledTools": ["*"]
    }
  }
}

Luego inicia el flujo de OAuth en el navegador:

vibe-trading connector authorize ibkr-live-official-mcp-readonly

El comodín solo se acepta para la sonda mcp.read de IBKR. Autorizar este perfil confirma el acceso al scope de lectura oficial de IBKR; las llamadas genéricas a trading_account y trading_positions permanecen deshabilitadas hasta que IBKR publique nombres de herramientas de lectura estables que Vibe-Trading pueda mapear de forma segura. Una configuración que añada mcp.write debe fijar una lista blanca explícita de herramientas y aun así pasar por el guard de órdenes en real.

Si IBKR emite un cliente OAuth pre-registrado, añade clientId y clientSecret dentro de auth.

Conectores de trading: la ruta más rápida

Para usuarios que no pueden esperar la aprobación del cliente OAuth de IBKR, conéctate a una sesión local de TWS o IB Gateway. Las credenciales permanecen dentro de la app de escritorio de IBKR; Vibe- Trading solo se conecta a 127.0.0.1 y la expone como un perfil de conector.

Instala el SDK opcional:

pip install "vibe-trading-ai[ibkr]"

Abre TWS en modo paper trading o IB Gateway paper, habilita los clientes de socket de API y luego ejecuta:

vibe-trading connector list
vibe-trading connector use ibkr-paper-local
vibe-trading connector configure ibkr-paper-local --yes
vibe-trading connector check
vibe-trading connector account
vibe-trading connector positions
vibe-trading connector orders
vibe-trading connector quote AAPL
vibe-trading connector history AAPL --duration "30 D" --bar-size "1 day"

Puertos locales por defecto:

App Paper Real de solo lectura
TWS 7497 7496
IB Gateway 4002 4001

El agente expone herramientas con alcance de conector llamadas trading_connections, trading_select_connection, trading_check, trading_account, trading_positions, trading_orders, trading_quote y trading_history. Las herramientas MCP crudas de brokers en real no se registran directamente como mcp_<broker>_*. No se registra ninguna herramienta de colocación de órdenes para IBKR.

🔐 Modo TAP — aislamiento total de credenciales y escrituras aprobadas por humanos

Opcional, desactivado por defecto. Si las variables TAP_* de abajo no están definidas, el conector se comporta exactamente igual que antes (SDK directo del broker); nada cambia.

TAP (Tool Authorization Protocol) es un proxy de credenciales: el agente nunca posee el secreto crudo de la API del broker, y las escrituras con consecuencias reales están condicionadas a la aprobación humana. Con el modo TAP activado, cada llamada a Alpaca (colocación de órdenes, cancelación, y las lecturas: cuenta/posiciones/órdenes/cotización/barras) se envía al endpoint /forward del proxy TAP en lugar del SDK del broker; TAP inyecta la clave real en el servidor y luego reenvía la solicitud hacia arriba.

  • El proceso del agente no posee ninguna clave de Alpaca en absoluto — y ni siquiera necesita alpaca-py — porque todo el tráfico de salida pasa por TAP. El secreto se referencia por nombre (<CREDENTIAL:alpaca.key_id>) y TAP lo sustituye.
  • Las escrituras se bloquean hasta la aprobación humana. Una orden o cancelación no puede llegar al broker sin que un humano la apruebe; incluso un "compra ahora" inyectado mediante prompt queda retenido, y denegarlo significa que nunca llega a Alpaca. Las órdenes llevan un client_order_id determinístico, de modo que un reintento por condición de carrera en la aprobación se deduplica en lugar de colocarse dos veces.
  • Las lecturas se aprueban automáticamente. Cuenta/posiciones/órdenes/cotización/barras son GETs que TAP reenvía sin un paso humano — esto es aislamiento de credenciales (ninguna clave en el proceso), no una compuerta, así que la fricción añadida es prácticamente cero.
  • allowed_hosts en la credencial de TAP fija a dónde puede enviarse la clave, de modo que un destino manipulado se rechaza (403) antes de la inyección.

Cómo habilitarlo:

  1. En el panel de TAP, crea una credencial multi-secreto llamada alpaca que contenga tu par de claves de Alpaca en los campos key_id y secret_key, asignada a tu agente, con hosts permitidos paper-api.alpaca.markets (o el host real api.alpaca.markets) y data.alpaca.markets (el host de datos de mercado usado por quote/bars). Usa credenciales de TAP separadas para paper y real (por ejemplo, alpaca-paper / alpaca-live, seleccionadas mediante TAP_ALPACA_CREDENTIAL), cada una con allowed_hosts fijado a su propio host de API — así TAP se niega estructuralmente a enviar la clave de paper al host real y viceversa, manteniendo la separación paper/real nítida de principio a fin.
  2. Añade a agent/.env:
Variable Requerida Descripción
TAP_PROXY_URL URL base del proxy TAP (por ejemplo, https://proxy.tap.human.tech)
TAP_AGENT_KEY Tu clave de API del agente TAP (secreto)
TAP_ALPACA_CREDENTIAL No Nombre de la credencial TAP para Alpaca (por defecto alpaca)
TAP_APPROVAL_TIMEOUT No Segundos a esperar la decisión de un humano (por defecto 300)

Cuando se coloca una escritura, apruébala o denégala en tu canal de TAP (Telegram / panel). Una orden/cancelación aprobada se reenvía a Alpaca; una denegada o que agotó el tiempo de espera nunca se envía.

Limitación conocida — condición de carrera en la aprobación. Si el humano aprueba justo en el límite de TAP_APPROVAL_TIMEOUT, TAP puede reenviar la orden mientras el polling ya se ha rendido: la compuerta entonces reporta un error aunque la orden llegó al broker, y el contador max_trades_per_day cuenta una de menos. El client_order_id determinístico evita que un reintento coloque esa orden por duplicado; si dependes de un límite estricto de operaciones por día, revisa las órdenes abiertas después de un error de timeout de TAP antes de reintentar.

Alcance: cubre la colocación de órdenes, cancelación y las cinco lecturas de Alpaca — el tráfico de salida completo del conector, de modo que el proceso no posee la clave en ninguna ruta. Los brokers con firma HMAC (Binance/OKX) quedan como trabajo futuro (la firma del lado del cliente no encaja con la inyección de tráfico de salida pura). Los hooks son aditivos: viven dentro del conector de Alpaca y dejan intacta la compuerta de mandato en real.

Referencia de configuración

Campo Tipo Por defecto Descripción
type string inferido para stdio; requerido para HTTP Omítelo para stdio, o ponlo en sse / streamableHttp para servidores basados en URL.
command string requerido para stdio Ejecutable a lanzar para servidores stdio. Inválido para servidores sse / streamableHttp.
args array [] Argumentos de línea de comandos solo para servidores stdio.
env object {} Variables de entorno adicionales fusionadas en el entorno del subproceso solo para servidores stdio.
url string requerido para sse / streamableHttp URL del endpoint remoto SSE / streamable HTTP. No se usa para servidores stdio.
headers object {} Cabeceras HTTP adicionales solo para servidores sse / streamableHttp.
toolTimeout number 30 Timeout por llamada a herramienta, en segundos
initTimeout number sin definir (max(toolTimeout, 30)) Timeout de initialize / autorización OAuth de MCP, en segundos. Úsalo para autorización lenta por navegador sin ampliar las llamadas ordinarias a herramientas.
enabledTools array ["*"] Lista blanca de herramientas. Usa ["*"] para exponer todas las herramientas del servidor

Ubicación del archivo de configuración: ~/.vibe-trading/agent.json (JSON o YAML).

Para transportes basados en URL, type es obligatorio. El agente ya no adivina entre SSE y streamable HTTP a partir del sufijo de la URL.

Anulaciones por sesión (API)

Al crear una sesión mediante la API puedes pasar mcpServers dentro de session.config para extender o anular la configuración global solo para esa sesión:

{
  "config": {
    "mcpServers": {
      "research-server": {
        "command": "uvx",
        "args": ["research-mcp"],
        "enabledTools": ["search", "fetch"]
      }
    }
  }
}

Nomenclatura de herramientas

Las herramientas remotas ordinarias se exponen con nombres estables: mcp_<server>_<tool>. Los servidores MCP de brokers en real permanecen detrás de la superficie de conector trading_*.

Si dos nombres de servidor producen el mismo prefijo local seguro para ASCII (por ejemplo, foo-bar y foo_bar ambos se convierten en foo_bar), se añade un sufijo hash determinístico a nivel del segmento de servidor para que los nombres sigan siendo únicos. El operador recibe una advertencia:

WARNING: Configured MCP server 'foo-bar' collides with another server after local name
normalization. Using local tool prefix 'mcp_foo_bar_<hash>_<tool>' to keep generated
tool names unique. Rename the server in agent config if you want a different prefix.

Límites de v1

Límite Detalle
Transporte stdio, SSE y streamable HTTP
Ejecución solo serial — las herramientas MCP nunca entran en la ruta paralela de solo lectura
Superficies solo herramientas (resources y prompts excluidos en v1)
Recarga en caliente no soportada — reinicia el proceso para aplicar cambios de configuración
Ruta Swarm las herramientas MCP no están disponibles dentro de los registros de workers de Swarm en v1

📁 Project Structure

Haz clic para expandir
Vibe-Trading/
├── agent/                          # Backend (Python)
│   ├── cli/                        # Paquete CLI — TUI interactiva + subcomandos
│   ├── api_server.py               # Servidor FastAPI — runs, sesiones, carga, swarm, SSE
│   ├── mcp_server.py               # Servidor MCP — 74 herramientas para OpenClaw / Claude Desktop
│   │
│   ├── src/
│   │   ├── agent/                  # Núcleo del agente ReAct
│   │   │   ├── loop.py             #   compresión de 5 capas + agrupación de herramientas de lectura/escritura
│   │   │   ├── context.py          #   system prompt + auto-recuperación desde memoria persistente
│   │   │   ├── skills.py           #   cargador de skills (90 incluidas + creadas por el usuario vía CRUD)
│   │   │   ├── tools.py            #   clase base de herramientas + registro
│   │   │   ├── memory.py           #   estado ligero del workspace por ejecución
│   │   │   ├── frontmatter.py      #   parser de frontmatter YAML compartido
│   │   │   └── trace.py            #   escritor de traza de ejecución
│   │   │
│   │   ├── memory/                 # Memoria persistente entre sesiones
│   │   │   └── persistent.py       #   memoria basada en archivos (~/.vibe-trading/memory/)
│   │   │
│   │   ├── tools/                  # 106 herramientas de agente autodescubiertas
│   │   │   ├── backtest_tool.py    #   ejecuta backtests
│   │   │   ├── remember_tool.py    #   memoria entre sesiones (save/recall/forget)
│   │   │   ├── skill_writer_tool.py #  CRUD de skills (save/patch/delete/file)
│   │   │   ├── session_search_tool.py # búsqueda FTS5 entre sesiones
│   │   │   ├── swarm_tool.py       #   lanza equipos swarm
│   │   │   ├── web_search_tool.py  #   búsqueda web con DuckDuckGo
│   │   │   └── ...                 #   bash, E/S de archivos, análisis de factores, opciones, navegador de alpha + bench, etc.
│   │   │
│   │   ├── factors/                # Alpha Zoo — 462 alphas en 5 familias
│   │   │   ├── base.py             #   19 operadores (rank/scale/ts_*/delta/decay_linear/safe_div/vwap)
│   │   │   ├── registry.py         #   carga de metadatos solo por AST + cómputo diferido + puertas de sanidad
│   │   │   ├── bench_runner.py     #   IC + categorización alive/reversed/dead
│   │   │   └── zoo/                #   qlib158 (154) + alpha101 (101) + gtja191 (191) + academic (12) + fundamental (4)
│   │   │
│   │   ├── api/                    # Módulos de rutas FastAPI
│   │   │   └── alpha_routes.py     #   /alpha/list, /alpha/{id}, /alpha/bench, flujo SSE
│   │   │
│   │   ├── skills/                 # 90 skills financieras en 9 categorías (un SKILL.md cada una)
│   │   ├── swarm/                  # Motor de ejecución de DAG swarm
│   │   │   └── presets/            #   30 definiciones YAML de presets swarm
│   │   ├── session/                # Chat multi-turno + búsqueda de sesiones FTS5
│   │   └── providers/              # Abstracción de proveedores LLM
│   │
│   └── backtest/                   # Motores de backtest
│       ├── engines/                #   8 motores + motor compuesto multi-mercado + options_portfolio
│       ├── loaders/                #   24 fuentes: tushare, okx, binance, yfinance, akshare, baostock, tencent, mootdx, ccxt, futu, pykrx, local, eastmoney, sina, stooq, yahoo, finnhub, alphavantage, tiingo, fmp, longbridge, mt5, qveris, india_broker
│       │   ├── base.py             #   Protocolo DataLoader
│       │   └── registry.py         #   Registro + cadenas de fallback automáticas
│       └── optimizers/             #   MVO, equal vol, max div, risk parity
│
├── frontend/                       # Interfaz web (React 19 + Vite + TypeScript)
│   └── src/
│       ├── pages/                  #   Home, Agent, AlphaZoo, RunDetail, Compare, Correlation, Settings
│       ├── components/             #   chat, gráficos, layout
│       └── stores/                 #   gestión de estado con Zustand
│
├── Dockerfile                      # Build multi-etapa
├── docker-compose.yml              # Despliegue con un solo comando
├── pyproject.toml                  # Configuración del paquete + entrypoint de CLI
├── tools/                          # Utilidades de CI a nivel de repositorio
│   └── ci_grep_gates.sh            # rechaza yaml.load / marca registrada / filtraciones de datos por acción
└── LICENSE                         # MIT

🏛 Ecosystem

Vibe-Trading forma parte del ecosistema de agentes de HKUDS:

NanoBot
Ultra-Lightweight Personal AI Assistant
AI-Trader
Agent-Native Signal & Copy Trading Platform
CLI-Anything
Making All Software Agent-Native
OpenSpace
Self-Evolving AI Agent Skills
ClawTeam
Agent Swarm Intelligence

🗺 Roadmap

Entregamos por fases. Los elementos se trasladan a Issues cuando comienza el trabajo.

Fase Función Estado
Trust Layer Se emiten run cards reproducibles y se muestran en Run Detail; v1 añade tool traces y citations v0 publicado
Hypothesis Registry Hipótesis de investigación duraderas con lifecycle status, data sources, skills, enlaces a run-card y notas de invalidación MVP de backend publicado
Research Autopilot Bucle de investigación manual-primero: hipótesis → backtest determinista → evidence report Fases 1–3 publicadas
Data Bridge Trae tus propios datos: conectores locales CSV/Parquet/SQL con mapeo de esquema Cargador local publicado
Options Lab Superficie de volatilidad, panel de Greeks, explorador de payoff/escenarios Herramienta analítica de payoff/escenarios publicada; superficie/panel planificados
Portfolio Studio Risk x-ray, restricciones, optimizador con reducción de turnover, notas de rebalanceo Optimizador con reducción de turnover publicado en 0.1.11; el resto planificado
Alpha Zoo 462 alphas preconstruidas (Qlib 158 + Kakushadze 101 + GTJA 191 + academic + fundamental) con benchmark en una línea, integración con el agente y Web UI Publicado en 0.1.8, ampliado hasta 0.1.12
Strategy Development Manager Registra papers / research de brokers como factores y estrategias con un almacén persistente + lifecycle automatizado de decaimiento de IC/Sharpe Publicado en 0.1.11
Correlation Regime Línea temporal de régimen por edge-density + histéresis, superpuesta en /correlation — detecta cuándo los mercados se fusionan en un solo bloque Publicado en 0.1.12
Research Delivery Briefs programados y sesiones de investigación en vivo a través de canales IM tipo Slack / Telegram / correo Scheduler + runtime de IM publicados
Community Skills, presets y strategy cards compartibles En exploración

Contributing

¡Damos la bienvenida a las contribuciones! Consulta CONTRIBUTING.md para conocer las pautas.

Los Good first issues están etiquetados con good first issue — elige uno y comienza.

¿Quieres contribuir con algo más grande? Revisa el Roadmap anterior y abre un issue para discutirlo antes de empezar.


Contributors

¡Gracias a todos los que han contribuido a Vibe-Trading!

Contribuidores y créditos recientes del ciclo v0.1.14:

  • @Shizoqua — a 13-PR correctness sweep across nearly every subsystem: grounding auto-recovers identity and price evidence within a bounded budget (#1092), swarm isolates worker artifacts between retries (#1053), rejects raw ok/success tool-result envelopes (#1052) and truncates oversized results with the shared notice (#1110), MCP gains offset paging for SEC filings and statements (#1138), routes load_skill through the registry so oversized skills page (#1137) and carries market-data provenance on get_market_data (#1131), plus excess_return consistency (#1058), Wilder-EWM RSI (#1056), the FTS5 tokenizer floor (#1071), non-finite prediction-market fields (#1136), in-flight delivery protection (#1140) and preserved backtest validation evidence (#1139)
  • @shadowinlife — the run-analysis surface, four pages in one cycle: Options Lab (#1096), the Factor Research panel with its new IC correlation matrix (#1099), positions structure visualization (#1097) and the tearsheet tab (#1091); plus evidence-gated Strategy Discovery Phase 1 (#978) and Phase 2 decay monitoring (#1007), per-market volume units in market-data provenance (#1065) and baostock volume normalized to board lots (#1067)
  • @pengpengyi92 — five quantlib numerics fixes: xirr and money-weighted return survive long-horizon discount underflow (#1119), zero-volatility options discount their forward value (#1066), the fixed-income curve keeps decay inside the requested bounds (#1076), event studies anchor to the prior session (#1078) and cross-validation aligns label ends to the prior observation (#1079)
  • @cgycorey — reasoning effort honoured in chat completions (#1025), the per-task swarm ChatLLM closed to stop a pooled-connection leak (#1145) and the same for one-shot clients (#1153), gross_profit derived from revenue minus COGS when the SEC tag is absent (#1111), and vibe-trading show <run_id> dispatching its run id instead of the flag (#1147)
  • @lorenzozanee — the test suite stopped escaping into the real config root and its live audit ledger (#1118, closes #1116), recovery steering delivered as user messages with inline system tags (#1112), and unsupported ticker-plus-name symbol queries marked skipped rather than failed (#1114)
  • @AndyLongest — the interactive backtest research dashboard (#1084), the engine reporting actual post-fill positions (#1082), and grounding ignoring identity constants in rate formulas (#1083)
  • @ofeksh-tr — eToro runtime UI parity for SDK connector status (#1051) and its crypto browse and flat market-data quotes (#1070), plus an empty Response for the scheduled-runs DELETE 204 (#1068)
  • @wiliao — the agent-run reliability pass: grounding false-rejections, the final-answer gate and LLM timeouts (#1105), with prompt wording and support/resistance masking (#1060)
  • @jay79-boop — a selectable IBKR market-data tier with starved quotes reported as no_data (#1075), and strict alpha t-stats surfaced in the bench JSON and HTML report (#1085)
  • @Robin1987China — DCF refusing non-finite inputs instead of a silent negative share price (#1121), and grounding masking ISO dates that run into CJK text (#1132)
  • @zzz607 — grounding masking line-leading ordered-list markers before number extraction (#1063), and the East Money research-report endpoint given the time parameters it now requires (#1077)
  • @Echoandelementwebsites — worker prompts ordered for prompt-cache-friendly prefixes (#1057), and tool-less agents no longer instructed to call write_file (#1144)
  • @549236606-oss — seven extended read-only Futu connector endpoints, each fail-closed through the existing gateway envelope (#1135)
  • @QCYTSN — the desktop update safety boundary: PID-scoped shutdown, dormant candidate verification, interrupted-attempt recovery, and a tested tampered/unsigned/wrong-publisher/downgrade rejection matrix (#1101)
  • @honginp — offline USD-M account reconciliation with immutable snapshot contracts and deterministic drift reporting (#1106)
  • @he-yufeng — each monitor's latest verdict parsed server-side and persisted on the job for the Market Watch list (#1152)
  • @sykuang — GitHub Copilot as a provider through the official SDK, with no borrowed client ID and no editor-impersonation headers (#990)
  • @miguelangelo78 — the hosted TickerAll MetaTrader 5 data source, so forex and metals backtests need no local MT5 terminal (#968)
  • @ngoanpv — Vietnam equity (HOSE) support: .VN no longer executes under China A-share rules (#1033)
  • @jax-novita — Novita AI registered as a built-in OpenAI-compatible provider (#1059)
  • @daviddaco1 — the Spanish locale and README_es.md, the sixth README (#1087)
  • @1psconstructor — German (Deutsch) UI support (#1117)
  • @x-lambda — the tencent loader building its SSL context from the certifi CA bundle, unblocking HK quotes (#1113)
  • @er-s-an — build_registry() reporting partial construction instead of silently returning a short tool list (#1129)
  • @straun-repo — reasoning effort passed through to the Anthropic adapter (#1115)
  • @nstavros — connector orders rendering broker_sdk rows, with SDK enum reprs stripped and class-B tickers left intact (#1150)
  • @lukiod — .env.partial created with owner-only permissions (#1086)
  • @fixXxerTech — inferred strategy labels marked as inferred in the run dashboard (#1134)
  • @birdxs — Docker images carrying the Feishu and Telegram channel dependencies, with a GHCR/Docker Hub build workflow (#1088)
  • @zhiwuyazhe-fjr — a Docker Codex OAuth EOF that explains itself (#1054)
Contribuidores del ciclo v0.1.12
  • @santhreal — una limpieza de corrección de 30 PR: endurecimiento de strict-JSON / números finitos en metrics, factors, pattern y options (#764/#765/#766/#767/#739/#740/#744), corrección de loaders (#761 yahoo 1m bars), y robustez de session / journal (#762/#763/#768/#769/#770)
  • @xkam7ar — mejoras de fiabilidad amplias en packaging, web, scheduler, swarm y CLI (#584), cancelación antes de la primera iteración de AgentLoop (#641, cierra #638), presupuesto de sesión de QVeris + contabilidad atómica de créditos (#685/#686), puertas de CI / OOS (#630/#632), y correcciones del filtro por mes / parseo de side en journal (#626/#628)
  • @shadowinlife — la skill Strategy Development Manager (#457, cierra #455), extracción enchufable con OCR + LLM-vision (#548), credenciales de proveedor centralizadas (#563), la vectorización 80× de alineación de señales (#698), y el cacheo de MCP-discovery en swarm (#704)
  • @ebujinovch — el endpoint + UI de la línea temporal de correlation regime (#756, cierra #719) y su skill correlation-regime (#557), además del factor academic_corr_rewire (#705)
  • @honginp — enrutamiento USD-M de Binance con separación execution/mark (#470/#716) y el desacoplamiento del maintenance-bracket que mantiene los backtests -PERP sin necesidad de credenciales (#757)
  • @StaniellG — el connector de broker MetaTrader 5 (Exness) + la fuente de datos mt5 (#481)
  • @tyj147454413-cmd — el loader de fallback de Binance (#643), historial acotado de OKX con manejo de rate-limit (#644), y clasificación de fallos de stream de codex (#663)
  • @Marnie0415 — fallback de sub-motor composite para símbolos desconocidos (#734) y la corrección de la race condition de DOM en insertBefore durante el streaming en el frontend (#717)
  • @YZY0108 — la corrección de look-ahead-bias en los cinco optimizadores de portfolio (#487)
  • @UNHNQ — los proveedores SiliconFlow CN + Global (#565)
  • @FenjuFu — el proveedor iFlytek Spark (#537)
  • @jelech — el adaptador nativo de la API de Messages de Anthropic (#695)
  • @octo-patch — endpoints regionales de la API de MiniMax (#731)
  • @Thibaultjaigu — el proveedor de gateway Requesty compatible con OpenAI (#474)
  • @Robin1987China — métricas de turnover realizado del portfolio para cada optimizador (#478)
  • @YogeshModi24 — el factor académico betting-against-beta de Frazzini-Pedersen (#480)
  • @0xZKnw — modo TAP opcional para Alpaca (#377)
  • @sambazhu — la whitelist _VALID_ZOOS del zoo fundamental (#707)
  • @nareshkps — conexión de account_number en el connector de Robinhood (#726)
  • @darkknight4563 — descubrimiento del directorio de swarm-presets del usuario (#570)
  • @MikeCer — pool de conexiones thread-local de IBKR + cotizaciones snapshot (#636)
  • @Shizoqua — resampling de intervalos en el loader local (#467)
  • @roberttidball — compatibilidad de importación del transporte de FastMCP (#469)
  • @yxhuang — resolución de tickers sin prefijo en la matriz de correlación (#472, cierra #471)
  • @Bortlesboat — corrección de OPENAI_BASE_URL desactualizado al cambiar de proveedor (#484, cierra #482)
  • @ananaymital — corrección de caché desactualizada de EnvConfig en preflight (#479, cierra #477)
  • @GabbaTauchi — reportó el bug de streaming / base-URL nativo de zai (#758)
  • @warren618 / Haozhe Wu — la integración de backend de correlation regime, la corrección de streaming + resolución de base-URL del proveedor zai (#758), integración de releases, y triage de PRs/issues abiertos
Contribuidores del ciclo v0.1.11
  • @shadowinlife — la culminación de la modularización de api_server (1103 → 371 líneas, #424 cerrando #331), configuración de entorno centralizada con la puerta de CI basada en AST (#440), conformidad del protocolo fetch() de los loaders (#437), y el RFC de Strategy Development Manager en revisión (#455/#457) — 12 PR fusionados en este ciclo
  • @Robin1987China — cierre del bucle de la Fase 3 de Research Autopilot (#267), 4 alphas académicas canónicas (#277), condiciones de entrada PIT-safe de Shadow Account (#302/#314/#316), el optimizador de portfolio con reducción de turnover (#466), tests de la ruta de scheduled-research (#452), y lotes de cobertura de tests para las capas de trade-journal / pattern / loader (#268/#269/#276)
  • @muku314115 — soporte de primera clase para renta variable india (NSE/BSE): IndiaEquityEngine, el stack de costes, el enrutamiento .NS/.BO, y el puente india_broker (#305)
  • @mvanhorn — el ejecutor de extremo a extremo de scheduled-research (#278), el connector de solo lectura de Trading 212 (#321), la resolución del modelo por defecto de OpenAI (#319), y la validación de configuración de Robinhood (#320)
  • @fei-moss — la herramienta de visión analyze_image (#464), el emparejamiento DM de NapCat (#463), y el informe de allowed-roots de medios en IM (#465)
  • @sambazhu — el toolkit de value-investing: herramientas de financial-rigor + report-audit, 4 skills, y el preset value_investing_committee (#407/#408)
  • @Elfsa-Miranda — la exploración del pipeline de investigación de alpha vinculado a evidencia (#405/#416, posteriormente reencauzado en #442)
  • @Hinotoi-agent — rechazo de CSRF en loopback (#293) y solicitudes remotas autenticadas de la UI del mismo origen (#304)
  • @dpersek — timeout configurable de respuesta en IM (#413) y la corrección de redirect en el preflight del proveedor (#404)
  • @digger-yu — comandos setup/dev multiplataforma (#292) y comprobaciones previas de dependencias de desarrollo (#349)
  • @skloxo — expansión de tilde + fallback de seguridad de file-roots (#299) y localización reactiva zh-CN (#301)
  • @kadaliao — el tutorial para principiantes (#393) y las tarjetas sociales de Alpha Library (#396)
  • @morluto — preservación del primer mensaje en el resume de CLI (#448) y el modelo por defecto de Codex OAuth (#446)
  • @yxhuang — el proveedor Kimi for Coding (#435) y el diagnóstico preciso de #433 detrás de la reversión del governance-stack
  • @isaveall — la corrección del directorio de artifacts de validation.json (#429) y errores más claros en --swarm-run (#428)
  • @mustafakamal88 — timestamps UTC con conciencia de zona horaria (#397)
  • @irfanallana-oss — la protección contra órdenes de tamaño cero en trading_place_order (#417)
  • @Shizoqua — la protección central de invariante OHLC en el loader (#274)
  • @hobostay — endurecimiento de la protección SSRF para rangos CGNAT/mesh + la corrección del redirect de medios de QQ (#389)
  • @aeonframework — elevación de las versiones mínimas de Pillow / langchain por CVE (#390)
  • @hannibal-lee — la corrección de la restricción de versión de pandas (#329)
  • @MarkfuGod — conteos dinámicos de fuentes de datos + microcompaction controlada por tokens (#296)
  • @gyx09212214-prog — salidas con validación estricta de JSON (#306)
  • @LemonCANDY42 — la librería de informes de backtest (#224)
  • @fanfpy — serialización Decimal→float de Longbridge (#459)
  • @asahikiko — sincronización del conteo de capacidades en el SKILL.md empaquetado + el test de protección del manifest (#461)
  • @wison1717-maker — el diálogo de segunda confirmación del mandato + toasts de error unificados (#453)
  • @imsankz — mapeos de proveedor de opencode (#444)
  • @flash1234pku — la corrección del code-fence de referencia de tushare (#449)
  • @Penn-Live — el reporte del crash de iteración de rutas al iniciar Docker (#450)
  • @warren618 / Haozhe Wu — la capa de factores fundamentales (paneles SEC PIT-safe), el track premium de QVeris, el runtime del canal IM, la revisión de la integración de renta variable india, los fallbacks de búsqueda en CN, e integración de releases
Contribuidores del ciclo v0.1.10
  • @Hinotoi-agent — una ola de endurecimiento de seguridad: autenticación para el shutdown local (#241), rechazo de rebinding del host loopback (#242), opt-in de la herramienta de shell del agente (#243), autenticación en la escritura de settings (#245), contención del proposal-id del mandato (#256), validación de tipos en la memoria persistente (#257), y contención del run-id de swarm en MCP (#258)
  • @mvanhorn — la caché local de datos opcional (#177), el round-trip del thoughtSignature de Gemini sobre tool calls compatibles con OpenAI (#176), la guía de loaders de datos personalizados (#194), y el alias de proveedor glm/zhipu + inferencia del nombre de modelo (#247)
  • @gyx09212214-prog — robustez del loader ante variables de entorno de timeout malformadas de crypto/RSSHub (#227, #240), inclusión de la fecha final solicitada en yfinance (#226), JSON estricto de run-card para métricas no finitas (#238), y cobertura de retry-fallback en ddgs (#239)
  • @BillDin — estado de los agentes swarm en la UI de chat (#188), manejo explícito del nombre del preset (#189), la herramienta de datos de mercado respaldada por loader para los workers de swarm (#199), y continuaciones de contexto de preset (#200)
  • @Robin1987China — el puente goal-hypothesis de Research Autopilot (#260), el loader de datos local CSV/Parquet/DuckDB (#252), y una corrección de assistant-prefill + User-Agent configurable de Kimi (#248)
  • @LemonCANDY42 — el panel de estado del runtime de solo lectura (#210), artefactos persistidos de uso de AgentLoop (#223), y payloads de gráficos de Run Detail opcionales (#225)
  • @zwrong — la revisión de trace.jsonl con truncamiento cero + offload (#206) y el session-id al salir + resume <session-id> (#218)
  • @forge-builder — la guía de contribución para IA (#173) y la documentación de smoke-tests solo de investigación de OpenClaw MCP (#165)
  • @skloxo — localización del frontend al chino (zh-CN) (adoptada de #217)
  • @LeeCQiang — docstrings en chino para los 452 factores de Alpha Zoo (#180)
  • @KaiLuettmann — publicación de imágenes preconstruidas en GHCR con cada release (#187)
  • @ngoanpv — preservación del thought_signature de Gemini a través de la ruta dict de AgentLoop (#184)
  • @ShahNewazKhan — alcanzabilidad de Ollama en el host desde Docker vía host.docker.internal (#196)
  • @sambazhu — sincronización en el frontend de los intentos de chat completados (#236)
  • @bhlt — soporte del formato de código nativo de baostock (#230)
  • @octo-patch — actualización del modelo por defecto a MiniMax M3 (#162)
  • @warren618 / Haozhe Wu — la capa de datos global (8 fuentes + 18 herramientas de datos de solo lectura), los 10 connectors de SDK de broker, el stack completo de alpha-compare, la revisión de fiabilidad de proveedores, el fallback de web_search multi-motor, el Stop responsivo + reconexión SSE, e integración de releases

Disclaimer

Vibe-Trading es software de investigación y trading. No constituye asesoría de inversión, no custodia fondos y no opera ningún centro de ejecución. El trading a través de un canal de broker que tú autorizas explícitamente (por ejemplo, Robinhood Agentic Trading) ocurre únicamente dentro de los límites que tú estableces y que puedes detener en cualquier momento. Esta capacidad de trading a través de broker es experimental y no ha sido verificada por nosotros frente a una cuenta de broker real — utilízala bajo tu propio riesgo. El rendimiento pasado no garantiza resultados futuros.

License

MIT License — see LICENSE


⭐ Si Vibe-Trading ayuda a tu investigación, una estrella ayuda a que más personas la encuentren.


Gracias por visitar Vibe-Trading

visitors