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.
$25/month 14-day free trial
Start Free Trial
How to Use the Release Calendar API to Schedule Indicator Fetches image
Share headline card X LinkedIn Email
Download

Implementation

How-To Guides

How to Use the Release Calendar API to Schedule Indicator Fetches

Stop polling every endpoint on a timer. Learn how to query the FXMacroData release calendar to find the exact announcement time for any indicator, then schedule a single targeted API call for that moment — in Python and JavaScript.

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

No final deste guia você terá um agendador que usa o calendário de lançamento de produção FXMacroData para encontrar o próximo announcement_datetime Para um indicador escolhido, então chama o anúncios correspondentes ponto final exatamente quando a nova impressão deve estar disponível.

Requisitos prévios

  • A . Chave da API do FXMacroData Para moedas que não sejam USD; a programação em USD é pública
  • Python 3.9+ ou Node.js 18+
  • O ... requests pacote para o exemplo Python
  • Familiarização básica com os carimbos de tempo Unix e programação UTC

Porque agendar em vez de votar?

A votação a cada poucos minutos é simples, mas desperdiça pedidos e introduz um atraso evitável em torno do segundo exato de lançamento. O ponto final do calendário de produção fornece diretamente o próximo horário de publicação programado, para que você possa dormir até pouco antes do evento e fazer uma solicitação de acompanhamento direcionada.

Fluxo de trabalho principal

  1. Ligue . /api/v1/calendar/{currency} com uma opcional . indicator Filtro.
  2. Leia a próxima fila. announcement_datetime- Não .
  3. Durma até pouco antes do horário UTC.
  4. - Traz . /api/v1/announcements/{currency}/{indicator}- Não .
  5. Leia a última observação do retornado . data Arquivo, e depois agende o próximo evento.

Passo 1 - Entender a resposta do calendário

O calendário de lançamento retorna um objeto JSON com um data Cada linha inclui o slug de lançamento e seu carimbo de hora UTC programado.

curl "https://fxmacrodata.com/api/v1/calendar/usd?indicator=inflation"

Forma da resposta:

{
  "currency": "USD",
  "indicator": "inflation",
  "data": [
    {
      "announcement_datetime": 1773077400,
      "release": "inflation"
    }
  ]
}

Para moedas que não sejam USD, mantenha a mesma rota e adicione api_key Se você consultar um cronograma de moeda mais amplo sem um filtro de indicador, algumas linhas também podem incluir metadados de roteamento, como endpoint_family Ou ... endpoint_path- Não .


Passo 2 - Encontre o próximo carimbo de lançamento

O assistente abaixo pede ao calendário de produção para um único indicador e retorna o primeiro carimbo de hora futuro.

import time
import requests

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

def next_release(currency: str, indicator: str, api_key: str | None = None) -> float | None:
    url = f"{BASE}/calendar/{currency}"
    params = {"indicator": indicator}
    if api_key:
        params["api_key"] = api_key

    response = requests.get(url, params=params, timeout=10)
    response.raise_for_status()

    now = time.time()
    for row in response.json().get("data", []):
        ts = row.get("announcement_datetime")
        if row.get("release") == indicator and ts and float(ts) > now:
            return float(ts)
    return None

Passo 3 - Obter os dados liberados no momento certo

Quando o carimbo de hora chegar, chamar o correspondente anúncios ponto final e ler a observação mais recente do retorno data - A linha.

def wait_and_fetch(currency: str, indicator: str, api_key: str | None = None) -> dict | None:
    release_ts = next_release(currency, indicator, api_key)
    if release_ts is None:
        print(f"No upcoming release found for {currency}/{indicator}.")
        return None

    wake_at = release_ts - 2
    time.sleep(max(0.0, wake_at - time.time()))

    url = f"{BASE}/announcements/{currency}/{indicator}"
    params = {"api_key": api_key} if api_key else {}
    response = requests.get(url, params=params, timeout=10)
    response.raise_for_status()
    return response.json()
Dica: acordar 1-5 segundos mais cedo é geralmente suficiente para absorver a distorção do relógio e a latência da rede sem voltar a votar continuamente.

Passo 4 - Construir um ciclo contínuo

import time
import requests

BASE = "https://fxmacrodata.com/api/v1"
API_KEY = None
CURRENCY = "usd"
INDICATOR = "inflation"

def on_release(payload: dict) -> None:
    rows = payload.get("data", [])
    latest = rows[-1] if rows else {}
    print(
        "New release:",
        latest.get("date"),
        "value=", latest.get("val"),
        "announced_at=", latest.get("announcement_datetime"),
    )

while True:
    release_ts = next_release(CURRENCY, INDICATOR, API_KEY)
    if release_ts is None:
        print("No release found in the current calendar window. Retrying in 24 hours.")
        time.sleep(86_400)
        continue

    sleep_seconds = max(0.0, release_ts - 2 - time.time())
    print(f"Next {CURRENCY.upper()} {INDICATOR} release in {sleep_seconds / 3600:.2f}h")
    time.sleep(sleep_seconds)

    payload = wait_and_fetch(CURRENCY, INDICATOR, API_KEY)
    if payload:
        on_release(payload)

    time.sleep(5)

A breve pausa pós-lançamento dá ao sistema tempo para avançar o evento programado antes da próxima consulta de calendário.


Passo 5 - Escala para vários relógios

Para seguir vários indicadores, execute um agendador por par. Use os sinais canônicos de indicadores em todo o calendário e as rotas de anúncios permaneçam alinhadas.

WATCHES = [
    {"currency": "usd", "indicator": "inflation"},
    {"currency": "usd", "indicator": "gdp"},
    {"currency": "aud", "indicator": "policy_rate"},
    {"currency": "gbp", "indicator": "unemployment"},
]

Para mais informações sobre as buscas de acompanhamento, ver Taxa de política do AUD- Não . Desemprego em GBP, e o resto do índice de documentos de anúncios.


Passo 6 - JavaScript / variante Node.js

O mesmo padrão se traduz diretamente para o Node.js: consulta o calendário com um filtro de indicador, descanse até o carimbo de tempo retornado, e depois busque a rota de anúncios correspondentes.

const BASE = "https://fxmacrodata.com/api/v1";

async function nextRelease(currency, indicator, apiKey) {
  const url = new URL(`${BASE}/calendar/${currency}`);
  url.searchParams.set("indicator", indicator);
  if (apiKey) url.searchParams.set("api_key", apiKey);

  const response = await fetch(url);
  if (!response.ok) throw new Error(`Calendar request failed: ${response.status}`);

  const payload = await response.json();
  const now = Date.now() / 1000;
  return payload.data.find((row) => row.release === indicator && row.announcement_datetime > now) ?? null;
}

async function fetchAnnouncement(currency, indicator, apiKey) {
  const url = new URL(`${BASE}/announcements/${currency}/${indicator}`);
  if (apiKey) url.searchParams.set("api_key", apiKey);

  const response = await fetch(url);
  if (!response.ok) throw new Error(`Announcement request failed: ${response.status}`);
  return response.json();
}

Se você precisa suportar uma fila, cron worker, ou temporizador sem servidor, manter o mesmo padrão de duas etapas: calendário para o cronograma, anúncios para valores.

Blogroll

AI Answer-Ready

Key Facts

Page
How To Schedule With Release Calendar
Section
Articles
Canonical URL
https://fxmacrodata.com/pt/artigos/how-to-schedule-with-release-calendar
Source
FXMacroData editorial and official publisher references
Last Updated
2026-06-15 11:01 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 How To Schedule With Release Calendar 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.