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.
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.
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"inputstring inCurrency = "USD"; // Valutainputstring inFilterName = "payrolls"; // NomeFiltroinput group "EA"inputint inTP = 1000; // TakeProfitinputint inSL = 1000; // StopLossinputbool inReverse = true; // Direzione del commercio
CALENDAR Calendar; // Объект с данными календаря.intOnInit()
{
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__// Работаем в Терминале.elseif (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);
}
voidOnTick()
{
staticint 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( constint Type, conststring 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 FAKEintOnInit() { return(INIT_FAILED); }
#endif // #ifndef FAKE #else
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:
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в 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.
Salve. C'è la possibilità di spostare il calendario a una certa ora?
Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading.
Biblioteche: Calendario
fxsaber, 2023.04.13 11:46 am.
Questo è risolto con una sola riga.
Calendar += 3600.Non ricordo tutte le funzionalità. ALT+M aiuta.
Non ricordo tutte le funzionalità. ALT+M aiuta.
Questo è ragionevole. Purtroppo non sono ancora pronto a farlo.
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.
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?
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:

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.
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.
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?
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.