Librerías: Calendario - página 14

 
mbjen #:

Hola. ¿Hay alguna posibilidad de mover el calendario a una hora determinada?


No recuerdo toda la funcionalidad. ALT+M ayuda.

 
fxsaber # :


No recuerdo todas las funciones. ALT+M ayuda.

Tengo una buena sugerencia:
En Guardar():
Restar Calendar -= Server_GMT_Offset;
Esto almacenará las horas del calendario en tiempo UTC.

En Cargar():
Añadir Calendar += Server_GMT_Offset;
Esto permite reutilizar el archivo guardado de un terminal en otro terminal con un gmt_offset del broker diferente (pruebas de EA en diferentes terminales).

Sugiero añadir esta funcionalidad a los métodos Save() y Load() de la clase. Además, añadir una opción de usuario (propiedad de la clase) para permitir la corrección de los tiempos de calendario en guardar/cargar también sería útil.


 
amrali #:
Sugiero añadir esta funcionalidad a los métodos Save() y Load() de la clase. Además, añadir una opción de usuario (propiedad de la clase) que permita corregir las horas del calendario al guardar/cargar también sería útil.

Esto es razonable. Desafortunadamente, no estoy listo para hacerlo todavía.

 
Hola - Acabo de utilizar su ejemplo Calendario EA y parece que no es la descarga de los datos del calendario. Funcionaba muy bien antes de la versión 5.0 build 5200. ¿Alguna idea de lo que está mal, o soluciones? Gracias
 
v88 #:
Hola - Acabo de utilizar su ejemplo Calendario EA y no parece estar cargando los datos del calendario. Antes de la versión 5.0 build 5200 funcionaba bien. ¿Alguna idea de lo que está mal o alguna solución? Gracias

Comprobado - funciona.


Estos archivos almacenan un único calendario para todos los terminales.

...\AppData\Roaming\MetaQuotes\Terminal\Community\Calendar\*.dat
 
fxsaber #:

Comprobado: funciona.


Estos archivos almacenan un único calendario para todos los terminales.

Definitivamente no funciona aquí con tu EA de prueba, con 2 terminales diferentes. Uno directamente desde metaquotes y otro a través de mi broker. Véase más abajo, ambos muestran error de código 1:



Veo 3 archivos en \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países y descripciones.


Las líneas en su EA de prueba, muestran que el archivo calendar.bin debe guardarse como "Calendar.bin" en la carpeta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", pero no está allí. Antes de la build 5200, se colocaban allí correctamente. ¿Alguna idea de lo que podría estar mal?


#define  FAKE // Уберите эту строку, чтобы советник заработал. Нужно для прохождения автоматической проверки КБ.

#ifndef  FAKE

// Советник для торговли в MT4/5-Тестере на истории фундаментальных данных.

#define  CALENDAR_FILENAME "Calendar.bin" // Название файла для чтения/записи Календаря.
#property tester_file CALENDAR_FILENAME  // Указание, чтобы MT5-Тестер подхватывал данный файл.

#include <fxsaber\Calendar\Calendar.mqh> // Календарь - фундаментальный анализ на истории и в реал-тайме.

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; // Объект с данными календаря.

int OnInit()
{
  bool Res = false;

  if (MQLInfoInteger(MQL_TESTER)) // Если работаем в Тестере
  {
    Res = Calendar.Load(CALENDAR_FILENAME) &&      // Загрузили события из файла.
          Calendar.FilterByCurrency(inCurrency) && // Применили фильтр по валюте.
          Calendar.FilterByName(inFilterName);     // Применили фильтр по названию события.

    if (!Res)                                      // Если проблемы с загруженными данными,
      Print("Run the EA in the MT5-Terminal!");    // сообщили, что нужно их получить запуском советника в MT5-Терминале.
  }
#ifdef __MQL5__
  // Работаем в Терминале.
  else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // Загрузили абсолютно все события (история + будущее) из MT5-Терминала.
           Calendar.AutoDST() &&                                 // Синхронизировали календарь с котировками.
           Calendar.Save(CALENDAR_FILENAME))                     // Сохранили их в файл.
    MessageBox("You can run the EA in the MT4/5-Tester.");       // Сообщили, что можем теперь работать в MT4/5-Тестере.
#endif // #ifdef __MQL5__

  return(!Res);
}

void OnTick()
{
  static int Pos = Calendar.GetPosAfter(TimeCurrent()); // Получили позицию события в Календаре, которая стоит сразу за текущим временем.

  if ((Pos < Calendar.GetAmount()) &&       // Если не вышли за границы Календаря
      (Calendar[Pos].time < TimeCurrent())) // и текущее время перешагнуло событие.
  {
    const EVENT Event = Calendar[Pos];      // Получили сооответствующее событие.

    if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // Если текущее и прогнозное значения события заданы
    {
      Print(Event.ToString()); // Распечатываем полностью это событие.

      if (Event.Actual > Event.Forecast)                                                                          // Если текущее значение больше прогнозного,
        PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For.");   // открываем позицию одного направления.
      else
        PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // Иначе - другого направления.
    }

    Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Получили позицию события в Календаре, которая стоит сразу за текущим временем.
  }
}

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

// Открывает позицию с заданным комментарием.
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));
}

#else // #ifndef FAKE
  int OnInit() { return(INIT_FAILED); }
#endif // #ifndef FAKE #else
 
v88 #:

Definitivamente no está funcionando aquí con su EA de prueba, con 2 terminales diferentes. Uno directamente desde metaquotes y otro a través de mi broker. Véase más abajo, ambos muestran error de código 1:



Veo 3 archivos en \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países y descripciones.


Las líneas en su EA de prueba, muestran que el archivo calendar.bin debe guardarse como "Calendar.bin" en la carpeta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", pero no está allí. Antes de la build 5200, se colocaban allí correctamente. ¿Alguna idea de lo que podría estar mal?


Para asegurarse de que esto no es mi configuración, he instalado una máquina virtual de Windows fuera de mi propia red, todo limpio. Descargué el terminal, instalé los archivos de inclusión más el EA Calendar_Example. Sigue siendo el mismo problema, código de error 1, calendar.bin no se descarga:


 
v88 #:

¿Alguna idea de lo que puede estar mal?

Hasta que no se solucionen los cambios en MQL5, no veo el sentido de investigarlo. Pruebe la construcción de abajo.

Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
  • 2025.08.04
  • www.mql5.com
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в MetaEditor - там не подключено к Git - ----------------- Проверил логин во вкладке Сообщество. То есть - пока я глядел на вкладку Сообщество в MetaEditor е - этот MetaEditor сам все сделал
 

Hace poco me di cuenta de que guardar todo el calendario en un archivo para trabajar con él en el probador empezaba a agotarse al cabo de unos 50 segundos.

Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0); // <-- тут падает на 5401 - ERR_CALENDAR_TIMEOUT (превышен лимит времени запроса),

Anteriormente, todo funcionaba bien y el calendario completo se descargaba en un archivo sin problemas. Sospecho que con una de las versiones del terminal, el tiempo de espera para CalendarValueHistory se redujo.

Lo he comprobado en diferentes terminales y diferentes servidores, aunque el terminal es b5327 en todas partes. También he probado a reducir el periodo. Por lo tanto, durante un año, también hay un tiempo de espera. Pero durante unos días, se descarga normalmente.

¿Hay alguna solución para evitar dividir las llamadas en periodos cortos?

 
Denis Kislicyn CalendarValueHistory se redujo.

Lo he comprobado en diferentes terminales y diferentes servidores, aunque el terminal es b5327 en todas partes. También he probado a reducir el periodo. Por lo tanto, durante un año, también hay un tiempo de espera. Pero durante unos días, se descarga normalmente.

¿Hay alguna solución para evitar dividir las llamadas en periodos cortos?

He investigado un poco. Si pasas un periodo superior a un mes a CalendarValueHistory, la función empieza a colgarse durante unos 50 segundos y luego se bloquea debido a un timeout. Sin embargo, la misma llamada, pero para un día más corto, se ejecuta en <70ms y guarda perfectamente unos 5.000 eventos de calendario. Definitivamente algo ha cambiado en él.

Traducción automática aplicada por el moderador. Si quieres postear en ruso, por favor hazlo en el foro ruso, y no en el foro inglés. Este es un tema multilingüe, así que por favor publique en el foro correcto, o de lo contrario la auto-traducción no funcionará correctamente.