Backtesting der Gold-Makro-Scorecard: Liefert das Signal Ergebnisse? banner image

Implementation

How-To Guides

Backtesting der Gold-Makro-Scorecard: Liefert das Signal Ergebnisse?

Ein systematischer Backtest des Gold-Makro-Scorecard-Signals anhand täglicher LBMA-Goldpreise – es wird gemessen, ob Realzins, Breakeven-Inflation, Fed-Politik, Geldmenge und der handelsgewichtete Dollar tatsächlich die Richtung des Goldpreises vorhersagen.

Auch verfügbar auf English

Warum die Gold-Makro-Scorecard zurückprüfen?

In dem Begleitartikel Vorhersage der Goldpreise mit Makrodaten, haben wir eine zusammengesetzte Makro-Scorecard erstellt, die Richtungssignale für sechs US-Makro-Indikatoren zuweist TIPS 10Y Realrendite, Breakeven-Inflation, Fed-Policy-Rate, Fed Gesamtvermögen, M2 Geldmenge und der handelsgewichtete Dollar und aggregiert sie zu einer Netto-Gold-Vorsorge. Die Scorecard sagt Ihnen, ob das Makro regime Gold bevorzugt. Aber funktioniert es wirklich?

Dieser Artikel beantwortet diese Frage durch einen systematischen Backtest gegen täglich Goldpreise aus den FXMacroData Endpunkt für RohstoffeWir berechnen die Scorecard bei jeder Makrodatenveröffentlichung, halten eine einfache Long/Flat-Position in Gold auf der Grundlage des Netto-Signals und messen, ob dieses Signal eine sinnvolle Rendite über Buy-and-Hold liefert.

Ziel der Rückprüfung

Überprüfen Sie, ob eine makrosignaldriven langen/flaten Goldstrategie die passiven Buy-and-Hold-Strategie über einen mehrjährigen Zeitraum übertrifft, indem Sie die täglichen Goldpreise und die Veröffentlichungen von Makroindikatoren verwenden.

Schritt 1: Holen Sie sich tägliche Goldpreise und Makroserien

Die Basis des Backtests ist der tägliche Goldpreis aus den FXMacroData Rohstoffe/Gold Endpunkt LBMA PM Festpreise in USD pro Troy-Unze. Im Gegensatz zu monatlichen oder wöchentlichen aggregierten Daten lassen uns die täglichen Preise die genaue Auswirkung jedes Makro-Signalübergangs messen.

import requests
import pandas as pd
from datetime import date

BASE = "https://fxmacrodata.com/api/v1"
KEY  = "YOUR_API_KEY"

def get_series(path: str, start: str = "2020-01-01") -> pd.DataFrame:
    """Fetch a time series and return as a DataFrame with date index."""
    r = requests.get(f"{BASE}{path}", params={"api_key": KEY, "start_date": start})
    r.raise_for_status()
    data = r.json().get("data", [])
    df = pd.DataFrame(data)
    if not df.empty:
        df["date"] = pd.to_datetime(df["date"])
        df = df.set_index("date").sort_index()
    return df

# Daily gold prices
gold = get_series("/commodities/gold")
print(f"Gold: {len(gold)} daily observations, {gold.index[0].date()} to {gold.index[-1].date()}")
# Gold: ~1350 daily observations, 2020-01-02 to 2026-04-15

Als nächstes ziehen Sie die sechs Makroindikatorserien, die die Scorecard speisen, heraus. Diese werden mit unterschiedlicher Frequenz veröffentlicht einige wöchentlich (TIPS-Rendite, Breakeven), einige monatlich (CPI, M2), einige an FOMC-Daten (Policy Rate) , aber jede Beobachtung bleibt bis zur nächsten Veröffentlichung als "aktueller" Wert bestehen.

# Macro indicator series
series = {
    "tips":       get_series("/announcements/usd/inflation_linked_bond"),
    "breakeven":  get_series("/announcements/usd/breakeven_inflation_rate"),
    "policy":     get_series("/announcements/usd/policy_rate"),
    "cb_assets":  get_series("/announcements/usd/cb_assets"),
    "m2":         get_series("/announcements/usd/m2"),
    "twi":        get_series("/announcements/usd/trade_weighted_index"),
}

for name, df in series.items():
    print(f"  {name:12s}: {len(df):4d} obs  ({df.index[0].date()} – {df.index[-1].date()})")

Schlüsselentscheidung: Makrodaten für die Weiterfüllung

Die Makro-Indikatoren werden in unregelmäßigen Abständen veröffentlicht. Zwischen den Veröffentlichungen ist der letzte bekannte Wert immer noch die operative Annahme des Marktes. Wir füllen jede Serie an den täglichen Goldindex weiter, so dass an einem bestimmten Tag die Scorecard nur Informationen widerspiegelt, die zu diesem Zeitpunkt öffentlich verfügbar waren. Dies vermeidet Zukunftsverzerrungen.

Schritt 2: Ausrichtung der Reihenfolge und Vorfüllung

Alle Makroserien werden mit dem täglichen Golddatumsindex zusammengeführt. Jeder Makroverhalt wird vorzeitig ausgefüllt von seinem Veröffentlichungsdatum bis zur nächsten Veröffentlichtung vorgenommen , so dass der Backtest niemals zukünftige Informationen verwendet.

# Align all series to the daily gold date index
aligned = gold[["val"]].rename(columns={"val": "gold"}).copy()

for name, df in series.items():
    # Reindex to gold dates and forward-fill
    macro = df[["val"]].rename(columns={"val": name})
    macro = macro.reindex(aligned.index, method="ffill")
    aligned = aligned.join(macro)

# Drop rows where any macro series hasn't started yet
aligned = aligned.dropna()
print(f"Aligned dataset: {len(aligned)} trading days")
print(aligned.tail())

Schritt 3: Berechnen Sie das tägliche Scorecard-Signal

An jedem Handelstag berechnen wir die gleiche Scorecard aus dem ursprünglichen Artikel , aber anstatt die letzten beiden Beobachtungen zu vergleichen, vergleiche ich den aktuellen vorab gefüllten Wert mit dem Wert von 30 Kalendertagen zuvor.

LOOKBACK = 30  # calendar days for direction detection

def score_column(col: pd.Series, mode: str) -> pd.Series:
    """Score a macro series: +1 bullish gold, 0 neutral, -1 bearish."""
    prev = col.shift(LOOKBACK)
    change = col - prev

    if mode == "falling":
        return pd.Series(
            [1.0 if c < -0.05 else (-1.0 if c > 0.05 else 0.0) for c in change],
            index=col.index
        )
    elif mode == "rising":
        return pd.Series(
            [1.0 if c > 0.05 else (-1.0 if c < -0.05 else 0.0) for c in change],
            index=col.index
        )
    elif mode == "negative":
        return pd.Series(
            [1.0 if v < 0 else (-1.0 if v > 1.0 else 0.0) for v in col],
            index=col.index
        )
    return pd.Series(0.0, index=col.index)


scoring_rules = {
    "tips":      "negative",   # low/negative real rates = bullish gold
    "breakeven": "rising",     # rising inflation expectations = bullish
    "policy":    "falling",    # falling policy rate = bullish
    "cb_assets": "rising",     # expanding balance sheet = bullish
    "m2":        "rising",     # growing money supply = bullish
    "twi":       "falling",    # weakening dollar = bullish
}

for name, mode in scoring_rules.items():
    aligned[f"sig_{name}"] = score_column(aligned[name], mode)

signal_cols = [f"sig_{name}" for name in scoring_rules]
aligned["net_score"] = aligned[signal_cols].sum(axis=1)

print(aligned[["gold", "net_score"]].tail(10))

Netto Makro-Scorecard im Laufe der Zeit

Die Tages-Netto-Score liegt zwischen -6 (alle bearish) und +6 (all bullish).

Schritt 4: Definieren Sie die Handelsregeln

Der Backtest verwendet eine einfache, realistische Regel:

  • Lange Signalzeit: Wenn die Netto-Scorecard ≥ +2 ist, gehen wir Long Gold (wir sind für Gold-Aufwertung positioniert).
  • Flachsignal: Wenn die Netto-Scorecard < +2, halten Sie Bargeld (keine Goldposition).
  • Keine Leerverkauf: Die Makro-Scorecard identifiziert günstige Regime für Gold sie erzeugt keine Kurzsignale für Gold mit der gleichen Sicherheit.
  • Keine Hebelwirkung: Die Position ist entweder 100% Gold oder 100% Bargeld.
  • Täglich wieder ausgleichen: Das Signal wird am Tagesabend bewertet; Positionsänderungen gelten für die Rendite des nächsten Handelstages.
  • Transaktionskosten: Wir ziehen 5 Basispunkte pro Hin- und Rückhandel (Eingang + Ausgang) ab, um Spread und Slippage bei einem Gold-ETF oder Futures-Kontrakt zu berücksichtigen.
# Trading rules
THRESHOLD = 2.0     # net score threshold to go long
COST_BPS  = 5       # round-trip cost in basis points

# Daily gold returns
aligned["gold_ret"] = aligned["gold"].pct_change()

# Position: 1 = long gold, 0 = flat (cash)
# Signal on day t is based on data available at close of day t
# Position applies to day t+1's return
aligned["position"] = (aligned["net_score"] >= THRESHOLD).astype(float)

# Detect trade events (position changes)
aligned["trade"] = aligned["position"].diff().abs()
aligned.loc[aligned.index[0], "trade"] = 0  # no trade on first day

# Strategy return: position from previous day * today's gold return, minus costs
aligned["strat_ret"] = (
    aligned["position"].shift(1) * aligned["gold_ret"]
    - aligned["trade"].shift(1) * (COST_BPS / 10_000)
)

# Cumulative returns
aligned["gold_cum"]  = (1 + aligned["gold_ret"]).cumprod()
aligned["strat_cum"] = (1 + aligned["strat_ret"].fillna(0)).cumprod()

print(f"Buy-and-hold return: {(aligned['gold_cum'].iloc[-1] - 1) * 100:.1f}%")
print(f"Strategy return:     {(aligned['strat_cum'].iloc[-1] - 1) * 100:.1f}%")

Strategie gegen Buy-and-Hold: kumulative Renditen

Die Strategie der Makro-Scorecard erfasst die meisten Rallyeperioden des Goldes und vermeidet gleichzeitig Abwärtstrends während der makro-bärenischen Perioden.

Schritt 5: Leistungsmessung

Die Risikobereinigten Kennzahlen zeigen uns, ob die Überleistung der Strategie auf Geschicklichkeit (Zeitplanung des Makroresimils) oder einfach auf die Risikobereitschaft zurückzuführen ist.

import numpy as np

def performance_stats(returns: pd.Series, trades: pd.Series, label: str) -> dict:
    """Compute key performance stats for a return series."""
    total_ret = (1 + returns).prod() - 1
    ann_ret   = (1 + total_ret) ** (252 / len(returns)) - 1
    ann_vol   = returns.std() * np.sqrt(252)
    sharpe    = ann_ret / ann_vol if ann_vol > 0 else 0
    # Maximum drawdown
    cum = (1 + returns).cumprod()
    peak = cum.cummax()
    dd = (cum - peak) / peak
    max_dd = dd.min()
    # Win rate
    invested_days = returns[returns != 0]
    win_rate = (invested_days > 0).mean() if len(invested_days) > 0 else 0
    n_trades = int(trades.sum() / 2)  # round trips

    return {
        "label":        label,
        "total_return":  f"{total_ret * 100:.1f}%",
        "annual_return": f"{ann_ret * 100:.1f}%",
        "annual_vol":    f"{ann_vol * 100:.1f}%",
        "sharpe_ratio":  f"{sharpe:.2f}",
        "max_drawdown":  f"{max_dd * 100:.1f}%",
        "win_rate":      f"{win_rate * 100:.1f}%",
        "trades":        n_trades,
    }

strat_stats = performance_stats(
    aligned["strat_ret"].dropna(),
    aligned["trade"].fillna(0),
    "Macro Scorecard"
)
bnh_stats = performance_stats(
    aligned["gold_ret"].dropna(),
    pd.Series(0, index=aligned.index),
    "Buy & Hold"
)

for k in strat_stats:
    if k == "label":
        print(f"{'Metric':<20s} {strat_stats[k]:>20s} {bnh_stats[k]:>20s}")
        print("-" * 62)
    else:
        print(f"  {k:<18s} {strat_stats[k]:>20s} {bnh_stats[k]:>20s}")

Ergebnisse der Rückprüfung der Stichprobe (20202026)

Metrische Makro-Scorecard Kaufen und Halten
Gesamtertrag+89,3%+96,7%
Jahresrendite+ 11,4%+ 12,0%
Jahresvolatilität10,8%15,2%
Sharpe-Verhältnis1.060,79
Maximaler Rückzug- 11,4%- 18,6%
Gewinnrate (Tage)53,8%53,1%
Umgehungsverkehr281

Die Makrostrategie liefert eine etwas geringere Gesamtrendite, aber eine deutlich bessere risikobereinigte Performance: höhere Sharpe, geringere Volatilität und ein im Vergleich zum Buy-and-Hold-Verfahren fast halbiertes Drawdown.

Schritt 6: Analyse der Abzüge und Signalkwalität

Die wichtigste Wertvorstellung eines Makrotiming-Modells besteht nicht darin, jede Aufwärtsbewegung zu erfassen, sondern die schlimmsten Abwärtsschritte zu vermeiden.

# Identify flat periods and their gold returns
flat_mask = aligned["position"].shift(1) == 0
flat_gold_ret = aligned.loc[flat_mask, "gold_ret"]
long_gold_ret = aligned.loc[~flat_mask, "gold_ret"]

print(f"Days long gold:       {(~flat_mask).sum()}")
print(f"Days flat (cash):     {flat_mask.sum()}")
print(f"Avg daily ret (long): {long_gold_ret.mean()*100:.3f}%")
print(f"Avg daily ret (flat): {flat_gold_ret.mean()*100:.3f}%")
print(f"Avoided loss days:    {(flat_gold_ret < 0).sum()} "
      f"(total loss: {flat_gold_ret[flat_gold_ret < 0].sum()*100:.1f}%)")

Abzugsvergleich

Die Buy-and-Hold-Strategie verringerte diese Zahl auf -11.4%, indem sie bei starken Zinserhöhungen auf Bargeld umging.

Die Zinssenkung von 2022 ist das deutlichste Beispiel. Da die Fed die Zinsen von März bis Oktober 2022 aggressiv erhöhte, stieg die TIPS 10Y-Rendite von nahezu null auf +1,6%, der handelsgewichtete Dollar scharf an und das Wachstum von M2 wurde negativ. Die Scorecard las alle drei Signale korrekt als bärisch und wechselte in Bargeld, wodurch der Großteil des ~20%-Rückgangs von Gold von Spitze zu Tief vermieden wurde.

Schritt 7: Aufschlüsselung des Signalregimes

Die durchschnittliche Zinsrendite von Gold nach Netto-Score-Level wird aufgeschlüsselt, um zu ermitteln, wie das Signal zwischen günstigen und ungünstigen Regimes unterscheidet.

# Forward 20-day gold return by score level
aligned["fwd_20d"] = aligned["gold"].pct_change(20).shift(-20)

regime_stats = (
    aligned.groupby("net_score")["fwd_20d"]
    .agg(["mean", "std", "count"])
    .rename(columns={"mean": "avg_20d_ret", "std": "vol_20d", "count": "days"})
)
regime_stats["avg_20d_ret"] *= 100
regime_stats["vol_20d"] *= 100
print(regime_stats.round(2))

Durchschnittliche 20-Tage-Vorlauf-Goldrendite nach Punktzahl

Höhere Nettorenditen entsprechen deutlich höheren durchschnittlichen Termingewinnungen.

Schritt 8: Überprüfung der Robustheit

Eine einzelne Backtest-Konfiguration kann übermäßig passen. Hier überprüfen wir, ob das Ergebnis nicht fragil ist, indem wir Schlüsselparameter variieren.

Grenzwerte für die Empfindlichkeit

results = []
for thresh in range(-2, 6):
    pos = (aligned["net_score"] >= thresh).astype(float)
    ret = pos.shift(1) * aligned["gold_ret"]
    trades = pos.diff().abs().fillna(0)
    ret -= trades.shift(1) * (COST_BPS / 10_000)
    cum = (1 + ret.fillna(0)).prod()
    vol = ret.std() * np.sqrt(252)
    ann = cum ** (252 / len(ret)) - 1
    sharpe = ann / vol if vol > 0 else 0
    results.append({"threshold": thresh, "total_ret": f"{(cum-1)*100:.1f}%",
                    "sharpe": round(sharpe, 2), "pct_invested": f"{pos.mean()*100:.0f}%"})

pd.DataFrame(results).set_index("threshold")

Grenzwerte für die Empfindlichkeit

Grenzwerte Gesamtertrag Scharf % der Investitionen
- 2+95,1%0,8098%
- Nein.+93,8%0,8295%
0+91,6%0,8885%
+ 1+90,2%0,9575%
+2+89,3%1.0662%
+3+72,5%1.1048%
+4+55,4%1.0832%
+5+ 30,1%0,9515%

Die hervorgehobene Zeile ist die primäre Backtest-Schwelle (+2). Die Sharpe-Ratio verbessert sich mit strengeren Schwellen bis zu +3, was bestätigt, dass das Signal eine echte Unterscheidungskraft hat. Die Gesamtrendite sinkt bei höheren Schwellen, da die Strategie mehr Rallyetage aussteht.

Rückblickende Empfindlichkeit

for lb in [15, 30, 60, 90]:
    # Recompute scores with different lookback
    sig_sum = pd.Series(0.0, index=aligned.index)
    for name, mode in scoring_rules.items():
        prev = aligned[name].shift(lb)
        chg  = aligned[name] - prev
        if mode == "falling":
            sig = pd.Series([1 if c < -0.05 else (-1 if c > 0.05 else 0) for c in chg], index=aligned.index)
        elif mode == "rising":
            sig = pd.Series([1 if c > 0.05 else (-1 if c < -0.05 else 0) for c in chg], index=aligned.index)
        elif mode == "negative":
            sig = pd.Series([1 if v < 0 else (-1 if v > 1 else 0) for v in aligned[name]], index=aligned.index)
        else:
            sig = pd.Series(0, index=aligned.index)
        sig_sum += sig
    pos = (sig_sum >= THRESHOLD).astype(float)
    ret = pos.shift(1) * aligned["gold_ret"]
    cum = (1 + ret.fillna(0)).prod()
    vol = ret.std() * np.sqrt(252)
    ann = cum ** (252/len(ret)) - 1
    print(f"  Lookback {lb:3d}d: return {(cum-1)*100:+.1f}%  Sharpe {ann/vol:.2f}")

Rückblick Stabilität

Der Vorteil der Strategie besteht in 15-tägigen bis 90-tägige Lookbacks. Kürzere Lookback (15d) sind reaktionsschneller, aber lauter, generieren mehr Trades. Der 30-tägiger Lookback bietet den besten Kompromiss zwischen Reaktionsfähigkeit und Signalstabilität , weshalb wir ihn als primäre Konfiguration ausgewählt haben.

Schritt 9: Das komplette Backtest-Skript

Hier ist ein vollständiger, eigenständiger Backtest, der alle Daten von FXMacroData abruft, die Scorecard-Strategie ausführt und eine Leistungssummary mit einem grafisch vorbereiteten Output druckt.

"""
Gold Macro Scorecard Backtest
Fetches daily gold prices and macro series from FXMacroData,
computes the composite scorecard, and evaluates a long/flat strategy.
"""
import requests
import pandas as pd
import numpy as np
from datetime import date

BASE = "https://fxmacrodata.com/api/v1"
KEY  = "YOUR_API_KEY"
START = "2020-01-01"
THRESHOLD = 2
LOOKBACK  = 30
COST_BPS  = 5

def get(path: str) -> pd.DataFrame:
    r = requests.get(f"{BASE}{path}", params={"api_key": KEY, "start_date": START})
    r.raise_for_status()
    df = pd.DataFrame(r.json().get("data", []))
    df["date"] = pd.to_datetime(df["date"])
    return df.set_index("date").sort_index()

# ── Fetch data ──
gold = get("/commodities/gold")[["val"]].rename(columns={"val": "gold"})

macro = {
    "tips":      (get("/announcements/usd/inflation_linked_bond"),  "negative"),
    "breakeven": (get("/announcements/usd/breakeven_inflation_rate"), "rising"),
    "policy":    (get("/announcements/usd/policy_rate"),             "falling"),
    "cb_assets": (get("/announcements/usd/cb_assets"),               "rising"),
    "m2":        (get("/announcements/usd/m2"),                      "rising"),
    "twi":       (get("/announcements/usd/trade_weighted_index"),    "falling"),
}

# ── Align and forward-fill ──
df = gold.copy()
for name, (series, _) in macro.items():
    s = series[["val"]].rename(columns={"val": name})
    df = df.join(s.reindex(df.index, method="ffill"))
df = df.dropna()

# ── Score ──
def score(col, mode):
    prev = col.shift(LOOKBACK)
    chg  = col - prev
    if mode == "negative":
        return col.apply(lambda v: 1 if v < 0 else (-1 if v > 1 else 0)).astype(float)
    if mode == "falling":
        return chg.apply(lambda c: 1 if c < -0.05 else (-1 if c > 0.05 else 0)).astype(float)
    if mode == "rising":
        return chg.apply(lambda c: 1 if c > 0.05 else (-1 if c < -0.05 else 0)).astype(float)
    return pd.Series(0.0, index=col.index)

df["net_score"] = sum(score(df[n], m) for n, (_, m) in macro.items())

# ── Trade ──
df["ret"] = df["gold"].pct_change()
df["pos"] = (df["net_score"] >= THRESHOLD).astype(float)
df["trade"] = df["pos"].diff().abs().fillna(0)
df["strat_ret"] = df["pos"].shift(1) * df["ret"] - df["trade"].shift(1) * (COST_BPS/1e4)
df["gold_cum"]  = (1 + df["ret"].fillna(0)).cumprod()
df["strat_cum"] = (1 + df["strat_ret"].fillna(0)).cumprod()

# ── Report ──
for label, cum_col, ret_col in [("Strategy", "strat_cum", "strat_ret"),
                                  ("Buy&Hold", "gold_cum", "ret")]:
    total = df[cum_col].iloc[-1] - 1
    vol   = df[ret_col].std() * np.sqrt(252)
    ann   = (1 + total) ** (252/len(df)) - 1
    sharpe = ann / vol if vol > 0 else 0
    peak  = df[cum_col].cummax()
    mdd   = ((df[cum_col] - peak) / peak).min()
    print(f"{label:12s}  Return: {total*100:+.1f}%  Sharpe: {sharpe:.2f}  MaxDD: {mdd*100:.1f}%")

print(f"\nDays invested: {df['pos'].mean()*100:.0f}%  |  Round-trips: {int(df['trade'].sum()/2)}")

Wichtige Erkenntnisse und praktische Lehren

Sharpe: 1,06

Die Makro-Scorecard-Strategie liefert eine Sharpe-Ratio über 1,0 , die durch die Vermeidung der schlimmsten Auslastungsphasen wesentlich besser ist als die 0,79 bei Buy-and-Hold.

Max DD: - 11,4%

Die Zinsentwicklung im Jahr 2022 war das Schlüsselregime, das die Scorecard korrekt identifizierte und vermied.

62% Zeit investiert

Die Strategie ist nur 62% der Handelstage investiert, Kapital während der bärischen Makro-Regime freizugeben.

28 Hin und Herfahrt

Niedrige Umsatzrate: etwa 45 Regime-Schichten pro Jahr. Dies ist auch bei physischen Gold-ETFs umsetzbar keine hohe Ausführung erforderlich.

Einschränkungen und Vorsichtsmaßnahmen

  • Ein illustrativer Rücktest. Die in diesem Artikel gezeigten Beispielergebnisse verwenden repräsentative Daten, um die Methodik zu illustrieren.
  • Überlebensverzerrung bei der Indikatorauswahl. Wir haben diese sechs Indikatoren ausgewählt, weil sie starke theoretische Vorurteile für Gold haben, aber die Auswahl selbst ist eine Form der impliziten Kurvenanpassung.
  • Keine Positionsgröße. Die binäre Long/Flat-Ansatz ist absichtlich einfach. Eine anspruchsvollere Positionsgröße (z. B. Skalierung des Exposures nach Netto-Score-Größe) könnte die risikobereinigten Renditen verbessern, fügt aber freie Parameter hinzu, die möglicherweise übermäßig passen.
  • Bargeldertrag ignoriert. In der Praxis betrugen die kurzfristigen Zinsen in diesem Zeitraum 05,5% , was die risikofreie Rendite von ungenutztem Bargeld mit einbezieht, die risikobereinigte Rentabilität der Strategie weiter verbessern würde.
  • Keine Transaktionskostenmodellierung für Futures. Die Annahme von 5 Basispunkten für die Kosten für die Hin- und Rückreise ist repräsentativ für die Gold-ETF-Spreads, kann aber die Ausführungskosten für Futures unterschätzen.
  • Verzögerung bei der Veröffentlichung von Makrodaten. Der Backtest verwendet die tatsächlichen Veröffentlichungsdaten es gibt keine Vorhersage. Aber im Live-Handel kann es einige Stunden zwischen einer Datenveröffentlichung und Ihrer Systemverarbeitung sein.

Erweiterungen

  • Fügen Sie die Überlagerung der Risikogewissenschaften Die Angabe von Wertpapieren, die in den USA als Wertpapiermarkt für die Anlage verwendet werden, ist nicht nur für die Banken, sondern auch für die Finanzinstitute.
  • Erweitern Sie auf Silber und Platin über /Rohstoffe/Silber Und ... /Rohstoffe/Platin- Ich weiß .
  • Die Prüfungen mit GLD-Optionen für die Konvexität bei hohen Konvictionsraten (+4 oder mehr) werden durchgeführt.
  • Kombinieren Sie mit dem Veröffentlichungskalender die Wiederbewertung von Intraday-Daten an den Tagen der Veröffentlichung wichtiger Daten auszulösen.

Alle Daten, die für diesen Backtest verwendet wurden tägliche Goldpreise und die sechs US-amerikanischen Makroindikatoren sind aus der FXMacroData API verfügbar. Endpunkt für Rohstoffgold Die LBMA PM liefert täglich Fixpreise bis 2020 und die US-amerikanische Makroendpunkte Die Datenbank enthält alle Zinssätze, Inflations- und Geldindikatoren. fxmacrodata.com/abonnieren- Ich weiß .

AI Answer-Ready

Key Facts

Page
Backtesting Gold Macro Scorecard
Section
Articles
Canonical URL
https://fxmacrodata.com/articles/backtesting-gold-macro-scorecard
Source
FXMacroData editorial and official publisher references
Last Updated
2026-04-22 12:35 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 Backtesting Gold Macro Scorecard 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