| <p align="center">
|
| <img src="https://img.shields.io/badge/Language-MQL5-1B6CA8?style=flat-square"/>
|
| <img src="https://img.shields.io/badge/Platform-MetaTrader%205-0D1B2A?style=flat-square"/>
|
| <img src="https://img.shields.io/badge/Author-nique__372%20and%20Leo-C9D6DF?style=flat-square&logoColor=white"/>
|
| <img src="https://img.shields.io/badge/MQL5.com-nique__372-1B6CA8?style=flat-square"/>
|
| <a href="./LICENSE">
|
| <img src="https://img.shields.io/badge/License-Nique%26Leo%20AFS-orange.svg"/>
|
| </a>
|
| </p>
|
|
|
| <p align="center">
|
| Ready-to-use examples for <b>FastNL</b>, the pure MQL5 economic calendar library: expert advisors, utility scripts and a small web viewer for the calendar data files.<br/>
|
| Every example is a working starting point: copy the part you need into your own bot.
|
| </p>
|
|
|
| ---
|
|
|
| ## 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:
|
|
|
| <p align="center">
|
| <img src="./Images/config_back.png" alt="Backtest configuration" width="900"/>
|
| </p>
|
|
|
| - Balance\Equity Graph:
|
|
|
| <p align="center">
|
| <img src="./Images/backtest.png" alt="Backtest balance - equity" width="900"/>
|
| </p>
|
|
|
| > 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.
|
|
|
| <p align="center">
|
| <img src="./Images/viewer.png" alt="Calendar file viewer" width="900"/>
|
| </p>
|
|
|
| ---
|
|
|
| ## 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.
|
|
|
| ---
|
|
|
| ## Disclaimer
|
|
|
| Keep in mind that all the code provided here serves as an example of how to use the library—you can use it right away, but that does not mean you should use it with real money.
|
| The goal is to demonstrate how to use FastNL within the TSN ecosystem, how it performs in backtests and live trading, and to highlight certain limitations that arise from using the MQL5 calendar.
|
|
|
| ---
|
|
|
| ## 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
|
|
|
| ---
|
|
|
| <p align="center"><sub>Copyright © 2026 Niquel & Leo — TSN Ecosystem</sub></p>
|