Workbench cuantitativo autohospedado para acciones A
Qué hace este workbench de acciones A, de qué depende y cuáles son las cuatro comprobaciones clave antes de usarlo para screening y backtesting.
Un banco de trabajo cuantitativo autohospedado para acciones A es una página web que filtra el mercado, monitorea una lista de valores, ejecuta backtests y redacta una revisión posterior al cierre, en una máquina que usted controla en lugar de la terminal de un broker. Un proyecto con licencia MIT, tickflow-stock-panel, reúne todas esas funciones detrás de un único puerto y había acumulado aproximadamente 2,800 estrellas en GitHub a agosto de 2026. La lista de funciones es fácil de leer. La capa subyacente determina si alguna de ellas seguirá funcionando el próximo trimestre.
De qué está compuesto un workbench cuantitativo autohospedado para acciones A
La arquitectura es lo bastante breve como para entenderla de memoria. Según el código y la documentación del commit de agosto de 2026, está compuesta por:
- Una página web desarrollada con React y TypeScript.
- Un servicio en Python, FastAPI, con un programador que actualiza los datos mediante un temporizador.
- Un almacén local: archivos Parquet en disco, consultados con DuckDB y procesados con Polars.
- Un motor de backtesting, vectorbt, conectado a esos archivos.
- Un SDK del proveedor que obtiene cada precio que muestra el panel.
Observe lo que falta. Ningún componente de esa arquitectura se conecta a una bolsa. El panel calcula; el proveedor suministra. “Autohospedado” describe dónde se ejecuta el código, pero no dice nada sobre el origen de los datos. La propiedad de las barras de precios sin procesar corresponde a la capa inferior, un lago local de datos de mercado de acciones A, y es lo que permite sustituir todos los componentes superiores.
Qué cubre el nivel gratuito de la fuente de datos
Una variable de entorno determina lo que el panel puede mostrar. Si se deja vacía la clave del proveedor, el proyecto funciona en lo que su documentación denomina modo None: barras diarias históricas de un endpoint gratuito, con los datos de la sesión actual disponibles entre una y dos horas después del cierre. Al introducir la clave, el acceso se habilita según el nivel contratado. Es un nivel gratuito útil para trabajar con datos de cierre, pero insuficiente para cualquier uso intradía, bajo condiciones que el proveedor puede modificar en cada renovación.
El mantenedor explica directamente las condiciones:
Este proyecto es únicamente para aprendizaje e investigación cuantitativa y no constituye asesoramiento de inversión. Los resultados del backtest no representan rendimientos futuros.
Este es un proyecto personal de código abierto basado en la fuente de datos TickFlow; no es un proyecto oficial de TickFlow.
README, shy3130/tickflow-stock-panel, consultado el 13 de agosto de 2026
En otras palabras, el proyecto está destinado al estudio y la investigación cuantitativa, «no constituye asesoramiento de inversión», los resultados del backtest no representan rendimientos futuros y es «un proyecto personal de código abierto, no un producto oficial de TickFlow». Esa es la lección más importante de todo este tipo de proyectos. Zero-ops elimina de tu mesa el trabajo operativo. Pero deja intacta la dependencia: alquilas los datos a una empresa que nunca aceptó dar soporte a este panel. El README también limita el uso al estudio y la investigación, mientras que el archivo de licencia es MIT.
Por qué fijar un commit SHA en lugar de un número de versión
Un commit SHA es la huella de 40 caracteres que git asigna a cada cambio guardado. Identifica de forma permanente un estado exacto del código.
Al consultar el repositorio el 13 de agosto de 2026, no había nada en su página de GitHub Releases. Sí tenía 31 tags de versión, de v0.1.31 a v0.1.88, con saltos en la numeración y sin notas adjuntas. El tag más reciente apuntaba a un commit fechado el 31 de julio de 2026, mientras que la rama predeterminada ya incluía trabajo del 6 de agosto de 2026. Un tag rezagado respecto de la rama y sin notas no puede decirte qué estás obteniendo.
Por eso, anota el SHA. El head de la rama predeterminada el 6 de agosto de 2026 era ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33. Haz checkout de ese commit y regístralo junto con cualquier conclusión que extraigas de los backtests. Seis semanas después, decir «ejecuté la versión más reciente» no describe nada.
El inicio documentado consta de dos líneas: copia el archivo de entorno de ejemplo a .env y luego ejecuta docker compose up --build, que sirve el panel en el puerto 3018. Esas son las instrucciones del mantenedor para ese commit, no un procedimiento probado; la compilación descarga imágenes y requiere acceso a la red, algo que esta página no ha comprobado. La ruta de desarrollo (./dev.sh o .\dev.ps1 en Windows) requiere Python 3.11 o posterior, Node 20 o posterior, y los gestores de paquetes uv y pnpm.
Qué envía la función de estrategias con LLM y adónde
La generación de estrategias, los comentarios sobre acciones individuales y el informe de revisión son opcionales. Deje AI_API_KEY en blanco y toda la interfaz permanecerá inactiva. Si lo completa, también configurará AI_PROVIDER (un endpoint compatible con OpenAI u Ollama), AI_BASE_URL, AI_MODEL y AI_DAILY_TOKEN_BUDGET. Este último detiene las llamadas cuando se agota la asignación diaria de tokens.
La dirección de envío es importante. El prompt y cualquier contexto que el panel adjunte salen de su equipo hacia el endpoint configurado. Si apunta la URL base a una API alojada, la solicitud se envía a esa empresa. Si apunta a un runtime en su propia red, los datos permanecen allí. Alojar el panel por cuenta propia no significa alojar el modelo por cuenta propia. Las claves se guardan en texto plano en .env, en la raíz del proyecto, y también pueden editarse desde la página de configuración, protegida por una contraseña del dashboard de al menos seis caracteres. Nuestra nota sobre factores alfa generados por LLM explica en qué aspectos suelen fallar las estrategias escritas por máquinas.
¿El backtester modela los costos de operación?
El backtester anuncia que contempla la liquidación T+1, las comisiones, el slippage y los stop-losses. Que esas opciones existan no significa que estén configuradas. Un backtest que ejecuta al precio de cierre publicado y fija los costos en cero supone que operar es gratis. No lo es. Un punto base equivale a una centésima de un punto porcentual. El panel siguiente mide la brecha promedio entre la mejor oferta de compra y la mejor oferta de venta, en puntos base, para seis listings de Estados Unidos durante una hora del mediodía del 17 de junio de 2026.
El SQL exacto detrás de cada cifra
SELECT
ticker AS symbol,
round(avg(toFloat64(ask_price) - toFloat64(bid_price))
/ avg((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, 2) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
AND sip_timestamp >= toDateTime('2026-06-17 15:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-17 16:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_bpsEl nombre con el spread más estrecho del panel, SPY, mostró un promedio de 0.29 puntos base durante esa hora. El más amplio, F, mostró 6.98 puntos base. Cruzar esa brecha dos veces —una para entrar y otra para salir— cuesta aproximadamente el doble de la cifra mostrada, antes de las comisiones.
El momento de la operación importa tanto como el activo elegido. El panel siguiente toma uno de esos listings y mide cuánto se movió su precio dentro de un solo minuto, con promedios agrupados en intervalos de media hora durante el mismo día.
El SQL exacto detrás de cada cifra
SELECT
formatDateTime(
toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
'%H:%i') AS et_time,
round(avg((toFloat64(high) - toFloat64(low)) / toFloat64(close)) * 10000, 1) AS range_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND window_start >= toDateTime('2026-06-17 12:00:00', 'UTC')
AND window_start < toDateTime('2026-06-17 21:00:00', 'UTC')
AND volume > 0
AND close > 0
GROUP BY et_time
ORDER BY et_timeEl panel comienza en 08:00, antes de la sesión regular, cuando la vela promedio de un minuto registró un recorrido de 0 puntos base: los minutos con operaciones se mantuvieron en un solo precio. El último intervalo, 16:30, corresponde al periodo posterior al cierre y promedió 4.2 puntos base. Un backtest elige un punto dentro de cada uno de esos rangos y lo considera el precio de ejecución. Conviene leer la curva, no solo los extremos: el mismo supuesto resulta favorable en algunas horas y desfavorable en otras. Las reglas aplicables a las acciones A añaden sus propias restricciones, porque T+1 impide vender en la siguiente sesión las acciones compradas hoy, y los límites diarios de precio pueden eliminar por completo una salida modelada. Nuestro recorrido por un backtest reproducible muestra qué debe registrar una configuración defendible, y el sesgo de anticipación explica la otra forma en que una curva aparentemente limpia puede equivocarse.
Ajustado o no ajustado: la cuestión de la procedencia
Las acciones corporativas son una fuente de señales engañosas en un screener. Una acción que se divide diez por uno registra una caída del 90% ese día, aunque nadie pierda un centavo. El panel de abajo muestra los doce mayores splits forward en cotizaciones de EE. UU. entre el 1 de enero y el 13 de agosto de 2026.
El SQL exacto detrás de cada cifra
SELECT
ticker AS symbol,
formatDateTime(execution_date, '%b %e, %Y') AS effective_on,
round(any(toFloat64(split_to)) / any(toFloat64(split_from)), 2) AS shares_after_per_share
FROM global_markets.stocks_splits
WHERE execution_date >= toDate('2026-01-01')
AND execution_date <= toDate('2026-08-13')
AND split_from > 0
AND split_to > split_from
AND ticker NOT IN ('SPCX')
GROUP BY ticker, execution_date
ORDER BY shares_after_per_share DESC, execution_date DESC
LIMIT 12El mayor convierte una acción en 10000, con efecto desde Feb 10, 2026. Los ratios de ese tamaño no son el four-for-one habitual; un feed de acciones corporativas incluye todo el rango en una sola columna. El menor de los doce todavía convierte una acción en 20, suficiente para que un gráfico no ajustado parezca mostrar un desplome. Un screener de momentum que lee los precios sin procesar marca cada uno como un crash. Los feeds chinos presentan el mismo problema con su propia terminología y ofrecen tres variantes de cada serie: no ajustada, ajustada hacia adelante y ajustada hacia atrás. Verifica cuál cargó tu panel. Historial de precios ajustado por splits explica los cálculos.
Qué revisar antes de alojar por tu cuenta algo similar
- Procedencia de los datos. Qué proveedor los ofrece, bajo qué licencia y si el nivel gratuito cubre el uso que tienes previsto.
- Gestión de claves. Dónde se almacenan las API keys en el disco, quién puede acceder a la página de configuración y si la máquina está expuesta fuera de tu propia red.
- Modelado de costos. Si el backtester incorpora comisiones, slippage y las reglas propias del mercado, y qué valores tienen esos campos cuando los dejas sin modificar.
- Ruta de actualización. El commit exacto que implementaste, registrado junto con tus resultados para poder reproducirlos meses después.
Preguntas frecuentes
¿Es gratuito ejecutar un entorno cuantitativo autogestionado para acciones A?
El código tiene licencia MIT y es gratuito. Los datos son otra cuestión: si se deja vacía la clave del proveedor, el proyecto recurre a barras diarias históricas gratuitas, y los datos de la sesión actual llegan entre una y dos horas después del cierre. Cualquier acceso más rápido o profundo requiere los planes de pago del proveedor.
¿Qué significa exactamente «autogestionado» en este caso?
La página web, el programador, los archivos almacenados y el backtester se ejecutan en tu propia máquina o servidor, sin una cuenta en la plataforma de otra empresa. Esto no significa que los datos sean tuyos. Las funciones opcionales de IA también permanecen remotas, salvo que las conectes a un modelo de tu propia red.
¿La función de LLM envía mis datos a un tercero?
Cuando está activada, sí, al endpoint compatible con OpenAI que configures. La función viene desactivada: si la clave de IA está vacía, no sale nada de la máquina.
¿Por qué fijar un commit SHA en lugar de una etiqueta de versión?
Al 13 de agosto de 2026, este repositorio no tenía releases publicadas ni notas de versión, y su etiqueta más reciente apuntaba a código más antiguo que la rama predeterminada. En ese contexto, «Latest» significa lo que tuviera la rama el día en que la clonaste, mientras que un commit SHA es exacto. La misma disciplina se aplica en general al material de trading cuantitativo open source: fija la versión exacta que ejecutaste.
Notas de verificación
Todos los detalles de arquitectura y configuración anteriores se obtuvieron del repositorio público el 13 de agosto de 2026, en el commit ecfddb451e97f6fc9a7e43ac33e4ef0e69933b33, que era el HEAD de la rama predeterminada y estaba fechado el 6 de agosto de 2026. La página de Releases no contenía entradas. La lista de etiquetas incluía 31 etiquetas de versión, desde v0.1.31 hasta v0.1.88; la más reciente apuntaba a un commit fechado el 31 de julio de 2026. Las líneas citadas son del propio mantenedor y se copiaron del README, sin parafrasearlas. El comando para iniciar el contenedor también se cita del README y no se ejecutó aquí.
Los paneles de mercado muestran valores cotizados en Estados Unidos y están fijados a fechas pasadas concretas para que las cifras no cambien. Su objetivo es demostrar dos comprobaciones aplicables a cualquier mercado: el costo de ejecución y el ajuste por acciones corporativas. No pretenden describir el mercado chino.
Cada panel incluye la consulta SQL que lo generó, disponible para expandir debajo. Para ejecutar la misma comprobación de spread en tu propia lista de nombres antes de conectarla a un screener, solicítala en inglés sencillo en la terminal de Strasmore.