Cómo construir un bot de negociación de divisas con Hermes y FXMacroData
Autor: el Equipo de FXMacroData
El nombre de la publicación: 21 de mayo de 2026
Los modelos Hermes son muy adecuados para asistentes de trading prácticos porque son rápidos, fáciles de ejecutar localmente y predecibles en flujos de trabajo de llamada de herramientas.
La estrategia de ejemplo se centra en El valor de las pérdidas y utiliza Inflación en los Estados Unidos¿ Qué ? Tasa de política de la Reserva Federal, y Tipo de interés de la política del Banco de Japón Contexto, más momento de cambio al contado.
Los requisitos previos
- Un entorno local de Python 3.10+.
- Una clave de la API de FXMacroData de Gestión de las API- ¿ Qué ?
- Un punto final de modelo de Hermes (local u alojado), como Hermes vía Ollama.
- Familiaridad básica con las API REST y los scripts Python.
Instalar dependencias:
pip install requests python-dotenv
Paso 1: Defina el objetivo del bot y las reglas de riesgo
Antes de codificar, bloquea el alcance de la decisión.
- Comerciar sólo un par (USD/JPY).
- Reaccionar sólo a los cambios macro de alto impacto.
- Nunca ponga una orden en vivo automáticamente en V1.
- Salida: dirección, confianza, nivel de invalidación y sugerencia de tamaño de posición.
Esto mantiene al primer bot útil sin convertirlo en una caja negra.
Paso 2: extraer datos macro y de divisas de FXMacroData
Utilice la API con la verificación de parámetros de consulta.
curl "https://fxmacrodata.com/api/v1/announcements/usd/inflation?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/announcements/jpy/policy_rate?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/forex?base=USD"e=JPY&api_key=YOUR_API_KEY"
También puede consultar el calendario de liberación ¿ Qué ? Posicionamiento de la COT para añadir riesgo de evento y sesgo de posicionamiento en su contexto inmediato.
Paso 3: Construir un bucle de señal compatible con Hermes en Python
El script de abajo recupera datos recientes, crea una carga útil de contexto compacta y le pide a Hermes una decisión estructurada. Mantenga la decisión determinista al requerir una salida JSON estricta.
import os
import json
import requests
from datetime import datetime, timezone
API_BASE = "https://fxmacrodata.com/api/v1"
API_KEY = os.environ["FXMD_API_KEY"]
HERMES_URL = os.environ["HERMES_URL"] # Example: http://localhost:11434/api/generate
HERMES_MODEL = os.environ.get("HERMES_MODEL", "hermes3")
def fxmd_get(path, **params):
r = requests.get(
f"{API_BASE}{path}",
params={"api_key": API_KEY, **params},
timeout=25,
)
r.raise_for_status()
return r.json()
def last_value(payload):
rows = payload.get("data", [])
return rows[-1] if rows else {}
usd_infl = last_value(fxmd_get("/announcements/usd/inflation"))
jpy_rate = last_value(fxmd_get("/announcements/jpy/policy_rate"))
usd_rate = last_value(fxmd_get("/announcements/usd/policy_rate"))
spot = fxmd_get("/forex", base="USD", quote="JPY").get("data", [])
spot_last = spot[-1] if spot else {}
spot_prev = spot[-2] if len(spot) > 1 else spot_last
context = {
"timestamp_utc": datetime.now(timezone.utc).isoformat(),
"pair": "USD/JPY",
"macro": {
"usd_inflation_latest": usd_infl.get("value"),
"usd_policy_rate_latest": usd_rate.get("value"),
"jpy_policy_rate_latest": jpy_rate.get("value"),
},
"price": {
"last": spot_last.get("value"),
"previous": spot_prev.get("value"),
},
"rules": {
"allowed_actions": ["long", "short", "flat"],
"max_risk_per_trade_pct": 0.5,
"require_invalidation_level": True,
},
}
prompt = f"""
You are an FX strategy assistant.
Use this JSON context: {json.dumps(context)}
Return JSON only with keys:
action, confidence, thesis, invalidation, size_pct, next_data_to_watch
Rules:
- No prose outside JSON.
- Confidence between 0 and 1.
- size_pct must be <= 0.5.
"""
hermes_req = {
"model": HERMES_MODEL,
"prompt": prompt,
"stream": False,
}
resp = requests.post(HERMES_URL, json=hermes_req, timeout=45)
resp.raise_for_status()
raw = resp.json().get("response", "{}")
decision = json.loads(raw)
print(json.dumps(decision, indent=2))
Por qué funciona este patrón:
- FXMacroData proporciona entradas estructuradas, por lo que Hermes razona sobre campos limpios en lugar de texto raspado ruidoso.
- El prompt hace cumplir un esquema limitado, reduciendo la deriva de salida.
- Las restricciones de riesgo se inyectan en el contexto, no se dejan implícitas.
Paso 4: Añadir filtros de información de eventos
La mayoría de las malas decisiones de los bots ocurren alrededor de ventanas de alta volatilidad.
- Proximidad del calendario: si se debe liberar el nivel superior en 30 minutos, rebajar el tamaño o la fuerza
flat- ¿ Qué ? - No estoy de acuerdo con el régimen: Si el sesgo macro y el impulso de los precios no coinciden drásticamente, reducir la confianza automáticamente.
Utilice los enlaces de los puntos finales en sus propios documentos para una referencia rápida: Pago de los trabajadores no agrícolas de los Estados Unidos¿ Qué ? PCE de base de los Estados Unidos, y Japón inflación- ¿ Qué ?
Paso 5: Convierta las decisiones en alertas, no en ejecuciones automáticas
En la producción, las decisiones se dirigen primero a Slack/Telegram. La confirmación humana debe seguir siendo obligatoria hasta que tenga suficientes muestras probadas.
[FX BOT] USD/JPY
Action: LONG
Confidence: 0.72
Thesis: US inflation + sticky core, policy divergence still USD-supportive.
Invalidation: Daily close below 154.20
Suggested Size: 0.35%
Watch Next: US Core PCE (Friday 12:30 UTC)
Esto mantiene la rendición de cuentas y la auditabilidad claras, mientras que aún ahorra tiempo de investigación.
Errores comunes a evitar
- Dejar que el modelo elija los límites de riesgo dinámicamente.
- Usando demasiados pares antes de validar un par profundamente.
- Ignorando los controles de datos obsoletos en su tubería.
- Tratar la confianza del modelo como una probabilidad de ganancia.
Lo que construiste
Ahora tiene una arquitectura completa v1 para un bot de divisas impulsado por Hermes: macro estructurado + ingestión de divis as, salida de modelo determinista y generación de señal limitada por riesgo.
Si quieres profundizar en la configuración, añade un trabajo de resumen diario que clasifica las principales sorpresas macro y las asigna al probable impacto de divisas antes de la apertura de Londres.