Ready-to-use examples for FastNL, the pure MQL5 economic calendar library: expert advisors, utility scripts and a small web viewer for the calendar data files.
Every example is a working starting point: copy the part you need into your own bot.
---
## Main Features
- **News filter EA**: a minimal bot skeleton that pauses trading a few seconds around every high/medium/low impact event, ready to receive your own strategy
- **News trader EA**: opens buy/sell positions when an event is released, using the expected market reaction of the event, with full risk management
- **Calendar scripts**: generate the calendar data files, translate event codes to ids, and inspect the history of any event
- **Calendar file viewer**: a static web page that opens the calendar event `.bin` files and shows the event info and its values table, without installing anything
### News filter: `FilterNewsEaSimple.mq5`
Creates the calendar, filters it by the chart symbol, subscribes all countries and draws the events on the chart. When an event is about to be released, `OnTickEvent` returns `true` once, so you can suspend your own logic for a few seconds:
```mql5
g_calendar = CiNewsLeo_CreateEconomicCalendar();
TSNSTD_TRY_EF(g_calendar.FilterBySymbol(_Symbol), true, CiNewsLeo_FormatTraceFirst(_what))
TSNSTD_TRY_EF(g_calendar.AddAllCountries("High|Medium|Low"), true, CiNewsLeo_FormatTraceFirst(_what))
g_calendar.SetNoticiasChecker(seg_antes_despues, 10);
TSNSTD_TRY_EF(g_calendar.SetCalendar(desde, hasta), true, CiNewsLeo_FormatTraceFirst(_what))
```
```mql5
void OnTick()
{
const datetime time_curr = TimeCurrent();
if(controler_d1.IsNewBar(time_curr))
g_calendar.OnNewDay(time_curr);
// true only once, right when the "seconds before the event" are reached
if(g_calendar.OnTickEvent(time_curr))
suspended_time = time_curr + (seg_antes_despues * 2);
if(time_curr > suspended_time)
{
// Your EA code
}
}
```
### News trader: `EAs\NewsTrader`
A strategy hooked to the calendar. When the events of the day are released, it asks the library for the theoretical movement of the event and opens a position in that direction:
```mql5
TSN::calendar.AddHook(&strategy); // the strategy receives the events
void CNewsTrader::OnNews(const EconomicEventData& events[], const int res, const datetime curr_time)
{
// ...
const double pred = TeoricMovementOfEvent(events[i], cid, country_id_profit, true);
if(pred > 0.0)
OpenOrder(POSITION_TYPE_BUY);
else
if(pred < 0.0)
OpenOrder(POSITION_TYPE_SELL);
}
```
What it includes:
- **Event lists per currency**: USD, EUR, CAD, CHF, GBP, AUD, NZD and JPY, each one a comma-separated list of MQL5 calendar event codes you can edit
- **Take profit / stop loss**: by fixed points or by ATR multiplier
- **Risk management**: lot by risk per operation, maximum daily/weekly/total loss, maximum daily profit and a dynamic risk per operation (GMLPO), for personal accounts or prop firms
- **Optional trailing stop**: ATR, SAR, moving averages (MA, AMA), previous low/high, fixed points or swings
#### Backtest
Next a backtest on XAUUSD M5
- Config:
- Balance\Equity Graph:
> Warning: These results were generated using OCHLM1 data on FTMO. Using real tick data yields similar, though slightly lower, results—but the issue isn't whether the system works; it’s the conditions required for it to function.
> Backtests simulate scenarios where the current value of an event—which is necessary for predicting the direction of the subsequent market move—is delivered within a few hundred milliseconds (the faster, the better). However, since this Expert Advisor (EA) relies on the MQL5 calendar, data delivery can take anywhere from 5 to 60+ seconds, or even days.
> Consequently, this EA will not perform well in a live environment and will likely open very few trades. For it to function effectively, it would require access to a low-latency, paid API capable of delivering current event data within a few hundred milliseconds—or even less—to allow for rapid reaction.
### Calendar scripts: `Scripts\`
| Script | What it does |
|---|---|
| `Generador Archivos CSV Calendario.mq5` | Generates the calendar data files from a start date (all importances by default) |
| `EventCodeToId.mq5` | Converts US MQL5 event codes (e.g. `producer-price-index-mm`) into their event ids, or prints the full info of an id when the input starts with `#` |
| `Test2.mq5` | Loads a list of events and prints their last value: actual, forecast, previous, impact, unit and country |
| `Test.mq5` | Experiment: computes the Kendall correlation between the recent values of the US events and a target event (US CPI m/m) |
```mql5
TSNSTD_TRY_EF(calendar.AddAllCountries(importances_events), true, CiNewsLeo_FormatTraceFirst(_what))
TSNSTD_TRY_EF(calendar.SetCalendar(desde, h), true, CiNewsLeo_FormatTraceFirst(_what))
TSNSTD_TRY_EF(calendar.GenerateFiles(), true, CiNewsLeo_FormatTraceFirst(_what))
```
### Calendar file viewer: `CalendarFormat\`
A static web page (HTML + JS, no server, no dependencies) that opens an event `.bin` file from `Common\Files\CalendarMT5` and shows:
- the event info: name, code, source, country, importance, type, sector, frequency, unit and decimals
- a table with the history: time, actual, forecast, previous, revised, impact and value id
Large histories stay fast: only the rows near the screen are drawn, the rest is read from the file when you scroll.
To use it, open `Src\CalendarFormat\index.html` in your browser and drop a `.bin` file onto the page. Nothing is uploaded, the file is read locally.
---
## Repository Structure
```
FastNLExamples/
├── Images/ # Screenshots used in this README
└── Src/
├── EAs/ # Example bots (news filter and news trader)
├── Scripts/ # Calendar utility scripts and experiments
└── CalendarFormat/ # Web viewer for the calendar event files
```
---
## ⚠️ License Notice
A **FastNL license** is required to use these examples. Get it on [The Bot Place](https://www.thebotplace.com/bot/fast-newslibrary): the purchase gives you your **TBP user id**, which the examples need to initialize the calendar. Without a license the examples will not run.
---
## Requirements
See [dependencies.json](./dependencies.json) for the full list.
---
## Installation
```bash
cd "C:\Users\YOUR_USER\AppData\Roaming\MetaQuotes\Terminal\YOUR_ID\MQL5\Shared Projects"
tsndep install "https://forge.mql5.io/nique_372/FastNLExamples.git"
```
Requires the `tsndep` package, available on [PyPI](https://pypi.org/project/tsndep). It automatically downloads and installs all declared dependencies.
---
## Quick Start
You need your **TBP user id** first: it comes with the [FastNL license](https://www.thebotplace.com/bot/fast-newslibrary).
### Option A: ready-made bots (no compiling)
**1.** Download `NewsFilter` or `NewsTrader` from the [Releases](https://forge.mql5.io/nique_372/FastNLExamples/releases) page and copy the `.ex5` to `MQL5\Experts`.
**2.** Attach it to a chart and paste your TBP user id in the `InpTbpLicense` input.
### Option B: compile from source
**1. Enable the public mode:** at the top of `Src\EAs\FilterNewsEaSimple.mq5` (or `Src\EAs\NewsTrader\Bot.mq5`), before the includes, uncomment `PUBLIC_VERSION` and define `REPOSECRETS_MQH`, so the author's private `Secrets.mqh` is not included (you can also just delete that `#include`):
```mql5
#define REPOSECRETS_MQH // do not include the author's Secrets.mqh
#define PUBLIC_VERSION // adds the InpTbpLicense input
#include "..\\..\\Secrets.mqh"
```
**2. Compile and run:** press `F7` in MetaEditor, attach the EA to a chart and paste your TBP user id in the `InpTbpLicense` input. The events appear on the chart and, around each event, `suspended_time` tells you when your own logic should wait.
**3. Scripts:** The scripts do not use InpTbpLicense; instead, they use your ID as specified via a `#define` directive (located in `TSN\ConfigTbpId.mqh`). Therefore, you only need to define `REPOSECRETS_MQH`.
### Backtesting with FastNL
Generate the calendar files first with `Generador Archivos CSV Calendario.mq5`, using the same start date as the EA input `fecha_desde_incio_noticias`.
---
## License
**[Read Full License](./LICENSE)**
By downloading or using this repository, you accept the license terms.
---
## Contact
- **Platform:** [MQL5 Community](https://www.mql5.com/es/users/nique_372)
- **Profile:** https://www.mql5.com/es/users/nique_372
- **Articles:** https://www.mql5.com/es/users/nique_372/publications
---
Copyright © 2026 Niquel & Leo — TSN Ecosystem