La reflexión de Vibe Trading: ¿Cuándo usar IA y cuándo no?
Recientemente ha surgido un concepto llamado Vibe Trading — describir intenciones de trading en lenguaje natural y dejar que la IA ejecute por ti. Di algo como "estrategia conservadora, priorizar activos de baja volatilidad", y la IA automáticamente configura la cartera. Suena bonito.
Pero antes de hablar de Vibe Trading, quiero contar algo que ocurrió recientemente, que explica mejor que cualquier teoría "dónde debería usarse la IA".
El 31 de marzo, Claude Code de Anthropic expuso accidentalmente su código fuente durante una actualización de npm — aproximadamente 512,000 líneas de TypeScript (nota: es el total de código empaquetado, incluyendo dependencias y código generado). Rápidamente se extendió el análisis inverso en la comunidad, y desarrolladores de todo el mundo revisaban el código buscando nuevas funciones.
Pero lo que más me sorprendió no tiene nada que ver con la IA. Este hallazgo en sí tampoco tiene relación con el trading, pero la filosofía de ingeniería detrás debería resonar con quienes hacen cuantitativos.
En un módulo marcado por el analista como userPromptKeywords, había una expresión regular para hacer coincidir groserías como mierda, qué carajo, está jodidamente roto — para detectar rápidamente si el usuario está insultando.
La empresa más puntera del mundo en modelos de lenguaje grandes usa expresiones regulares para detectar emociones.
No está llamando a Claude para hacer análisis de sentimiento. No está entrenando un clasificador. Es una coincidencia de cadenas que se ejecuta en microsegundos.
¿Por qué?
I. ¿Por qué Anthropic no usa su propia IA?
No es pereza. Es una decisión de ingeniería meditada.
Claude Code maneja cientos de miles de interacciones de usuario al día. En cada interacción debe determinar "si el usuario expresa frustración" para ajustar la estrategia de respuesta. Si en cada caso se invoca al LLM para hacer ese juicio:
- Latencia: una inferencia del LLM tarda al menos cientos de milisegundos; la coincidencia de regex toma microsegundos.
- Costo: las llamadas al LLM se cobran por token; el regex es prácticamente gratuito.
- Determinismo: el regex coincide o no coincide, resultado 100% seguro; la salida del LLM no es determinista, la misma entrada puede dar diferentes juicios.
Así que la elección de Anthropic es: usar regex para un filtrado rápido (bajo umbral, rápido, determinista) y reservar la potencia del LLM para las decisiones que realmente requieren comprensión semántica.
Esto no es un detalle técnico. Es una filosofía de arquitectura: no todos los problemas merecen ser resueltos con IA.
Quienes hacen cuantitativos deberían sentir especial afinidad con esta frase.
II. La misma disyuntiva en el trading cuantitativo
En tu estrategia hay dos tipos de decisiones:
Decisiones deterministas — deben usar "reglas"
Cualquiera que haya escrito estrategias en FMZ sabe que la lógica central del trading suele ser unas pocas líneas de código determinista:
javascript
// Señal de cruce de medias móviles — Ejemplo en JavaScript de FMZ
var records = exchange.GetRecords(PERIOD_D1)
var ma5 = TA.MA(records, 5)
var ma20 = TA.MA(records, 20)
var idx = records.length - 1
// Cruce dorado: abrir largo
if (ma5[idx] > ma20[idx] && ma5[idx-1] <= ma20[idx-1]) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 1)
Log("Cruce dorado de medias, abrir largo")
}
Condiciones claras, resultados deterministas, no requiere "entender" semántica. Se escribe con if-else, 100% fiable, ejecución en milisegundos.
Similar a la idea de Anthropic usando regex para detectar emociones — problemas deterministas, herramientas deterministas. Claro, regex es coincidencia de cadenas, las medias móviles son cálculos matemáticos, herramientas diferentes, pero cumplen roles análogos en sus respectivos sistemas: son juicios deterministas que no necesitan intervención de IA.
El stop-loss, confiarlo a if-else tiene una fiabilidad del 100%; confiarlo a la IA tiene una fiabilidad de "alta probabilidad". Tu cuenta no puede permitirse esa pequeña probabilidad.
Decisiones de juicio difuso — se debe usar IA
Pero algunas decisiones no se pueden escribir con if-else:
- Análisis de sentimiento de noticias: Ha salido el comunicado de la Fed, ¿es halcón o paloma? "Mantener la tasa actual sin cambios, pero el comité seguirá de cerca los cambios en los datos" — ¿es alcista o bajista? Las medias móviles no pueden decirlo, y el regex tampoco puede hacer ese juicio.
- Detección de anomalías: El volumen de discusión en redes sociales de una altcoin se dispara un 800% en 3 horas, pero el precio no se mueve. ¿Es "acumulación de dinero inteligente" o "alguien está creando expectativas antes de tirar del precio"? Se necesita combinar información multidimensional para un juicio difuso.
- Generación de estrategias: Tienes una intuición — "después de esta formación suele haber un subidón". Pero no puedes especificar las condiciones exactas. Puedes describir esa intuición a un LLM y que te ayude a convertirla en un factor cuantitativo que pueda ser backtesteado.
Estos escenarios comparten: la entrada es no estructurada, el criterio de juicio es difuso, se necesita "comprensión" y no solo "coincidencia".
III. Un enfoque en capas que se puede tomar como referencia
Volviendo a la arquitectura de Claude Code. El análisis comunitario reveló una clara separación en capas:
| Capa | Mecanismo en Claude Code | Correspondiente en trading cuantitativo |
|---|---|---|
| Capa de filtrado rápido | Expresiones regulares, coincidencia de palabras clave | Cruce de medias, stop-loss por umbral, límites de posición |
| Capa de infraestructura de ingeniería | Gestión de procesos, paso de mensajes, control de permisos | API de exchange, gestión de órdenes, motor de riesgo |
| Capa de decisión semántica | LLM prompt | Análisis de sentimiento de noticias, reconocimiento de patrones anómalos, exploración de estrategias |
Por supuesto, Claude Code y el trading cuantitativo son campos completamente diferentes, la correspondencia aquí no es un mapeo exacto. Pero la resonancia filosófica de diseño es real — elegir la herramienta más adecuada en cada capa, no un martillo para todos los clavos.
La comunidad de código abierto también está practicando ideas similares. TradingAgents es un marco de trading cuantitativo multiagente reciente digno de atención (construido sobre LangGraph, con un artículo académico adjunto). Simula la estructura de equipo de una empresa de trading real: analistas técnicos se encargan de velas e indicadores, analistas de sentimiento interpretan noticias y opiniones, y diferentes estilos de traders sintetizan las opiniones para la decisión final. No es una IA todopoderosa que lo hace todo, sino diferentes roles que cumplen sus funciones.
Cabe destacar que TradingAgents es un marco de investigación que resuelve "cómo la IA toma decisiones de trading". Pero en trading real, también necesitas la otra mitad: conexión con exchanges, gestión de órdenes, ejecución de riesgos, registro y auditoría — esas tareas de infraestructura de ingeniería son precisamente lo que plataformas cuantitativas como FMZ ya han hecho por ti.
IV. Cómo aterrizar Vibe Trading: un ejemplo de arquitectura en capas
Volviendo al Vibe Trading del principio. La dirección es correcta, pero la premisa es que las capas estén claras.
Supón que hoy se produce un cruce dorado de medias en BTC, pero las noticias son todas negativas regulatorias. ¿Qué haces? Si solo miras las medias, deberías abrir largo; si solo escuchas las noticias, no te atreves. Este es el escenario típico que requiere capas.
En FMZ, una arquitectura simplificada en capas podría implementarse así (nota: el siguiente es un ejemplo simplificado; para trading real, completa la configuración de contratos y la gestión de riesgos por tu cuenta):
javascript
/*
Parámetros de la estrategia (añadir en la pestaña "Parámetros" de la página de edición de estrategias de FMZ):
OPENROUTER_API_KEY: tipo cadena, introduce tu clave API de OpenRouter
AI_MODEL: tipo cadena, valor por defecto "google/gemini-2.5-flash", se puede cambiar por otro modelo
*/
// Capa de decisión semántica: llamada a la API de OpenRouter para obtener el sentimiento del mercado mediante IA
function getAISentiment() {
var prompt = "Analiza las noticias actuales del mercado de criptomonedas, da una puntuación de sentimiento (de -1 a 1, -1 pánico extremo, 1 codicia extrema), devuelve solo un número"
var response = HttpQuery("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
body: JSON.stringify({
model: AI_MODEL,
messages: [{role: "user", content: prompt}],
temperature: 0
}),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + OPENROUTER_API_KEY
},
timeout: 15000
})
var score = parseFloat(JSON.parse(response).choices[0].message.content)
// Cuando la IA devuelve un valor anómalo, se retrocede a un valor neutro: la fiabilidad del sistema no depende de cada salida correcta de la IA
if (isNaN(score) || score < -1 || score > 1) {
Log("Formato anómalo en la respuesta de la IA, usando valor por defecto 0")
score = 0
}
Log("Puntuación de sentimiento de IA:", score)
return score
}
function main() {
var lastSignalTime = 0 // Registra el tiempo de la vela de la última señal emitida, para evitar repeticiones en la misma vela
while (true) {
var records = exchange.GetRecords(PERIOD_D1)
if (!records || records.length < 20) { Sleep(1000); continue }
var ma5 = TA.MA(records, 5)
var ma20 = TA.MA(records, 20)
var idx = records.length - 1
var curTime = records[idx].Time
var isBullCross = ma5[idx] > ma20[idx] && ma5[idx-1] <= ma20[idx-1]
var isBearCross = ma5[idx] < ma20[idx] && ma5[idx-1] >= ma20[idx-1]
// Consultar estado de la posición
var pos = exchange.GetPosition()
var hasPosition = pos && pos.length > 0
// Primera capa: la señal determinista actúa como "umbral". Si se cumple cruce dorado + sin posición + no procesado en esta vela, entonces consultar a la IA
if (isBullCross && !hasPosition && curTime !== lastSignalTime) {
lastSignalTime = curTime
var sentiment = getAISentiment()
// Segunda capa: el sentimiento de la IA actúa como "referencia", afecta el tamaño de la posición pero no desencadena operaciones por sí solo
if (sentiment > 0.2) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 1)
Log("Cruce dorado + IA alcista, abrir a plena posición")
} else if (sentiment > -0.3) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 0.5)
Log("Cruce dorado + IA neutral, abrir media posición")
} else {
Log("Cruce dorado pero IA bajista, saltar esta señal")
}
}
// Cierre por cruce de muerte: regla determinista, no pasa por la IA
if (isBearCross && hasPosition) {
exchange.SetDirection("closebuy")
exchange.Sell(records[idx].Close, pos[0].Amount)
Log("Cruce de muerte de medias móviles, cerrar posición")
}
// Tercera capa: el stop loss es una "ley inquebrantable", no pasa por la IA
if (hasPosition) {
var curPrice = records[idx].Close
var entryPrice = pos[0].Price
if (curPrice < entryPrice * 0.97) { // Caída del 3% respecto al precio de apertura
exchange.SetDirection("closebuy")
exchange.Sell(curPrice, pos[0].Amount)
Log("Stop loss activado, cierre incondicional, pérdida de", ((curPrice/entryPrice - 1)*100).toFixed(2), "%")
}
}
Sleep(60 * 1000)
}
}
La lógica principal de este código merece un análisis detallado:
1. El cruce dorado de medias móviles es el "umbral". Solo cuando se activa una señal determinista se consulta a la IA. No se pregunta al modelo en cada vela, lo que ahorra costes (las API de modelos grandes se cobran por token) y evita ruido. Esto concuerda con el enfoque de Anthropic: primero filtrar con reglas, y solo cuando coinciden se activa el procesamiento más pesado.
2. El sentimiento de la IA es una "referencia". Influye en el tamaño de la posición y en si se salta la señal, pero no desencadena operaciones por sí solo. Observa cómo en el código se maneja el caso anómalo del valor devuelto por la IA: si el modelo devuelve un contenido no interpretable, se retrocede directamente al valor neutro 0. La fiabilidad del sistema no debe depender de cada salida correcta de la IA.
3. El stop loss es una "ley inquebrantable". Si la cotización cae un 3% respecto al precio de apertura, se cierra la posición incondicionalmente, sin preguntar a la IA. La IA podría decir "a largo plazo es alcista", pero tu cuenta no puede esperar al largo plazo. Aquí se utiliza un stop loss duro basado en porcentaje del precio, sin pasar por ningún juicio difuso.
Esta es la forma correcta de utilizar Vibe Trading: usa lenguaje natural para ayudar a la IA a "percibir" el ambiente del mercado, y usa código determinista para "ejecutar" las acciones de trading. La frontera entre ambos no debe difuminarse.
Consejo práctico: en el sistema de backtesting de FMZ, ejecuta primero la estrategia pura de medias móviles como línea base, luego añade la capa de sentimiento de IA, y compara rentabilidad y drawdown. Si al añadir la IA el rendimiento empeora, significa que la separación de capas es incorrecta: quizás la IA está interviniendo donde no debe. Registra cada resultado devuelto por la IA con Log() para poder revisar cada decisión posteriormente.
V. Llévate una frase
Las empresas de IA más avanzadas usan expresiones regulares para detectar emociones, no porque no puedan construir una mejor IA.
Es porque saben que: elegir la herramienta adecuada es más importante que elegir la herramienta más potente.
La estrategia de medias móviles no es sexy, las expresiones regulares no son avanzadas. Pero en su propio ámbito, son más fiables que cualquier IA.
Por el contrario, cuando necesitas extraer la opinión "¿esto es alcista o bajista para BTC?" de un informe macroeconómico de 5000 palabras, las medias móviles no te ayudan, ni las expresiones regulares. Ahí es donde la IA debe entrar.
No es cuestión de "usar o no usar IA", sino de "en qué capa usarla".
Ese archivo de expresión regular aparentemente insignificante en el código fuente de Claude Code nos responde a una pregunta que a menudo se pasa por alto. Y FMZ te proporciona una infraestructura por capas ya preparada: las interfaces de exchange, el cálculo de indicadores, la gestión en vivo, la auditoría de logs, todo está hecho. Solo necesitas tener claro: qué decisiones delegar a TA.MA() y cuáles a la IA.
Referencias:
Alex Kim - The Claude Code Source Leak — Análisis de detección de frustración con expresiones regulares
FMZ - Building an AI-Powered Automated Trading System — Arquitectura de cerebro AI + manos FMZ
TradingAgents - Multi-Agents LLM Financial Trading Framework — Framework de código abierto de trading cuantitativo con múltiples agentes
Paper de TradingAgents — Investigación académica sobre framework de trading financiero con múltiples agentes
VentureBeat - Claude Code Source Code Leak
- 1


