Librerie: Calendario - pagina 14

 
mbjen #:

Salve. C'è la possibilità di spostare il calendario a una certa ora?


Non ricordo tutte le funzionalità. ALT+M aiuta.

 
fxsaber # :


Non ricordo tutte le funzionalità. ALT+M aiuta.

Ho un bel suggerimento:
Su Save():
Sottrarre Calendario -= Server_GMT_Offset;
Questo memorizzerà gli orari del calendario in tempo UTC.

Su Load():
Aggiungi Calendario += Server_GMT_Offset;
Questo permette di riutilizzare il file salvato da un terminale in un altro terminale con un gmt_offset diverso del broker (test EA su terminali diversi).

Suggerisco di aggiungere questa funzionalità ai metodi Save() e Load() della classe. Inoltre, sarebbe utile aggiungere un'opzione per l'utente (proprietà della classe) che consenta di correggere gli orari del calendario al momento del salvataggio/caricamento.


 
amrali #:
Suggerisco di aggiungere questa funzionalità ai metodi Save() e Load() della classe. Inoltre, sarebbe utile aggiungere un'opzione per l'utente (proprietà della classe) che consenta di correggere gli orari del calendario al momento del salvataggio/caricamento.

Questo è ragionevole. Purtroppo non sono ancora pronto a farlo.

 
Salve - Ho appena utilizzato il vostro esempio di EA Calendario e sembra che non riesca a scaricare i dati del calendario. Funzionava benissimo prima della release 5.0 build 5200. Qualche idea su cosa non va o su come risolvere il problema? Grazie
 
v88 #:
Salve - Ho appena utilizzato il vostro esempio di Calendar EA e sembra che non carichi i dati del calendario. Prima della versione 5.0 build 5200 funzionava bene. Avete idea di cosa sia sbagliato o di qualche soluzione? Grazie

Controllato - funziona.


Questi file memorizzano un unico calendario per tutti i terminali.

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

Controllato: funziona.


Questi file memorizzano un unico calendario per tutti i terminali.

In questo caso non funziona assolutamente con il tuo EA di prova, con due terminali diversi. Uno direttamente da metaquotes e uno attraverso il mio broker. Vedi sotto, entrambi mostrano l'errore codice 1:



Vedo 3 file in \AppData\Roaming\MetaQuotes\Terminal\Community\Calendario, eventi, paesi e descrizioni.


Le righe del vostro test EA mostrano che il file calendar.bin dovrebbe essere salvato come "Calendar.bin" nella cartella "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", ma non è lì. Prima della build 5200, venivano inseriti correttamente. Qualche idea su cosa potrebbe essere sbagliato?


#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";        // Valuta
input string inFilterName = "payrolls"; // NomeFiltro

input group "EA"
input int inTP = 1000; // TakeProfit
input int inSL = 1000; // StopLoss
input bool inReverse = true; // Direzione del commercio

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 #:

Qui non funziona assolutamente con il tuo EA di prova, con 2 terminali diversi. Uno direttamente da metaquotes e uno attraverso il mio broker. Vedi sotto, entrambi mostrano l'errore codice 1:



Vedo 3 file in \AppData\Roaming\MetaQuotes\Terminal\Community\Calendario, eventi, paesi e descrizioni.


Le righe del vostro test EA mostrano che il file calendar.bin dovrebbe essere salvato come "Calendar.bin" nella cartella "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", ma non è lì. Prima della build 5200, venivano inseriti correttamente. Qualche idea su cosa potrebbe essere sbagliato?


Per assicurarmi che non si tratti della mia configurazione, ho installato una macchina virtuale di Windows al di fuori della mia rete, tutto pulito. Ho scaricato il terminale, installato i file di inclusione e l'EA Calendar_Example. Ancora lo stesso problema, codice di errore 1, calendar.bin non viene scaricato:


 
v88 #:

Qualche idea su cosa potrebbe essere sbagliato?

Finché le modifiche in MQL5 non saranno risolte, non vedo il motivo di indagare. Provare la build qui sotto.

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

Di recente ho notato che il salvataggio dell'intero calendario in un file per lavorarci nel tester ha iniziato ad andare in timeout dopo circa 50 secondi.

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

In precedenza, tutto funzionava bene e l'intero calendario veniva scaricato in un file senza problemi. Sospetto che con una delle versioni del terminale il timeout per CalendarValueHistory sia stato ridotto.

Ho controllato su diversi terminali e diversi server, anche se il terminale è b5327 ovunque. Ho anche provato a ridurre il periodo. Quindi, per un anno, c'è anche un timeout. Ma per alcuni giorni il download avviene normalmente.

Esistono soluzioni per evitare di suddividere le chiamate in brevi periodi?

 
Denis Kislicyn CalendarValueHistory sia stato ridotto.

Ho controllato su diversi terminali e diversi server, anche se il terminale è b5327 ovunque. Ho anche provato a ridurre il periodo. Quindi, per un anno, c'è anche un timeout. Ma per alcuni giorni si scarica normalmente.

Esistono soluzioni per evitare di suddividere le chiamate in brevi periodi?

Ho fatto una piccola ricerca. Se si passa un periodo più lungo di un mese a CalendarValueHistory, la funzione inizia a bloccarsi per circa 50 secondi e poi si blocca a causa di un timeout. Tuttavia, la stessa chiamata, ma per un solo giorno in meno, viene eseguita in <70 ms e salva perfettamente circa 5.000 eventi di calendario. Qualcosa è sicuramente cambiato.

Traduzione automatica applicata dal moderatore. Se volete scrivere in russo, fatelo nel forum russo e non in quello inglese. Questo è un argomento multilingue, quindi si prega di postare nel forum corretto, altrimenti la traduzione automatica non funzionerà correttamente.