How To Build An Fx Trading Bot With Hermes And Fxmacrodata banner image

Implementation

How-To Guides

How To Build An Fx Trading Bot With Hermes And Fxmacrodata

Build a practical FX trading bot with a Hermes model and FXMacroData. Learn how to wire macro releases, spot FX data, and rule-based risk filters into an automated signal loop you can run locally.

Disponible también en English

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&quote=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.
Nota de ejecución: Mantenga su Hermes de alerta y su lógica de riesgo versionado por separado. cambios rápidos no deben cambiar silenciosamente el comportamiento de riesgo.

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.

Blogroll