Análisis de acciones
Esta habilidad produce el mismo informe cada vez:
- una tabla de resumen
- un panel por ticker, que contiene:
- hechos
- un gráfico semanal contra el máximo de 52 semanas
- rendimientos
- los impulsores de la caída
- los casos alcista y bajista
- tenencias, brechas de datos y el registro de cálculos
Los scripts hacen toda la aritmética y el HTML. Tu trabajo es la investigación y la verificación. No rediseñes la página ni escribas HTML a mano.
SKILL_DIR es la carpeta que contiene este archivo. Encuéntrala una vez con dirname en la ruta de este SKILL.md.
Archivos
| Ruta | Propósito |
|---|---|
scripts/compute_drawdown.py | CSV diario → máximo y mínimo de 52 semanas, % de caída, rendimientos, cierres semanales |
scripts/verify.py | Re-deriva cada número destacado de los CSV, verifica campos y fuentes, escribe verified.json, sale con 1 ante cualquier problema |
scripts/build_report.py | Worker JSON + verified.json → una página HTML autocontenida (usa assets/report.css) |
scripts/build_email.py | mismos números verificados → correo listo para enviar drawdown_report.eml (HTML seguro + texto plano, informe adjunto); valida la dirección |
scripts/send_email.py | para que el usuario ejecute en su propia computadora: envía el .eml por SMTP con un aviso de confirmación y una contraseña de aplicación ingresada localmente |
defaults.json | la lista de seguimiento predeterminada usada cuando el usuario no nombra tickers (editable por el usuario) |
references/worker_brief.md | el resumen que sigue cada trabajador (rellena los marcadores {…}) |
references/schema.md | el contrato <TICKER>.json |
examples/run-2026-10-16/ | una ejecución de referencia completa (FTEC, QQQ, SMH, ARTY): cuatro JSON de trabajadores y el report.html terminado. Úsalo como referencia de profundidad, tono y estilo de citación. |
Flujo de trabajo
1. Configuración
- Lee la lista de tickers de la solicitud del usuario.
- Sin tickers nombrados ("ejecuta mi análisis de acciones", "¿cómo está el mercado vs los máximos?"): lee
$SKILL_DIR/defaults.jsony usa sudefault_watchlist, en ese orden. Di en tu primera línea que estás usando la lista predeterminada y enumérala. - Tickers nombrados: usa exactamente esos; no agregues los predeterminados a menos que el usuario lo pida (ej. "los de siempre más NVDA").
- Índices (S&P 500, Dow Jones, Nasdaq Composite…): investiga el nivel del índice en sí mismo, usando el
iddedefaults.json(SPX, DJI) o una etiqueta corta comoCOMPcomo ticker en los nombres de archivo. Indica al trabajador que es un índice (consulta las notas del índice en el resumen).
- Sin tickers nombrados ("ejecuta mi análisis de acciones", "¿cómo está el mercado vs los máximos?"): lee
- Crea una carpeta de trabajo:
WORK_DIR=$PWD/drawdown-<AAAA-MM-DD>. - Crea una lista de tareas con:
- una tarea por ticker
- "Verificar números"
- "Construir y publicar informe"
2. Distribuir
Genera un subagente por ticker, en paralelo y en segundo plano. El mensaje de cada uno es:
- el texto completo de
references/worker_brief.md, - con
{TICKER},{WORK_DIR},{SKILL_DIR}y{TODAY}rellenados, - más cualquier ángulo específico del ticker que valga la pena verificar. Para un fondo de chips, por ejemplo: controles de exportación, gasto de capital de hiperescaladores, ciclo de memoria.
Cuando el usuario nombra solo uno o dos tickers y no ha solicitado subagentes, puedes hacer la investigación tú mismo siguiendo el mismo resumen.
3. Esperar
Cuando un trabajador termina, marca su tarea como completada y publica una línea: el ticker, su % de caída y la fecha de su máximo. No leas las transcripciones de los trabajadores.
4. Verificar
Ejecuta:
python3 $SKILL_DIR/scripts/verify.py --dir $WORK_DIR --tickers <T...>
Si reporta MISMATCH, MISSING o NO SOURCE/TS, corrige el problema antes de construir:
- Errores aritméticos o de copia manual: vuelve a ejecutar
compute_drawdown.pyy corrige el JSON desde<T>_metrics.json. - Investigación faltante: envía al trabajador de vuelta con SendMessage.
UNCITED y NO CROSS-CHECK son advertencias. Menciónalas en tu respuesta si persisten.
5. Construir
Ejecuta:
python3 $SKILL_DIR/scripts/build_report.py --dir $WORK_DIR --tickers <T...> \
--out $WORK_DIR/drawdown_report.html --title "<nombre de 2-4 palabras>" --eyebrow "<ej. Revisión de drawdown de ETFs>"
Elegir el título: escoge un nombre corto y específico, como "Drawdowns de ETFs Tecnológicos" o "Retrocesos de Acciones de Chips". Usa el mismo título para ejecuciones repetidas en la misma canasta.
6. Publicar
Publica el HTML con la herramienta Artifact, usando icon: "chart" y una descripción de una oración que nombre los tickers y la fecha de corte.
- Ejecución repetida en la misma canasta: si el usuario quiere mantener el enlace anterior, vuelve a publicar en la URL de ese artifact.
- No edites el HTML generado. Los cambios a nivel de informe pertenecen a
build_report.pyoassets/report.css.
7. Correo electrónico (solo cuando el usuario proporcionó una dirección)
Omite este paso a menos que el mensaje del usuario incluya una dirección de correo electrónico, ej. "…y envíalo por correo a [email protected]". Si dicen "envíamelo por correo" sin una dirección, pide una; nunca adivines ni reutilices una dirección de otro lugar.
Sin conectores. No uses Gmail, Outlook ni ningún otro conector de correo o automatización de navegador, y nunca pidas ni manejes una contraseña de correo. El envío ocurre del lado del usuario: tú preparas un mensaje listo para enviar, el usuario lo envía.
- Construye el correo.
El código de salida 2 significa que la dirección no es válida: pide al usuario que la corrija. El script escribepython3 $SKILL_DIR/scripts/build_email.py --dir $WORK_DIR --tickers <T...> --to <dirección...> \ --report $WORK_DIR/drawdown_report.html --artifact-url <enlace publicado> --title "<mismo título>"drawdown_report.eml(HTML + texto plano, informe adjunto, destinatarios y asunto completados), además deemail_body.html,email_body.txtyemail.json. - Entrégalo. Envía
drawdown_report.emlcon SendUserFile (mostrarattach). - Dile al usuario cómo enviarlo, en dos o tres líneas:
- Abre el
.emlen Outlook (se abre como borrador) o Apple Mail (Message → Send Again), revísalo y presiona Enviar. - O, desde la Terminal en su propia computadora:
python3 send_email.py drawdown_report.eml --from <su dirección>. El script muestra los destinatarios, pide confirmación y solicita una contraseña de aplicación. Envíascripts/send_email.pytambién si lo piden.
- Abre el
- Privacidad del enlace. El artifact es privado para el usuario. Si el destinatario es otra persona, di que dependerán del informe adjunto a menos que el usuario comparta la página.
8. Responder
Mantén la respuesta breve:
- Una oración que diga qué es la página.
- Una tabla markdown ordenada por caída, con columnas: ticker, último cierre, máximo de 52 semanas (fecha), caída.
- Dos o tres viñetas con los hallazgos principales entre los tickers.
- Una nota breve de "Brechas de datos" que cubra las fallas de herramientas que afectaron la ejecución.
- Si se solicitó un correo: una línea que diga que el
.emlestá listo para enviar y cómo.
No recapitules los pasos.
No negociables
- Cada número proviene de una llamada a herramienta, con su fuente y su marca de tiempo.
- "Sin datos" es mejor que una suposición.
- Todas las matemáticas se hacen en los scripts.
- Solo herramientas de solo lectura. Nunca toques herramientas de órdenes, alertas o listas de seguimiento. Nunca envíes correo tú mismo; el paso 7 solo prepara un mensaje para que el usuario lo envíe.
- Sin recomendación de compra o venta. Presenta ambos casos de manera justa.