Loading…
Loading calendar…
Loading news…
FFxF News API
Real-time forex economic calendar and news feed. No API key required. Designed for MQL4 & MQL5 Expert Advisors — just add the URL to your whitelist and start reading structured JSON.
https://news.ffxf.net
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/feed | Combined calendar + news in one call. Recommended for EAs. |
| GET | /api/v1/calendar | Economic calendar events only. |
| GET | /api/v1/news | Forex news articles only. |
| GET | /health | Service health check. Returns Redis status and last update time. |
Query Parameters
| Parameter | Values | Applies to | Description |
|---|---|---|---|
| currency | USD, EUR, GBP, JPY… | feed, calendar, news | Filter by currency code. Returns only events/news for that currency. |
| impact | high, medium, low | feed, calendar | Filter calendar events by impact level. |
| hours | 1 – 168 | feed, news | News look-back window in hours. Default: 24. |
MQL5 Integration
⚠
Before using
WebRequest in MT5, whitelist the URL in Tools → Options → Expert Advisors → Allow WebRequest for listed URL and add https://news.ffxf.net.
MQL5
// Returns true when a news window is active for the given currency. // Call this at the top of OnTick() to gate your trade logic. // // Parameters: // currency — e.g. "USD", "EUR", "GBP" // impact — "high" | "medium" | "low" (default: "high") // minsB — minutes BEFORE the event to block (default: 30) // minsA — minutes AFTER the event to block (default: 60) bool IsNewsWindow(const string currency, const string impact = "high", const int minsB = 30, const int minsA = 60) { string url = "https://news.ffxf.net/api/v1/calendar" + "?currency=" + currency + "&impact=" + impact; string headers = "Accept: application/json\r\n"; char post[], result[]; string resHeaders; int code = WebRequest("GET", url, headers, 10000, post, result, resHeaders); if(code != 200) { Print("[News] HTTP ", code); return false; } string json = CharArrayToString(result); datetime now = TimeGMT(); // API timestamps are UTC string key = "\"timestamp\":\""; int pos = 0; while((pos = StringFind(json, key, pos)) >= 0) { pos += StringLen(key); string ts = StringSubstr(json, pos, 19); // "YYYY-MM-DDTHH:MM:00" StringReplace(ts, "T", " "); datetime evTime = StringToTime(ts); if(evTime > 0) { long diff = (long)(evTime - now); if(diff >= -(long)(minsA * 60) && diff <= (long)(minsB * 60)) return true; } } return false; } // ── Usage in your EA ────────────────────────────────────────────── void OnTick() { // Block trades 30 min before and 60 min after high-impact USD news if(IsNewsWindow("USD")) { Print("[News] USD news window active — skipping tick"); return; } // ... your strategy logic here ... }
MQL4 Integration
⚠
Whitelist the URL in Tools → Options → Expert Advisors → Allow WebRequest for listed URL and add https://news.ffxf.net. MQL4's
WebRequest has a different signature from MQL5.
MQL4
bool IsNewsWindow(const string currency, const string impact = "high", const int minsB = 30, const int minsA = 60) { string url = "https://news.ffxf.net/api/v1/calendar" + "?currency=" + currency + "&impact=" + impact; char post[], result[]; string cookie = "", referer = "", resHeaders; // MQL4 WebRequest has cookie + referer params instead of headers string int code = WebRequest("GET", url, cookie, referer, 10000, post, 0, result, resHeaders); if(code != 200) { Print("[News] HTTP ", code); return false; } string json = CharArrayToString(result); datetime now = TimeGMT(); string key = "\"timestamp\":\""; int pos = 0; while((pos = StringFind(json, key, pos)) >= 0) { pos += StringLen(key); string ts = StringSubstr(json, pos, 19); StringReplace(ts, "T", " "); datetime evTime = StringToTime(ts); if(evTime > 0) { long diff = (long)(evTime - now); if(diff >= -(minsA * 60) && diff <= (minsB * 60)) return true; } } return false; } // ── Usage ───────────────────────────────────────────────────────── int start() // MQL4 entry point { if(IsNewsWindow("USD")) return(0); // ... your strategy logic ... return(0); }
Filtering Examples
URL Examples
// High-impact events for USD only https://news.ffxf.net/api/v1/calendar?currency=USD&impact=high // All EUR events (any impact) https://news.ffxf.net/api/v1/calendar?currency=EUR // Combined feed — USD calendar + news from last 48h https://news.ffxf.net/api/v1/feed?currency=USD&hours=48 // Latest news for GBP https://news.ffxf.net/api/v1/news?currency=GBP // Health check https://news.ffxf.net/health
JSON Response — /api/v1/calendar
JSON
{
"updated_at": "2026-03-11T12:00:00Z",
"next_update": "2026-03-11T12:10:00Z",
"count": 1,
"events": [
{
"id": "mt5_USD_85",
"title": "Core CPI m/m",
"currency": "USD",
"level": "high", // "high" | "medium" | "low" | "holiday" | "none"
"event_date": "2026-03-11",
"event_time": "08:30", // UTC
"timestamp": "2026-03-11T08:30:00Z",
"forecast": "0.2%",
"previous": "0.3%",
"actual": "" // empty until released
}
]
}JSON Response — /api/v1/news
JSON
{
"updated_at": "2026-03-11T12:00:00Z",
"next_update": "2026-03-11T12:10:00Z",
"count": 1,
"news": [
{
"id": "forexlive_abc123",
"title": "Fed holds rates steady amid trade uncertainty",
"summary": "The Federal Reserve kept its benchmark...",
"url": "https://www.forexlive.com/...",
"currencies": ["USD"],
"published_at": "2026-03-11T11:30:00Z"
}
]
}