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.

Também disponível em English

Como criar um FX Trading Bot com Hermes e FXMacroData

Autor: Equipa FXMacroData
Publicação: 21 de Maio de 2026

Os modelos Hermes são muito adequados para assistentes práticos de negociação porque são rápidos, fáceis de executar localmente e previsíveis em fluxos de trabalho de chamada de ferramentas.

A estratégia de exemplo centra-se em: USD/JPY e utilizações Inflação dos EUA- Não . Taxa de política da Reserva FederalE ... Taxa de juro de política do Banco do Japão Você pode reutilizar o mesmo quadro para qualquer par coberto por FXMacroData.


Requisitos prévios

  • Um ambiente local Python 3.10+.
  • Uma chave de API do FXMacroData Gestão de API- Não .
  • Um ponto final de modelo Hermes (local ou hospedado), como Hermes via Ollama.
  • Familiarização básica com as APIs REST e com o scripting Python.

Instalar dependências:

pip install requests python-dotenv

Passo 1: Defina o objetivo do seu bot e regras de risco

Antes de codificar, bloqueie o escopo de decisão.

  • Negociar apenas um par (USD/JPY).
  • Reagimos apenas a mudanças macro de alto impacto.
  • Nunca faça uma ordem em tempo real automaticamente no v1.
  • Saída: direção, confiança, nível de invalidação e sugestão de tamanho da posição.

Isto mantém o primeiro bot útil sem transformá-lo numa caixa preta.


Passo 2: Extrair dados macro e FX de FXMacroData

Use a API com a autenticação do parâmetro 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"

Também pode consultar o Calendário de lançamento E ... Posicionamento COT para adicionar risco de evento e posicionamento de viés em seu contexto imediato.


Passo 3: Construir um loop de sinal compatível com o Hermes no Python

O script abaixo recupera dados recentes, cria uma carga útil de contexto compacta e pede a Hermes uma decisão estruturada.

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 que este padrão funciona:

  • FXMacroData fornece entradas estruturadas, então Hermes razona sobre campos limpos em vez de texto raspado barulhento.
  • O prompt impõe um esquema delimitado, reduzindo a deriva de saída.
  • As restrições de risco são inseridas no contexto, não deixadas implícitas.

Passo 4: Adicionar filtros de eventualidade

A maioria das decisões ruins dos bots acontecem em torno de janelas de alta volatilidade.

  • Proximidade do calendário: Se a liberação do nível superior for prevista dentro de 30 minutos, rebaixar o tamanho ou a força flat- Não .
  • Discrepancia de regime: Se o viés macro e o ímpeto dos preços discordarem drasticamente, reduzir automaticamente a confiança.

Use os links do ponto final nos seus próprios documentos para uma rápida referência: Empregados não agrícolas dos EUA- Não . PCE-centro dos EUAE ... Japão inflação- Não .


Passo 5: Transforme as decisões em alertas, não em execução automática

Em produção, as decisões são encaminhadas para o Slack/Telegram primeiro. A confirmação humana deve permanecer obrigatória até que você tenha amostras suficientes testadas. Um formato prático de alerta:

[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)

Isto mantém a prestação de contas e a auditoria clara, ao mesmo tempo em que economiza tempo de investigação.


Erros comuns a serem evitados

  • Deixar o modelo escolher os limites de risco dinamicamente.
  • Usar muitos pares antes de validar um par profundamente.
  • Ignorando as verificações de dados obsoletos no seu pipeline.
  • Tratar a confiança do modelo como uma probabilidade de lucro.
Nota de execução: Mantenha o seu Hermes prompt e sua lógica de risco versão separada.

O que construíste

Agora você tem uma arquitetura completa v1 para um bot FX com Hermes: macro estruturado + ingestão de FX, saída de modelo determinista e geração de sinal de risco.

Se quiser aprofundar a configuração, adicione um trabalho de resumo diário que classifique as principais surpresas macro e as mapeie para o impacto provável de FX antes da abertura de Londres.

Blogroll