Build a Real-Time FX Event Agent That Front-Runs Your Morning Prep banner image

Reference

Macro Education

Build a Real-Time FX Event Agent That Front-Runs Your Morning Prep

Replace 45 minutes of manual pre-market prep with an always-on AI agent that scans the FXMacroData release calendar, ranks today's events by market impact, and delivers a structured briefing before London open.

Auch verfügbar auf English

Warum ein Morgen-Prep-Agent der höchste ROI-Bot ist, den man zuerst bauen kann

Wenn Sie FX diskretionär handeln oder ein halbautomatisches Buch führen, sind die teuersten 45 Minuten Ihres Tages die vor der Eröffnung von London. Veröffentlichungskalender, Überprüfen, welche Abdrücke der ersten Stufe sind, Konsens suchen, über Nacht scannen. USD/JPY- Ich weiß . EUR/USD- Ich weiß . GBP/USDEs ist wiederholt, fehleranfällig und zwingt Sie, jeden Morgen den Kontext neu zu erstellen.

Dies ist genau die Art von Aufgabe, die ein KI-Agent besser als ein Mensch macht: begrenzter Umfang, strukturierte Eingaben, deterministische Ausgabe. Echtzeit-FX-Ereignis-Agent Das läuft vor Ihrem Handelstag, zieht Live-Event-Daten von FXMacroData, ordnet die heutigen Releases nach wahrscheinlichen Marktfolgen und liefert ein strukturiertes Briefing, das Sie in 90 Sekunden lesen können.

Am Ende haben Sie ein Skript, das Sie auf jedem Computer planen können Laptop, Raspberry Pi, Cloud VM das die Vorbereitung des Morgens von einer Hausarbeit in eine Checkliste verwandelt.

Was du bauen wirst
Ein Python-Agent, der täglich um 06:30 UTC läuft, abfragt den Release-Kalender von FXMacroData für die nächsten 24 Stunden in der G10, ordnet Ereignisse nach Auswirkungen ein, fasst sie durch ein LLM zusammen und schiebt ein strukturiertes Briefing auf Telegram oder Slack.

Voraussetzungen

  • Python 3.10+ und Pip.
  • Ein FXMacroData API-Schlüssel von API-Management- Ich weiß .
  • Ein LLM-Endpunkt, den Sie kontrollieren.
    • Anthropischer Claude (empfohlen für die Qualität der Argumentation).
    • OpenAI GPT-4-Klasse.
    • Lokal Hermes/Llama über Ollama für kostenlose Fahrten.
  • Ein Telegramm-Bot-Token (über @BotFather) oder eine Slack-Eingangs-Webhook-URL fungiert entweder als Zustellkanal.
  • Ein Zeitplaner. cron auf Linux/macOS, Task Scheduler auf Windows oder irgendein Cloud Cron wird es tun.

Installieren von Abhängigkeiten:

pip install requests python-dotenv

Erstellen Sie eine .env Die Akte mit deinen Geheimnissen:

FXMD_API_KEY=your_fxmacrodata_key
LLM_PROVIDER=anthropic           # or "openai" or "ollama"
ANTHROPIC_API_KEY=sk-ant-...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...

Schritt 1: Ziehen Sie die nächsten 24 Stunden aus dem Kalender der FXMacroData-Veröffentlichungen

Die erste Aufgabe des Agenten ist es zu wissen, was eigentlich geplant ist. FXMacroData Release-Kalender-Endpunkt gibt geplante Releases pro Währung zurück, einschließlich Indikatornamen, geplanter UTC-Datumzeit, vorheriger Wert und Wichtigkeit, wenn verfügbar.

Fragen Sie es für jede wichtige Währung, die Sie handeln:

curl "https://fxmacrodata.com/api/v1/calendar/usd?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/eur?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/gbp?api_key=YOUR_API_KEY"
curl "https://fxmacrodata.com/api/v1/calendar/jpy?api_key=YOUR_API_KEY"

Wickeln Sie dies in Python, damit der Agent über eine konfigurierbare Währungsliste iterieren kann:

import os
import requests
from datetime import datetime, timedelta, timezone
from dotenv import load_dotenv

load_dotenv()

API = "https://fxmacrodata.com/api/v1"
KEY = os.environ["FXMD_API_KEY"]
CURRENCIES = ["usd", "eur", "gbp", "jpy", "aud", "cad", "chf", "nzd"]


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 upcoming_releases(hours_ahead: int = 24):
    now = datetime.now(timezone.utc)
    cutoff = now + timedelta(hours=hours_ahead)
    releases = []
    for ccy in CURRENCIES:
        try:
            data = fxmd_get(f"/calendar/{ccy}").get("data", [])
        except requests.HTTPError:
            continue
        for ev in data:
            try:
                ts = datetime.fromisoformat(
                    ev["announcement_datetime"].replace("Z", "+00:00")
                )
            except (KeyError, ValueError):
                continue
            if now <= ts <= cutoff:
                releases.append({
                    "currency": ccy.upper(),
                    "indicator": ev.get("indicator") or ev.get("name"),
                    "scheduled_utc": ts.isoformat(),
                    "prior": ev.get("prior_value"),
                    "consensus": ev.get("consensus") or ev.get("market_consensus"),
                    "importance": ev.get("importance") or ev.get("impact"),
                })
    releases.sort(key=lambda r: r["scheduled_utc"])
    return releases

Schritt 2: Rangfolge der Veröffentlichungen nach wahrscheinlichen Auswirkungen auf den Markt

Nicht alle Drucke bewegen Märkte. Nichtlandwirtschaftliche Lohnhöfte- Ich weiß . Kern-PCE- Ich weiß . Zinssatz der Fed- Ich weiß . CPI des Euro-Währungsgebiets- Ich weiß . UK CPIUnd ... Zinssatz der Bank von Japan Die meisten Länder haben eine relativ hohe Währungsdichte.

Das ist das einzige, höchste Hebel des gesamten Systems - dein Gewicht, dein Vorteil.

TIER_1 = {
    ("USD", "non_farm_payrolls"), ("USD", "core_pce"), ("USD", "policy_rate"),
    ("USD", "inflation"), ("USD", "fomc_minutes"),
    ("EUR", "inflation"), ("EUR", "policy_rate"),
    ("GBP", "inflation"), ("GBP", "policy_rate"),
    ("JPY", "policy_rate"), ("JPY", "inflation"),
    ("AUD", "policy_rate"), ("CAD", "policy_rate"),
    ("CHF", "policy_rate"), ("NZD", "policy_rate"),
}

TIER_2 = {
    ("USD", "retail_sales"), ("USD", "ism_manufacturing"),
    ("EUR", "gdp"), ("EUR", "unemployment"),
    ("GBP", "gdp"), ("GBP", "retail_sales"),
    ("AUD", "inflation"), ("CAD", "inflation"),
}


def impact_score(event: dict) -> int:
    key = (event["currency"], (event["indicator"] or "").lower())
    if key in TIER_1:
        return 3
    if key in TIER_2:
        return 2
    return 1


def rank(releases):
    return sorted(
        releases,
        key=lambda r: (-impact_score(r), r["scheduled_utc"]),
    )

Jetzt können Sie den Tag in eine strukturierte Liste zusammenbrechen, in der Tier-1-Ereignisse unabhängig von der UTC-Zeit zuerst auftauchen.


Schritt 3: Hinzufügen über Nacht Kontext, so dass der Agent weiß, was bereits bewegt

Ein morgendliches Briefing ist unvollständig ohne einen Schnappschuss der Forex-Bewegungen über Nacht.

PAIRS = [("USD", "JPY"), ("EUR", "USD"), ("GBP", "USD"), ("AUD", "USD")]


def overnight_moves():
    moves = []
    for base, quote in PAIRS:
        try:
            data = fxmd_get(
                "/forex",
                base=base,
                quote=quote,
            ).get("data", [])
        except requests.HTTPError:
            continue
        if len(data) < 2:
            continue
        last = data[-1]["value"]
        prev = data[-25]["value"] if len(data) >= 25 else data[0]["value"]
        change_pct = (last - prev) / prev * 100
        moves.append({
            "pair": f"{base}/{quote}",
            "last": round(last, 5),
            "change_pct_24h": round(change_pct, 2),
        })
    return moves

Wenn Sie auch einen Positionierungskontext für Swing-Trades wünschen, fügen Sie einen COT - Das Briefing sollte ohne funktionieren.


Schritt 4: Erstellen Sie das Briefing mit einem LLM

Der Agent hat nun drei strukturierte Eingaben: geordnete Ereignisse, Übernacht-FX-Bewegungen und den aktuellen UTC-Zeitstempel.

import json
from anthropic import Anthropic

claude = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

SYSTEM_PROMPT = """You are an FX morning-prep analyst.
Given today's ranked releases and overnight moves, produce a briefing that:
- leads with the single most important event of the day,
- groups events by impact tier,
- flags 1-2 specific pairs to watch and why,
- ends with one disciplined risk caveat.
Do not give buy/sell instructions. Stay factual. Max 220 words."""


def generate_briefing(events, moves):
    payload = json.dumps({
        "utc_now": datetime.now(timezone.utc).isoformat(),
        "ranked_events": events,
        "overnight_moves": moves,
    })
    resp = claude.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=600,
        system=SYSTEM_PROMPT,
        messages=[{"role": "user", "content": payload}],
    )
    return resp.content[0].text

Drei Dinge machen diese Anforderung zuverlässig:

  • Strukturelle Eingabe. Das Modell empfängt JSON, nicht natürliche Sprache, also muss es niemals Daten oder Zahlen aus Text extrahieren.
  • - Das ist ein harter Anblick. Der System-Aufforderung wird die Handelsempfehlungen verboten, was die Ausgabe auch an volatilen Tagen konform und nützlich hält.
  • Die Höchstlänge. 220 Wörter forcieren die Signaldichte, lange Briefings trainieren Sie zum Schwimmen, was den Zweck verhindert.

Schritt 5: Übertragen Sie auf Telegram (oder Slack)

Das Briefing muss morgen früh dort landen, wo man es schon sieht.

def send_telegram(text: str):
    token = os.environ["TELEGRAM_BOT_TOKEN"]
    chat_id = os.environ["TELEGRAM_CHAT_ID"]
    requests.post(
        f"https://api.telegram.org/bot{token}/sendMessage",
        json={
            "chat_id": chat_id,
            "text": text,
            "parse_mode": "Markdown",
            "disable_web_page_preview": True,
        },
        timeout=15,
    )


def run():
    events = rank(upcoming_releases(hours_ahead=24))
    moves = overnight_moves()
    briefing = generate_briefing(events, moves)
    header = f"*FX Morning Briefing — {datetime.now(timezone.utc):%a %d %b %Y}*\n\n"
    send_telegram(header + briefing)


if __name__ == "__main__":
    run()

Planen Sie es. Auf Linux/macOS läuft der Agent jeden Wochentag um 06:30 UTC durch einen einzigen Crontab-Eintrag:

30 6 * * 1-5 /usr/bin/python3 /opt/fx-agent/morning_brief.py >> /var/log/fx-agent.log 2>&1

Wie die Besprechung wirklich aussieht

Beispiel für die Ausgabe, die der Agent in einer kürzlich durchgeführten CPI-Woche erzeugt hat:

FX Morning Briefing — Thu 22 May 2026

Today's anchor: US Core PCE at 12:30 UTC. Consensus 0.2% MoM,
prior 0.0%. A second sub-0.1 print would cement the disinflation
narrative; a 0.3+ surprise resets Fed pricing.

Tier 1:
- 12:30 UTC USD Core PCE  prior +0.0%  cons +0.2%
- 13:30 UTC USD Initial Jobless Claims  prior 228k  cons 225k

Tier 2:
- 06:00 UTC GBP Retail Sales MoM  prior -0.1%  cons +0.4%
- 09:00 UTC EUR ECB Minutes (qualitative)

Pairs to watch:
- USD/JPY hovering 158.40 after a quiet Asia. PCE miss → 156s
  back in play.
- GBP/USD coiled below 1.2700. Stronger UK retail + soft PCE is
  the cleanest setup of the day.

Risk caveat: thin EU liquidity ahead of US data; expect outsized
moves on any surprise print.

Das ist eine komplette Vorverkaufs-Lese in weniger als 90 Sekunden, jeden Wochentag, ohne manuelle Kalender-Schraube.


Eine Checkliste, die sich verhärtet, bevor man ihr vertraut.

  • Veralteter Datenschutz. Verweigern Sie die Übermittlung, wenn ein Ereignis der Stufe 1 eine geplante Zeit verpasst.
  • Versuchen Sie es nochmal mit der Rückseite. Drei Versuche, 2s/4s/8s, dann laut fehlschlagen.
  • Ausgangsgenehmiger. Verwerfen Sie jede LLM-Antwort, die die Worte "Kaufen", "Verkaufen" oder "Lange" / "Kurz" enthält.
  • Herzschlagwarnung. Wenn der Agent bis 07:00 UTC kein Briefing sendet, pingt euch separat, damit ihr den Workflow nicht stillschweigend verliert.
  • Kostenobergrenze. Setzt . max_tokens=600 Die Briefings sollten Cent pro Tag kosten.

Wo soll ich ihn jetzt hinbringen?

Das gleiche Gerüst erstreckt sich leicht, wenn die Morgenschleife zuverlässig ist:

  • Überraschende Alarme innerhalb eines Tages. Umfrage Ankündigungen Endpunkte alle 15 Minuten nach einer Tier-1-Ausgabe; Warnung, wenn sich die tatsächliche Abweichung von der Konsenswerte um mehr als den Schwellenwert erstreckt.
  • - Paarspezifische Briefings. - Erzeugt eine engere . USD/JPY- Nur oder? EUR/USD- nur für aktive Tage.
  • Positionierung überlagerung. Zieh . COT-Daten Die Daten werden wöchentlich eingegeben und in die gleiche Anfrage eingegliedert, damit die Briefing-Installation weiß, wann der Markt einseitig ist.
  • Stimmmodus. Übertragen Sie das Briefing über ein TTS-Modell und lassen Sie es laut vorlesen, während Sie Kaffee machen.

Der Gewinn liegt nicht im Briefing selbst, sondern im disziplinierten, reproduzierbaren Kontext, mit dem Sie in Ihren Handelstag eintreten.

AI Answer-Ready

Key Facts

Page
Build A Real Time FX Event Agent For Morning Prep
Section
Articles
Canonical URL
https://fxmacrodata.com/articles/build-a-real-time-fx-event-agent-for-morning-prep
Source
FXMacroData editorial and official publisher references
Last Updated
2026-05-28 00:00 UTC

Provenance And Trust

Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.

Quick Q&A

What is this page about? This page explains Build A Real Time FX Event Agent For Morning Prep with directly usable context for trading, research, and API workflows.

What source should be cited? Use the canonical URL and the listed source field; cite official publisher references when available.

How fresh is this content? The last updated value above reflects the page metadata or latest available data timestamp.

Can this be used in AI assistants? Yes. This section is intentionally structured for retrieval and citation in chat assistants.

Prompt Packs

Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.

Blogroll