Construir una pila de FX de dos agentes: Agente de investigación + Guardián de la ejecución
Autor: el Equipo de FXMacroData
El nombre de la publicación: 21 de mayo de 2026
Los robots de cambio de un solo agente fallan por una simple razón: el mismo modelo que genera ideas también puede aprobarlas. Pago de los trabajadores no agrícolas de los Estados Unidos, un error de razonamiento puede saltar directamente al riesgo de posición.
Esta guía muestra una arquitectura más segura: responsabilidades divididas entre dos agentes. El primer agente hace investigación de mercado y propone configuraciones. El segundo agente es un guardián estricto que solo puede aprobar, cambiar el tamaño o rechazar propuestas basadas en reglas de riesgo duro.
Al final, tendrá un flujo de trabajo práctico para dos agentes. El valor de la moneda de referencia ¿ Qué ? El valor de las pérdidas que admite tanto la integración directa de REST API como la integracion de herramientas basadas en MCP.
Los requisitos previos
- Python 3.10+ y más.
- Una clave de la API de FXMacroData de Gestión de las API- ¿ Qué ?
- Un punto final de LLM para los agentes de investigación y guardias.
- Familiaridad básica con las API JSON y HTTP.
Instalar dependencias:
pip install requests python-dotenv pydantic
Crear un .env archivo:
FXMD_API_KEY=your_fxmacrodata_key
RESEARCH_MODEL=claude-or-hermes
GATEKEEPER_MODEL=claude-or-hermes
MAX_RISK_PCT=0.50
Paso 1: Definir funciones estrictas para ambos agentes
Qué hacer: bloquear las responsabilidades antes de escribir código.
- Agente de investigación: lee el contexto macro + mercado y propone configuraciones candidatas.
- Agente de guardianes: valida sólo las restricciones. No puede inventar nuevos oficios, sólo aprobar / rechazar / redimensionar.
Por qué es importante: Esta separación evita que un modelo único evite los controles de riesgos cuando la confianza es alta pero la evidencia es débil.
Paso 2: extraer contexto estructurado con llamadas REST directas
Qué hacer: Buscar las publicaciones y los datos de spot de FXMacroData para que el agente de investigación obtenga entradas limpias en lugar de titulares no estructurados.
curl "https://fxmacrodata.com/api/v1/calendar/usd?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/announcements/eur/inflation?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/announcements/gbp/unemployment?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/forex?base=EUR"e=USD&api_key=YOUR_API_KEY"
Por qué es importante: campos coherentes y estructurados dan a ambos agentes la misma fuente de verdad y hacen la validación determinista.
Colector de Python mínimo:
import os
import requests
from datetime import datetime, timezone
API = "https://fxmacrodata.com/api/v1"
KEY = os.environ["FXMD_API_KEY"]
def fxmd_get(path, **params):
r = requests.get(
f"{API}{path}",
params={"api_key": KEY, **params},
timeout=25,
)
r.raise_for_status()
return r.json()
def build_market_context():
return {
"asof_utc": datetime.now(timezone.utc).isoformat(),
"calendar_usd": fxmd_get("/calendar/usd").get("data", [])[:8],
"calendar_eur": fxmd_get("/calendar/eur").get("data", [])[:8],
"eur_inflation": fxmd_get("/announcements/eur/inflation").get("data", [])[-1:],
"gbp_unemployment": fxmd_get("/announcements/gbp/unemployment").get("data", [])[-1:],
"eurusd": fxmd_get("/forex", base="EUR", quote="USD").get("data", [])[-48:],
"gbpusd": fxmd_get("/forex", base="GBP", quote="USD").get("data", [])[-48:],
}
Paso 3: Generar candidatos a oficio con el agente de investigación
Qué hacer: Si el agente de investigación no está disponible, no le envíe instrucciones.
{
"pair": "EUR/USD",
"bias": "long|short|flat",
"thesis": "string",
"confidence": 0.0,
"entry_zone": "string",
"invalidation": "string",
"event_risks": ["string"]
}
Por qué es importante: Un esquema fijo permite al portero hacer cumplir reglas en campos predecibles en lugar de tratar de analizar texto de forma libre.
Paso 4: Aplicar las reglas de riesgo duro en el agente de guardianes
Qué hacer: ejecutar a cada candidato a través de un segundo modelo o de la regla de primer validador con límites estrictos.
Ejemplo de política:
- El riesgo máximo por operación: 0,50% del capital.
- No hay nuevas transacciones dentro de los 15 minutos de las liberaciones de alto impacto de la calendario de liberación- ¿ Qué ?
- Nivel de invalidación obligatorio.
- Se rechazará si la confianza es < 0,60.
Puerta de acceso y salida de decisión:
from pydantic import BaseModel, Field
class Candidate(BaseModel):
pair: str
bias: str
thesis: str
confidence: float = Field(ge=0.0, le=1.0)
entry_zone: str
invalidation: str
event_risks: list[str]
class GateDecision(BaseModel):
status: str # approve, resize, reject
approved_size_pct: float
reason: str
def gate(candidate: Candidate, max_risk_pct: float = 0.50) -> GateDecision:
if candidate.confidence < 0.60:
return GateDecision(status="reject", approved_size_pct=0.0, reason="Low confidence")
if not candidate.invalidation.strip():
return GateDecision(status="reject", approved_size_pct=0.0, reason="Missing invalidation")
proposed = 0.50 if candidate.confidence >= 0.75 else 0.30
size = min(proposed, max_risk_pct)
return GateDecision(status="approve", approved_size_pct=size, reason="Within policy")
Por qué es importante: Incluso si el agente de investigación tiene una mala lectura, el guardián todavía puede bloquear las configuraciones de gran tamaño o débiles.
Paso 5: Añadir ruta de integración MCP (flujo de trabajo de agente nativo de la herramienta)
Qué hacer: exponer FXMacroData a través de MCP para que los marcos de agentes puedan llamar herramientas de forma nativa en lugar de construir pegamento REST personalizado para cada bot.
Empieza un servidor MCP basado en Python a través de uvxEl artículo 2
uvx fxmacrodata-mcp --transport http --server-url https://fxmacrodata.com/mcp
Ejemplo de configuración del cliente:
{
"mcpServers": {
"fxmacrodata": {
"command": "uvx",
"args": [
"fxmacrodata-mcp",
"--transport",
"http",
"--server-url",
"https://fxmacrodata.com/mcp"
]
}
}
}
Ejemplo de esquema de llamada de herramientas MCP para su agente de investigación:
{
"name": "get_fx_calendar_and_spot",
"description": "Get upcoming macro events and current spot context for selected pairs",
"input_schema": {
"type": "object",
"properties": {
"currencies": {
"type": "array",
"items": { "type": "string" }
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"base": { "type": "string" },
"quote": { "type": "string" }
},
"required": ["base", "quote"]
}
}
},
"required": ["currencies", "pairs"]
}
}
Ejemplo de invocación de agente (ruta MCP):
Research Agent:
"Using the fxmacrodata MCP tools, pull today's USD/EUR/GBP calendar and spot for EUR/USD and GBP/USD.
Return up to 3 candidate setups in strict JSON schema."
Gatekeeper Agent:
"Validate each candidate against risk policy v1. Reject anything violating confidence,
size, invalidation, or event-window constraints. Return approve/resize/reject with reason."
Por qué es importante: MCP reduce la deriva de integración a medida que crece su pila, especialmente cuando se ejecutan múltiples agentes o proveedores de modelos de intercambio.
Paso 6: Envíe las salidas a la revisión humana, luego a la API del intermediario
Qué hacer: Envíe las operaciones aprobadas a los sistemas de ejecución después de la confirmación humana en las versiones iniciales.
Por qué es importante: Esto crea un bucle auditable y lo protege durante cambios de modelo o de aviso.
[FX Two-Agent Candidate]
Pair: EUR/USD
Research Bias: Long
Gatekeeper: Approve
Approved Size: 0.30%
Reason: Confidence 0.71, invalidation present, no high-impact event in 15m window.
Lo que construiste
Ahora tiene una arquitectura FX de dos agentes que separa la generación de ideas de la aprobación de riesgos, admite la integración directa REST y también admite orquestación de herramientas basadas en MCP a través de uvxEsta es una base más fuerte que los bots de un solo agente porque los candidatos al comercio deben sobrevivir a una puerta de política independiente antes de la ejecución.
El siguiente paso: añadir una capa de interruptor de destrucción que automáticamente fuerza reject También puede añadir restricciones de sesión desde Sesiones de divisas y el contexto de posicionamiento de El COT- ¿ Qué ?