Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Vues:
160
Note:
(30)
Publié:
\MQL5\Include\fxsaber\Calendar\
String.mqh (1.77 KB) afficher
Event.mqh (20.88 KB) afficher
Calendar.mqh (30.15 KB) afficher
DST.mqh (11.46 KB) afficher
\MQL5\Experts\
MQL5 Freelance 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.0705:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 
2020.12.0705:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 
2020.12.0705:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 
2020.12.0705:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 
2020.12.0705:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 
2020.12.0705: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

    SingleTesterCache SingleTesterCache

    Données d'un seul passage du testeur.

    Candlestick patterns Candlestick patterns

    This is a indicator displaying candlesticks patterns on a chart.

    Détecter le début d'une nouvelle barre ou d'une nouvelle bougie Détecter le début d'une nouvelle barre ou d'une nouvelle bougie

    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.

    Expert Expert

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