Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Visualizaciones:
37
Ranking:
(30)
Publicado:
2025.04.03 11:16
\MQL5\Include\fxsaber\Calendar\
String.mqh (1.77 KB) ver
Event.mqh (20.88 KB) ver
Calendar.mqh (30.15 KB) ver
DST.mqh (11.46 KB) ver
\MQL5\Experts\
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

MetaTrader5 dispone de un historial volumétrico actualizado de eventos fundamentales del calendario, a cuyos datos se puede acceder mediante programación.


Esta biblioteca le permite trabajar cómodamente con estos datos. En particular, para utilizarlos en el Probador y en el comercio real.


El trabajo con la biblioteca se muestra en forma de comentarios del código fuente de los ejemplos.


Obtención de datos históricos.

// El script genera datos históricos.

#include <fxsaber\Calendar\Calendar.mqh> // Calendario - análisis fundamental histórico y en tiempo real.

void OnStart()
{
  CALENDAR Calendar;
  
  // Tomó eventos para todas las monedas (NULL) empezando por la de menor importancia (NONE).
  const int Size = Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2020.12.07', D'2020.12.08');
  
  // Los imprimí.
  for (int i = 0; i < Size; i++)
    Print(Calendar[i].ToString());
}


Resultado.

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% | 

    Se puede comparar con la propia MT5-Terminal.


    Obtención de próximos eventos.

    // El script muestra los próximos eventos.
    
    #include <fxsaber\Calendar\Calendar.mqh> // Calendario - análisis fundamental histórico y en tiempo real.
    
    void OnStart()
    {
      CALENDAR Calendar;
      
      string Currencies[2];
      
      // Obtener las monedas del carácter actual.
      Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
      Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
        
      // Tomó los próximos eventos importantes por símbolo monedas.
      Calendar.Set(Currencies);
      
      Print(Calendar.ToString()); // Los imprimí.
    }

    Esta incrustación en sistemas de información permite informar sobre próximos eventos importantes del calendario en Asesores Expertos/indicadores.


    Backtest sobre datos fundamentales.


    A continuación se muestra un Asesor Experto que negocia las Nóminas No Agrícolas mediante la comparación de los valores actuales y previstos.

    // Asesor Experto para operar en MT4/5-Tester sobre el historial de datos fundamentales.
    
    #define  CALENDAR_FILENAME "Calendar.bin" // Nombre del fichero para leer/escribir el Calendario.
    #property tester_file CALENDAR_FILENAME  // Especifica que MT5-Tester recoge este archivo.
    
    #include <fxsaber\Calendar\Calendar.mqh> // Calendario - análisis fundamental histórico y en tiempo real.
    
    input group "Calendar"
    input string inCurrency = "USD";        // Moneda
    input string inFilterName = "payrolls"; // FilterName
    
    input group "EA"
    input int inTP = 1000; // TakeProfit
    input int inSL = 1000; // StopLoss
    input bool inReverse = true; // Dirección comercial
    
    CALENDAR Calendar; // Objeto con los datos del calendario.
    
    int OnInit()
    {      
      bool Res = false;
      
      if (MQLInfoInteger(MQL_TESTER)) // Si trabaja en Tester
      {
        Res = Calendar.Load(CALENDAR_FILENAME) &&      // Cargados los eventos desde el fichero.
              Calendar.FilterByCurrency(inCurrency) && // Aplicado un filtro de moneda.
              Calendar.FilterByName(inFilterName);     // Aplicado un filtro en el nombre del evento.
        
        if (!Res)                                      // Si hay problemas con los datos cargados,
          Print("Run the EA in the MT5-Terminal!");    // informó de que usted necesita para obtenerlos mediante la ejecución de la EA en MT5-Terminal.
      }
    #ifdef __MQL5__
      // Trabajar en el Terminal.
      else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // Cargado absolutamente todos los eventos (historia + futuro) de MT5-Terminal.
               Calendar.Save(CALENDAR_FILENAME))                     // Guárdalos en un archivo.
        MessageBox("You can run the EA in the MT4/5-Tester.");       // Informamos que ya podemos trabajar en MT4/5-Tester.
    #endif // #ifdef __MQL5__
    
      return(!Res);
    }
    
    void OnTick()
    {
      static int Pos = Calendar.GetPosAfter(TimeCurrent()); // Obtener la posición del evento en el Calendario, que está justo después de la hora actual.
      
      if ((Pos < Calendar.GetAmount()) &&       // Si no has ido más allá del Calendario
          (Calendar[Pos].time < TimeCurrent())) // y el tiempo actual ha pasado el evento.
      {        
        const EVENT Event = Calendar[Pos];      // Recibido el evento correspondiente.
        
        if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // Si se fijan los valores actual y previsto del suceso
        {
          Print(Event.ToString()); // Imprime este evento en su totalidad.
    
          if (Event.Actual > Event.Forecast)                                                                          // Si el valor actual es mayor que el valor previsto,
            PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For.");   // abrir una posición de una dirección.
          else
            PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // De lo contrario, otra dirección.
        }
                
        Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Obtener la posición del evento en el Calendario, que está justo después de la hora actual.
      }
    }
    
    #include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006
    
    #define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
    #define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
    
    // Abre una posición con el comentario especificado.
    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));
    }

    Ejecútelo una vez en MT5-Terminal para guardar todos los datos históricos (~60 Mb). Después estarán disponibles en el Probador.


    Resultado (para seis años a precios de apertura H1).


    Características.

    • No utiliza DLLs, puede ejecutarse en el Marketplace.
    • Funcionamiento multiplataforma: en MT4 obtiene los datos del archivo.

    Traducción del ruso realizada por MetaQuotes Ltd
    Artículo original: https://www.mql5.com/ru/code/32430

    SingleTesterCache SingleTesterCache

    Datos de una sola pasada del probador.

    Script para Mapear Símbolos de Market Watch Basado en Similaridad Script para Mapear Símbolos de Market Watch Basado en Similaridad

    Este script es una solución de referencia para mapear nombres de símbolos configurados por los usuarios en EAs o scripts de MetaTrader 5 con los nombres reales proporcionados por el broker. Utiliza el algoritmo de distancia de Levenshtein para identificar automáticamente el símbolo más similar en Market Watch. Ideal para desarrolladores que enfrentan problemas de compatibilidad con prefijos o sufijos en los nombres de los símbolos. Es un punto de partida personalizable para adaptarse a cualquier necesidad específica.

    Detección del inicio de una nueva barra o vela Detección del inicio de una nueva barra o vela

    Detección del inicio de una nueva barra o vela en el manejador de eventos OnTick() de un Asesor Experto.

    MultiTester MultiTester

    Múltiples ejecuciones/optimizaciones en Tester.