Rejoignez notre page de fans
- Vues:
- 160
- Note:
- Publié:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
MetaTrader5 dispose d'un historique volumétrique actualisé des événements fondamentaux du calendrier, dont toutes les données sont accessibles par programme.
Cette bibliothèque vous permet de travailler commodément avec ces données. En particulier, de les utiliser dans le Tester et dans le trading réel.
L'utilisation de la bibliothèque est présentée sous forme de commentaires dans le code source des exemples.
Obtention de données historiques.
// Le script génère des données historiques. #include <fxsaber\Calendar\Calendar.mqh> // Calendrier - analyse fondamentale sur l'historique et en temps réel. void OnStart() { CALENDAR Calendar; // Prend en compte les événements pour toutes les devises (NULL) en commençant par la plus faible (NONE). const int Size = Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2020.12.07', D'2020.12.08'); // Les a imprimées. for (int i = 0; i < Size; i++) Print(Calendar[i].ToString()); }
Résultat.
2020.12.07 AllDay EUR 0 День Конституции(constitution-day), Испания(ES) | | | | 2020.12.07 00:00 AUD 3 Выступление председателя Резервного Банка Австралии Лоу(rba-governor-lowe-speech), Австралия(AU) | | | | 2020.12.07 01:50 JPY 1 Международные резервы(jp-foreign-reserves), Япония(JP) | $1384.6 B | | $1384.4 B | 2020.12.07 02:30 AUD 1 Количество объявлений о вакансиях от ANZ м/м(anz-job-advertisements-mm), Австралия(AU) | 13.9% | 0.8% | 9.4% | 2020.12.07 ≈05:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 2020.12.07 ≈05:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 2020.12.07 ≈05:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 2020.12.07 ≈05:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта г/г(exports-yy), Китай(CN) | 14.9% | 2.2% | 7.6% | 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов(coincident-index), Япония(JP) | 89.7 | 81.8 | 81.1 | 84.8 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов(leading-index), Япония(JP) | 93.8 | 92.7 | 92.5 | 93.3 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов Японии м/м(coincident-index-mm), Япония(JP) | 4.9% | | 1.7% | 2.4% 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов м/м(leading-index-mm), Япония(JP) | 0.5% | | 4.0% | 4.2% 2020.12.07 08:00 ZAR 1 Валовые международные резервы(gross-international-reserves), Южно-Африканская Республика(ZA) | $53.76 B | $54.129 B | $53.658 B | 2020.12.07 08:00 ZAR 1 Чистые международные резервы(net-international-reserves), Южно-Африканская Республика(ZA) | $51.257 B | $52.719 B | $51.364 B | 2020.12.07 09:00 EUR 2 Промышленное производство г/г(industrial-production-yy), Германия(DE) | -3.0% | -11.4% | -7.3% | -6.7% 2020.12.07 09:00 EUR 2 Промышленное производство м/м(industrial-production-mm), Германия(DE) | 3.2% | 7.7% | 1.6% | 2.3% 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности м/м(manufacturing-production-mm), Норвегия(NO) | 0.6% | 0.1% | -0.5% | 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности г/г(manufacturing-production-yy), Норвегия(NO) | -2.7% | -3.3% | -3.4% | 2020.12.07 09:00 NOK 1 Промышленное производство м/м(industrial-production-mm), Норвегия(NO) | -3.5% | 0.0% | -1.7% | -1.6% 2020.12.07 09:00 NOK 1 Промышленное производство г/г(industrial-production-yy), Норвегия(NO) | 0.0% | 6.9% | 6.3% |
Vous pouvez le comparer avec le terminal MT5 lui-même.
Obtention des événements à venir.
// Le script affiche les événements à venir. #include <fxsaber\Calendar\Calendar.mqh> // Calendrier - analyse fondamentale sur l'historique et en temps réel. void OnStart() { CALENDAR Calendar; string Currencies[2]; // Obtenir les devises du caractère courant. Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE); Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT); // Accroche les événements importants à venir par symbole devises. Calendar.Set(Currencies); Print(Calendar.ToString()); // Les a imprimées. }
Ce type d'intégration dans les systèmes d'information permet d'informer les conseillers experts/indicateurs des événements importants à venir.
Backtest sur les données fondamentales.
Vous trouverez ci-dessous un Expert Advisor qui négocie les salaires non agricoles en comparant les valeurs actuelles et les valeurs prévues.
// Expert Advisor pour le trading sur MT4/5-Tester sur l'historique des données fondamentales. #define CALENDAR_FILENAME "Calendar.bin" // Nom du fichier pour la lecture/écriture du calendrier. #property tester_file CALENDAR_FILENAME // Spécifie que le MT5-Tester récupère ce fichier. #include <fxsaber\Calendar\Calendar.mqh> // Calendrier - analyse fondamentale sur l'historique et en temps réel. input group "Calendar" input string inCurrency = "USD"; // Monnaie input string inFilterName = "payrolls"; // Nom du filtre input group "EA" input int inTP = 1000; // TakeProfit input int inSL = 1000; // StopLoss input bool inReverse = true; // Sens de l'échange CALENDAR Calendar; // Objet contenant les données du calendrier. int OnInit() { bool Res = false; if (MQLInfoInteger(MQL_TESTER)) // Si vous travaillez en tant que testeur { Res = Calendar.Load(CALENDAR_FILENAME) && // Chargement des événements à partir du fichier. Calendar.FilterByCurrency(inCurrency) && // Application d'un filtre sur les devises. Calendar.FilterByName(inFilterName); // Application d'un filtre sur le nom de l'événement. if (!Res) // S'il y a des problèmes avec les données chargées, Print("Run the EA in the MT5-Terminal!"); // a indiqué qu'il fallait les obtenir en exécutant l'EA dans MT5-Terminal. } #ifdef __MQL5__ // Travailler dans le terminal. else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // Chargement absolu de tous les événements (historique + futur) du terminal MT5. Calendar.Save(CALENDAR_FILENAME)) // Les enregistrer dans un fichier. MessageBox("You can run the EA in the MT4/5-Tester."); // Nous avons signalé que nous pouvions désormais travailler avec MT4/5-Tester. #endif // #ifdef __MQL5__ return(!Res); } void OnTick() { static int Pos = Calendar.GetPosAfter(TimeCurrent()); // Obtenir la position de l'événement dans le calendrier, juste après l'heure actuelle. if ((Pos < Calendar.GetAmount()) && // Si vous n'avez pas dépassé le calendrier (Calendar[Pos].time < TimeCurrent())) // et l'heure actuelle a dépassé l'événement. { const EVENT Event = Calendar[Pos]; // Réception de l'événement correspondant. if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // Si les valeurs actuelles et prévisionnelles de l'événement sont définies { Print(Event.ToString()); // Imprimer cet événement dans son intégralité. if (Event.Actual > Event.Forecast) // Si la valeur actuelle est supérieure à la valeur prévue, PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For."); // ouvrir une position d'une direction. else PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // Sinon, une autre direction. } Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Obtenir la position de l'événement dans le calendrier, juste après l'heure actuelle. } } #include <MT4Orders.mqh> // https://www.mql5.com/fr/code/16006 #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) // Ouvre une position avec le commentaire spécifié. TICKET_TYPE PositionOpen( const int Type, const string comment ) { return(Type ? OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Bid + inSL * _Point, Bid - inTP * _Point, comment) : OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - inSL * _Point, Ask + inTP * _Point, comment)); }
Exécutez-le une fois dans MT5-Terminal pour sauvegarder toutes les données historiques (~60 Mb). Ensuite, elles seront disponibles dans le Testeur.
Résultat (pour six ans aux prix d'ouverture H1).
Caractéristiques.
- N'utilise pas de DLL, peut être exécuté sur le Marché.
- Fonctionnement multiplateforme : dans MT4, les données sont extraites du fichier.
Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/32430

Données d'un seul passage du testeur.

This is a indicator displaying candlesticks patterns on a chart.

Détection du début d'une nouvelle barre ou d'une nouvelle bougie dans le gestionnaire d'événement OnTick() d'un conseiller expert.

Bibliothèque de lecture/écriture des paramètres d'EA arbitraires.