SKILL: signal — Señales de Scalping M3/M5 mediante Debate de 2 IAs
1. TRIGGER & MODO
| Trigger | Significado |
|---|---|
signal-<pair> (ej. signal-xauusd, signal-eurusd) | Genera señal de entrada con orden pendiente M3/M5 |
signal-result win / signal-result lose [razón] | El usuario reporta el resultado de la última señal → se guarda en el historial |
<pair>= símbolo MT5 local. Resolver con~/.local/share/mt5-venv/bin/python scripts/mt5_query.py symbols <query>. Si no existe, mostrar los candidatos más cercanos, no inventar.- No preguntar de vuelta si el par es claro. No apresurarse — el debate de 3-5 rondas es normal, la calidad > la velocidad.
2. REGLAS ESTRICTAS DE TRADING (verificadas por el JUEZ, no por los analistas)
- Tipo de orden: solo BUY/SELL LIMIT o STOP (órdenes pendientes en niveles técnicos). La orden de mercado solo se permite si ambos analistas coinciden en que el precio está exactamente en el nivel y esto se escribe explícitamente.
- SL máximo $3 por señal (lote 0.01) — NO 300 puntos rígidos. Conversión automática por par desde el bloque
riskde la salida demt5_query.py scalp:sl_max_points = risk.sl_max_points(XAUUSD ≈ 300 puntos = $3; otros pares distintos automáticamente). La propuesta de SL del analista que exceda esto = RECHAZADA por el juez, se devuelve para corrección. - TP = RR 1:1.5 o 1:2 desde la distancia del SL. Elegir uno, indicar su RR.
- Timeframe de análisis: M3 + M5 (principales) + H1 (dirección general rápida).
- Spread razonable: si el spread > ~20% de la distancia del SL propuesto, el analista debe señalarlo obligatoriamente (la entrada con límite es más segura en condiciones de spread amplio).
3. DATOS (solo MT5 local — SIN web/websearch, para rapidez)
Comando único:
~/.local/share/mt5-venv/bin/python ~/.config/opencode/skills/signal/scripts/mt5_query.py scalp <SYMBOL>
Salida JSON: bid/ask, spread, risk (usd/point, sl_max_points), cambio diario, M3/M5/H1 (ATR14, EMA20/50, tendencia, S/R, rango, vela actual + dirección del cuerpo). Proporcionar esta salida en bruto a AMBOS analistas. Prohibido inventar datos MT5.
Zona horaria: mencionar la hora en WIB + hora del servidor MT5 (UTC+3) entre paréntesis, ej. 21:45 WIB (17:45 servidor). WIB = servidor + 4 horas.
4. APRENDIZAJE DEL HISTORIAL (OBLIGATORIO ANTES DEL DEBATE)
- Antes de la ronda 1, el juez obtiene el historial:
rclone cat gdrive:Linux-Server/signals/track-record.md(si 404/no encontrado = aún vacío, continuar sin historial — informar de ello). - Resumir los patrones de resultados recientes (ej. "las últimas 5 pérdidas fueron todas sell-limit durante tendencia bajista") y PROPORCIONARLO a ambos analistas como contexto de aprendizaje: los patrones ganadores pueden repetirse, los patrones perdedores deben evitarse o el analista debe argumentar por qué esta vez es diferente.
- La señal se guarda en
gdrive:Linux-Server/signals/<YYYYMMDD>-<pair>/signal.mdcon estadoPENDING(ver §7).
5. DEBATE (2 analistas + 1 juez, 3-5 rondas)
Roles y modelos (usar herramienta subagent, agente general, parámetro model explícito):
| Rol | Modelo | Tarea |
|---|---|---|
| Analista 1 — Técnico de Entrada | opencode/step-5-preview-free | Estructura M3/M5, tipo de orden (limit/stop), entrada, SL, TP, momento |
| Analista 2 — Gestor de Riesgo | opencode/nemotron-3.5-lightning-free | Validación SL/TP, R:R, trampas de nivel (stop hunt, spread, sesión), tamaño de posición |
| Juez = agente principal, modelo DE LA SESIÓN ACTUAL (dinámico) | — | Neutral: orquestación, envío de datos, verificación de reglas estrictas (§2), recuento de votos, redacción de salida. PROHIBIDO analizar/opinar sobre la dirección del mercado. El juez = el modelo de IA que ejecuta esta sesión — puede ser de cualquier proveedor; no asumir que siempre es custom/auto. Al redactar la salida, verificar el propio modelo y escribir su nombre real. |
Flujo:
- Ronda 1 (independiente): enviar datos MT5 + resumen del historial a ambos analistas. Cada uno propone: dirección, tipo de orden, entrada, SL (puntos y $), TP (RR), confianza %, motivo.
- Ronda de debate (1-3 rondas): intercambio de mensajes. Se puede solicitar nuevos datos MT5 (llamar
scalpde nuevo — el precio se mueve). Enfocar en diferencias reales de opinión: niveles, tipo de orden, validez del SL. - Posición final: cada uno declara su posición final.
- Votación: ambos analistas de acuerdo → señal válida. Desacuerdo = NO TRADE (salida oficial: no hay señal + motivo breve). Eso es un resultado válido y normal, no forzar.
Modelos de respaldo en caso de límite de tasa (orden Tier 1): opencode/longcat-2.5-preview-free → opencode/space-bunny-free → opencode/cat-jam-free; Tier 2 máximo 1 analista: 9roy/9router_combo; Tier 3: custom/auto ("babu") — solo si el juez NO es custom/auto (un mismo modelo no puede jugar dos roles). No usar 2 analistas del mismo proveedor si hay alternativa. Reintentar error máximo 2 veces; si ambos analistas fallan completamente = informar y detener.
6. PRESUPUESTO
Cálculo simple: 1 llamada de analista = 3, reintento/respaldo = 1, llamada de herramienta del juez = 1. Objetivo total 12-27 (2-3 llamadas de analista × ~3 rondas + herramienta). Escribir en la salida: Presupuesto: X/27 (método: peso-señal). No exceder 27 — el debate de 3-5 rondas es suficiente, más allá detener y redactar salida.
7. SALIDA & ALMACENAMIENTO (rclone, cero archivos locales)
a) Señal (si es válida)
Formato de respuesta al usuario (primero resumen del debate, resultado al final):
- Resumir el debate: propuestas iniciales, puntos clave del debate (incluir citas breves), resultado de la votación + modelos de IA usados por cada rol.
- Luego al FINAL bloque de señal:
🔔 SEÑAL <PAR> — <COMPRA/VENTA> <LÍMITE/STOP>
Entrada: <precio> | SL: <precio> (<X> puntos = $<Y>, máx $3)
TP: <precio> (RR 1:<r>) | Confianza: <Z>%
Motivo: <1-2 frases en lenguaje humano — por qué este nivel y dirección, según el debate>
Válido hasta: <nota de momento/vencimiento, ej. cancelar si el precio ya superó el nivel>
- Guardar mediante
rclone rcat gdrive:Linux-Server/signals/<YYYYMMDD>-<PAR>/signal.mdque contenga: fecha, par, señal completa, argumentos de ambos analistas, votación, modelo, presupuesto, estado:PENDING.
b) No trade (votación diferente / datos no válidos)
Salida: "🚫 NO TRADE — ", guardar en la misma carpeta con estado NO-TRADE.
c) Comando signal-result win|lose [razón]
- Buscar la última señal
PENDING:rclone lsf gdrive:Linux-Server/signals/ --dirs-only | sort | tail→ leer susignal.mdmedianterclone cat. Si no hay ninguna PENDING, preguntar al usuario qué señal quiere reportar (se puede preguntar en este modo). - Actualizar
signal.mden Drive: estado →WIN/LOSE, añadir línea de resultado + razón del usuario + fecha de cierre. - Añadir al historial
gdrive:Linux-Server/signals/track-record.md(crear si no existe) una línea:YYYYMMDD | par | dirección+tipo | entrada | resultado WIN/LOSE | razón del usuario. - Responder al usuario brevemente: resultado registrado + estadísticas del historial en curso (ej.
XAUUSD: 4G-2P, tasa de acierto 67%— calcular desde el historial).
d) Señal caducada
Si el usuario reporta que la señal nunca alcanzó la entrada (el precio pasó/se dio la vuelta), registrar como LOSE con la razón del usuario (ej. "se pasó el momento") — sigue siendo aprendizaje válido.
8. ACCIONES PROHIBIDAS
- Prohibido usar websearch/web fetch — datos solo MT5 local.
- Prohibido inventar precios/ATR/niveles.
- Prohibido dar señales si el spread es extremo o el mercado está cerrado (tick_time desactualizado) — salida NO TRADE.
- Prohibido SL mayor de $3, TP fuera de RR 1:1.5/1:2, orden de mercado sin aprobación de ambos analistas.
- El juez tiene prohibido participar en la evaluación de la dirección del mercado.
- El juez tiene prohibido analizar/opinar — aunque el modelo del juez sea inteligente, su rol es puramente de moderador. El análisis sigue siendo trabajo de los analistas.