Live release feed
Sub-second macro releases for FX backtests
Point-in-time history
Official CPI, jobs, GDP, and central-bank events with point-in-time history.
USD 25/month 14-day free trial
Start Free Trial
Using FXMacroData with Prediction Markets: Kalshi and Polymarket article banner
Share headline card X LinkedIn Email
Download

Reference

Macro Education

Usando FXMacroData com mercados de previsão: Kalshi e Polymarket

Guia passo a passo para conectar os anúncios macro do FXMacroData, as previsões de consenso e os dados de posicionamento do COT aos contratos de mercado de previsão no Kalshi e no Polymarket com código Python funcional.

Também disponível em English
Share article X LinkedIn Email

Quando os dados macro correspondem aos mercados de previsão

Os mercados de previsão passaram da curiosidade para a infraestrutura. Kalshi a primeira bolsa de previsão regulada pela CFTC nos Estados Unidos permite negociar contratos com resultados como "Will IPC dos EUA A taxa de crescimento do PIB em Abril excederá 3,5%?" ou "Será que o Reserva Federal As duas plataformas de preços de probabilidade em tempo real e ambas são sensíveis a exatamente os mesmos lançamentos de dados macro que se movem. USD/JPY- Não . EUR/USD, e o resto do complexo FX.

Se você já usa o FXMacroData para rastrear calendários de bancos centrais, monitorar surpresas do IPC e extrair histórico de taxas de juros, você tem os ingredientes brutos para construir uma vantagem sistemática nesses mercados.

Objetivo
No final deste guia, você terá um script Python que recupera os próximos anúncios macro da FXMacroData, os combina com contratos de mercado de previsão relevantes no Kalshi e Polymarket e calcula um sinal direcional a partir de dados históricos surpresa para ajudar a informar sua posição.

Requisitos prévios

  • Uma chave da API FXMacroData Assine aqui para uma avaliação gratuita.
  • Python 3.10 ou mais recente com requests instalados (pip install requests)).
  • Uma conta Kalshi com acesso API habilitado, ou uma carteira Polymarket para referência manual.
  • Familiarização básica com o que é o IPC, Salarios não agrícolasE ... Taxa de política decisões são.

Passo 1 Desligue o calendário de lançamento próximo

A primeira coisa que você precisa é de uma imagem clara de quais anúncios estão chegando e quando. O ponto final do calendário de lançamento do FXMacroData retorna todos os eventos macro agendados para uma moeda, com suas datas e horários de anúncio esperados.

import requests

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

def get_upcoming_releases(currency: str) -> list[dict]:
    url = f"{BASE}/calendar/{currency}?api_key={API_KEY}"
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return resp.json().get("data", [])

usd_calendar = get_upcoming_releases("usd")

for event in usd_calendar[:5]:
    print(event["indicator"], event.get("announcement_datetime"), event.get("next_release_date"))

Cada entrada tem um indicator Escaramuça (por exemplo: inflation- Não . non_farm_payrolls- Não . policy_ratese um contrato se resolver em "CPI para março de 2026" você precisa da data exata de anúncio para dimensionar seu horizonte de tempo corretamente.


Passo 2 Obter dados históricos de anúncios e calcular a série surpresa

Se você puder calcular um índice de surpresa de história recente para um determinado indicador com que frequência as impressões reais superam o consenso e em quanto você tem uma linha de base para calibrar sua posição.

def get_announcement_history(currency: str, indicator: str, limit: int = 24) -> list[dict]:
    url = f"{BASE}/announcements/{currency}/{indicator}?api_key={API_KEY}&limit={limit}"
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return resp.json().get("data", [])

def compute_surprise_series(records: list[dict]) -> list[dict]:
    surprises = []
    for r in records:
        actual = r.get("actual_value")
        consensus = r.get("predicted_value")
        if actual is not None and consensus is not None:
            surprises.append({
                "date": r["date"],
                "actual": actual,
                "consensus": consensus,
                "surprise": actual - consensus,
                "direction": "beat" if actual > consensus else "miss",
            })
    return surprises

cpi_history = get_announcement_history("usd", "inflation", limit=24)
cpi_surprises = compute_surprise_series(cpi_history)

beat_count = sum(1 for s in cpi_surprises if s["direction"] == "beat")
miss_count = len(cpi_surprises) - beat_count
print(f"CPI beat rate (last 24 releases): {beat_count}/{len(cpi_surprises)} = {beat_count/len(cpi_surprises):.0%}")

O ... predicted_value Este é o mesmo sinal de consenso que ancora os preços do mercado de previsão, por isso sua série surpresa será diretamente comparável à probabilidade implícita incorporada em um contrato Kalshi CPI.


Etapa 3 Indicadores de mapa para contratos de mercado de previsão

Tanto a Kalshi quanto a Polymarket estruturam seus contratos macro em torno de limiares de indicadores específicos. O mapeamento é direto quando você conhece as lesmas do indicador FXMacroData. Abaixo está uma tabela de referência para os contratos mais líquidos:

Tipo de contrato de mercado de previsão Indicador FXMacroData slug Moeda Documentação da API
O IPC excederá X%? inflation USD /api-data-docs/usd/inflação
O IPC Core excederá X%? core_inflation USD /api-data-docs/usd/core_inflation
Será que o NFP excederá X.000? non_farm_payrolls USD /api-data-docs/usd/non_farm_payrolls
O Fed vai cortar/manter/alcançar o FOMC? policy_rate USD /api-data-docs/usd/policy_rate
O crescimento do PIB excederá X%? gdp_quarterly USD /api-data-docs/usd/gdp_quarterly
O desemprego cairá abaixo de X%? unemployment USD /api-data-docs/usd/desemprego
O BCE reduzirá as taxas na próxima reunião? policy_rate EUR /api-data-docs/eur/policy_rate

O ... Calendário de lançamento Quando um contrato Kalshi lista uma data de resolução, cruzar referências com o next_release_date Os desajustes em que o contrato se resolve com base numa estimativa antecipada versus uma revisão final são uma fonte comum de preco incorreta.


Passo 4 Consultar os pontos finais das previsões para a fixação do consenso

O endpoint de previsões do FXMacroData fornece valores de consenso prospectivos provenientes de dados oficiais de pesquisa as mesmas pesquisas que os participantes do mercado de previsão usam para ancorar seus antecedentes.

def get_predictions(currency: str, indicator: str) -> list[dict]:
    url = f"{BASE}/predictions/{currency}/{indicator}?api_key={API_KEY}"
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return resp.json().get("data", [])

cpi_predictions = get_predictions("usd", "inflation")

# Most recent upcoming prediction
if cpi_predictions:
    next_pred = cpi_predictions[0]
    for p in next_pred.get("predictions", []):
        print(f"Source: {p['prediction_source_label']}")
        print(f"Consensus: {p['predicted_value']}%")
        print(f"For release date: {next_pred['date']}")

Forma da resposta da amostra:

{
  "currency": "USD",
  "indicator": "inflation",
  "count": 1,
  "prediction_count": 1,
  "data": [
    {
      "announcement_id": "usd_inflation_2026-05-14",
      "currency": "usd",
      "indicator": "inflation",
      "date": "2026-05-14",
      "announcement_datetime": 1747216200,
      "predictions": [
        {
          "predicted_value": 2.8,
          "prediction_type": "market_consensus",
          "prediction_source": "philly_fed_spf",
          "prediction_source_label": "Philadelphia Fed Survey of Professional Forecasters"
        }
      ]
    }
  ]
}

If a Kalshi contract asks "Will April CPI print above 2.9%?" and the SPF consensus is 2.8%, you now have a quantified starting point: the consensus says no with a 0.1 percentage point buffer. Your historical surprise series from Step 2 then tells you how often CPI has beaten consensus by more than 0.1 percentage point, giving you an empirical base rate to compare against the contract's implied probability.


Passo 5 Construir o sinal de decisão completo

A lógica é intencionalmente simples o objetivo é um sinal reproduzível, baseado em dados, não uma caixa preta:

def prediction_market_signal(
    currency: str,
    indicator: str,
    contract_threshold: float,
    contract_direction: str,  # "above" or "below"
    lookback: int = 24,
) -> dict:
    """
    Returns a signal dict for a prediction market contract.

    contract_threshold: the numeric threshold in the contract question
                        (e.g. 2.9 for "Will CPI exceed 2.9%?")
    contract_direction: "above" means YES if actual > threshold
    """
    history = get_announcement_history(currency, indicator, limit=lookback)
    surprises = compute_surprise_series(history)
    predictions = get_predictions(currency, indicator)

    consensus = None
    release_date = None
    if predictions:
        latest_preds = predictions[0].get("predictions", [])
        if latest_preds:
            consensus = latest_preds[0]["predicted_value"]
            release_date = predictions[0]["date"]

    # Base rate: how often did actual exceed the threshold historically?
    actuals_above = sum(1 for r in history if r.get("actual_value") is not None
                        and r["actual_value"] > contract_threshold)
    base_rate = actuals_above / len(history) if history else None

    # Surprise bias: mean surprise (positive = beat)
    mean_surprise = (sum(s["surprise"] for s in surprises) / len(surprises)
                     if surprises else None)

    # Directional signal
    if consensus is not None:
        buffer = consensus - contract_threshold  # positive = consensus above threshold
        signal = "NO" if (contract_direction == "above" and buffer > 0) else "YES"
    else:
        signal = "NEUTRAL"

    return {
        "currency": currency.upper(),
        "indicator": indicator,
        "contract_threshold": contract_threshold,
        "contract_direction": contract_direction,
        "consensus": consensus,
        "release_date": release_date,
        "historical_base_rate_above_threshold": base_rate,
        "mean_surprise_last_n": mean_surprise,
        "lookback": lookback,
        "signal": signal,
    }


result = prediction_market_signal(
    currency="usd",
    indicator="inflation",
    contract_threshold=2.9,
    contract_direction="above",
    lookback=24,
)

import json
print(json.dumps(result, indent=2))

Exemplo de saída:

{
  "currency": "USD",
  "indicator": "inflation",
  "contract_threshold": 2.9,
  "contract_direction": "above",
  "consensus": 2.8,
  "release_date": "2026-05-14",
  "historical_base_rate_above_threshold": 0.33,
  "mean_surprise_last_n": 0.04,
  "lookback": 24,
  "signal": "NO"
}

Leia isto como: o consenso é de 2,8% (abaixo do limiar de 2,9%), a taxa de base histórica de 24 lançamentos para a impressão do IPC acima de 2.9% é de 33%, e a surpresa média tem sido um modesto viés ascendente de +0,04 ppt. O sinal bruto é NÃO, mas a combinação de taxa base e viés surpresa diz-lhe que esta não é uma posição magra de alta convicção ajuste o tamanho da posição em conformidade.


Passo 6 Extensão aos contratos não denominados em USD e aos contratos transfronteiriços

Os mercados de previsão listam cada vez mais contratos sobre eventos macro não USD: decisões do BCE, IPC do Reino Unido, política do Banco do Japão e emprego australiano.

# ECB rate decision signal
ecb_signal = prediction_market_signal(
    currency="eur",
    indicator="policy_rate",
    contract_threshold=3.15,   # "Will ECB rate fall below 3.15%?"
    contract_direction="below",
    lookback=12,
)

# UK inflation signal
uk_cpi_signal = prediction_market_signal(
    currency="gbp",
    indicator="inflation",
    contract_threshold=2.5,
    contract_direction="above",
    lookback=18,
)

# Australian employment signal
aus_employment_signal = prediction_market_signal(
    currency="aud",
    indicator="employment",
    contract_threshold=30.0,   # thousands, "Will employment add 30K+?"
    contract_direction="above",
    lookback=18,
)

O ... EUR/USD E ... GBP/USD Os painéis de controlo mostram o histórico das taxas de juro e a tendência do IPC para cada par, permitindo uma verificação visual do contexto antes de se comprometer com uma posição. Banco Central Europeu A taxa de juro base é muito diferente da taxa de câmbio base que é fixada em uma moeda única.


Passo 7 Monitorizar o posicionamento do COT como camada de confirmação

Os contratos Kalshi e Polymarket sobre resultados macro não são negociados isoladamente o posicionamento especulativo em futuros de câmbio reflete frequentemente as mesmas opiniões direcionais. Painel de instrumentos COT Se as especificações forem fortemente longas em dólares e o sinal do IPC for NO (abaixo do limiar), há um potencial de dupla vantagem: o contrato de mercado de previsão pode valer a pena desvanecer-se e a posição FX também pode ser vulnerável a um aperto.

Extrair dados COT programaticamente para incluí-lo em seu quadro de sinal:

def get_cot(currency: str) -> list[dict]:
    url = f"{BASE}/cot/{currency}?api_key={API_KEY}&limit=4"
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return resp.json().get("data", [])

usd_cot = get_cot("usd")
if usd_cot:
    latest = usd_cot[0]
    net_position = latest.get("net_position")
    print(f"USD spec net position (latest week): {net_position:+,.0f} contracts")

A juntar tudo

O fluxo de trabalho completo parece assim:

  1. Puxa o ... Calendário de lançamento Identificar os próximos anúncios e os seus horários previstos.
  2. As datas de anúncio do jogo são para ... contratos de mercado de previsão aberta em Kalshi ou Polymarket.
  3. Traz o ... previsões ponto final para o valor de consenso actual.
  4. Calcule o série histórica surpresa Para medir o viés direcional e a taxa de base.
  5. Gerencie um sinal direcional Comparando o consenso com o limiar do contrato.
  6. Opcionalmente , camada de entrada . Posicionamento COT de futuros de câmbio como sinal de confirmação.
  7. Avalie a sua posição com base na diferença entre a probabilidade implícita no contrato e a sua estimativa empírica da taxa de base.
Nota importante sobre o calendário da resolução
O FXMacroData fornece o segundo nível announcement_datetime marcas de tempo para cada lançamento criticamente importante para mercados de previsão que se resolvem em segundos após a impressão oficial. Verifique sempre se a fonte de resolução declarada do contrato (por exemplo, "BLS CPI para março de 2026, primeira versão") corresponde exatamente ao indicador FXMacroData e à bandeira de revisão que você está consultando. Estimativas antecipadas e revisões finais são armazenadas como pontos de dados separados.

Começa .

Todos os endpoints utilizados neste guia estão disponíveis em uma versão de teste gratuita sem necessidade de cartão de crédito. Os indicadores em USD, incluindo IPC, PFN, PIB, desemprego, PCE principal e taxa de política, são todos acessíveis no nível gratuito. Os indicativos não em USD e os dados COT exigem um plano profissional.

Blogroll

AI Answer-Ready

Key Facts

Page
FXmacrodata Prediction Markets Kalshi Polymarket
Section
Articles
Canonical URL
https://fxmacrodata.com/pt/artigos/fxmacrodata-prediction-markets-kalshi-polymarket
Source
FXMacroData editorial and official publisher references
Last Updated
2026-06-15 11:36 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 FXmacrodata Prediction Markets Kalshi Polymarket 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.