Não me lembro de todas as funcionalidades. ALT+M ajuda.
Tenho uma boa sugestão:
Em Save():
Subtrair Calendar -= Server_GMT_Offset;
Isso armazenará os horários do calendário no horário UTC.
Em Load():
Adicionar Calendar += Server_GMT_Offset;
Isso permite a reutilização do arquivo salvo de um terminal em outro terminal com um gmt_offset de corretor diferente (teste de EA em terminais diferentes).
Sugiro adicionar essa funcionalidade aos métodos Save() e Load() da classe. Além disso, seria útil adicionar uma opção de usuário (propriedade de classe) para permitir a correção dos horários do calendário ao salvar/carregar.
Sugiro adicionar essa funcionalidade aos métodos Save() e Load() da classe. Além disso, seria útil adicionar uma opção de usuário (propriedade de classe) para permitir a correção das horas do calendário ao salvar/carregar.
Isso é razoável. Infelizmente, ainda não estou pronto para fazer isso.
Olá - Acabei de usar seu exemplo de EA de calendário e parece que ele não está baixando os dados do calendário. Ele estava funcionando muito bem antes da versão 5.0 build 5200. Alguma ideia do que está errado ou alguma correção? Muito obrigado
v88 #: Olá - Acabei de usar o exemplo do EA Calendar e parece que ele não está carregando os dados do calendário. Antes da versão 5.0 build 5200, ele estava funcionando bem. Alguma ideia do que está errado ou alguma correção? Obrigado
Verificado - está funcionando.
Esses arquivos armazenam um único calendário para todos os terminais.
Esses arquivos armazenam um único calendário para todos os terminais.
Definitivamente não está funcionando aqui com seu EA de teste, com dois terminais diferentes. Um diretamente da metaquotes e outro por meio de minha corretora. Veja abaixo, ambos mostram o erro de código 1:
Vejo 3 arquivos em \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países e descrições.
As linhas em seu EA de teste mostram que o arquivo calendar.bin deve ser salvo como "Calendar.bin" na pasta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", mas ele não está lá. Antes da compilação 5200, eles eram colocados lá corretamente. Alguma ideia do que pode estar errado?
#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"; // Moedainputstring inFilterName = "payrolls"; // FilterNameinput group "EA"inputint inTP = 1000; // TakeProfitinputint inSL = 1000; // StopLossinputbool inReverse = true; // Direção da negociação
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
Definitivamente não está funcionando aqui com seu EA de teste, com dois terminais diferentes. Um diretamente da metaquotes e outro por meio de minha corretora. Veja abaixo, ambos mostram o erro de código 1:
Vejo 3 arquivos em \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países e descrições.
As linhas em seu EA de teste mostram que o arquivo calendar.bin deve ser salvo como "Calendar.bin" na pasta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", mas ele não está lá. Antes da compilação 5200, eles eram colocados lá corretamente. Alguma ideia do que pode estar errado?
Para garantir que não seja a minha configuração, instalei uma máquina virtual do Windows fora da minha própria rede, tudo limpo. Baixei o terminal, instalei os arquivos de inclusão e o EA Calendar_Example. O problema continua o mesmo, código de erro 1, calendar.bin não está sendo baixado:
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в MetaEditor - там не подключено к Git - ----------------- Проверил логин во вкладке Сообщество. То есть - пока я глядел на вкладку Сообщество в MetaEditor е - этот MetaEditor сам все сделал
Recentemente, notei que salvar o calendário inteiro em um arquivo para trabalhar com ele no testador começou a expirar após cerca de 50 segundos.
Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0); // <-- тут падает на 5401 - ERR_CALENDAR_TIMEOUT (превышен лимит времени запроса),
Anteriormente, tudo funcionava bem e todo o calendário era baixado em um arquivo sem nenhum problema. Suspeito que, em uma das versões do terminal, o tempo limite do CalendarValueHistory tenha sido reduzido.
Verifiquei em diferentes terminais e servidores, embora o terminal seja b5327 em todos os lugares. Também tentei reduzir o período. Portanto, durante um ano, também há um tempo limite. Mas por alguns dias, o download é feito normalmente.
Há alguma solução alternativa para evitar a divisão das chamadas em períodos curtos?
Denis Kislicyn CalendarValueHistory tenha sido reduzido. Verifiquei em diferentes terminais e servidores, embora o terminal seja b5327 em todos os lugares. Também tentei reduzir o período. Portanto, durante um ano, também há um tempo limite. Mas, por alguns dias, o download é feito normalmente.
Há alguma solução alternativa para evitar a divisão das chamadas em períodos curtos?
Fiz uma pequena pesquisa. Se eu passar um período maior que um mês para CalendarValueHistory , a função trava por cerca de 50 segundos e depois expira. No entanto, a mesma chamada, mas com apenas um dia a menos, é executada em menos de 70 ms e armazena perfeitamente cerca de 5.000 eventos do calendário. Algo definitivamente mudou.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Olá. Existe alguma possibilidade de mover o calendário para um determinado horário?
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Bibliotecas: Calendário
fxsaber, 2023.04.13 11:46 am.
Isso é resolvido com uma linha.
Calendar += 3600.Não me lembro de toda a funcionalidade. ALT+M ajuda.
Não me lembro de todas as funcionalidades. ALT+M ajuda.
Isso é razoável. Infelizmente, ainda não estou pronto para fazer isso.
Olá - Acabei de usar o exemplo do EA Calendar e parece que ele não está carregando os dados do calendário. Antes da versão 5.0 build 5200, ele estava funcionando bem. Alguma ideia do que está errado ou alguma correção? Obrigado
Verificado - está funcionando.
Esses arquivos armazenam um único calendário para todos os terminais.
Verificado - está funcionando.
Esses arquivos armazenam um único calendário para todos os terminais.
Definitivamente não está funcionando aqui com seu EA de teste, com dois terminais diferentes. Um diretamente da metaquotes e outro por meio de minha corretora. Veja abaixo, ambos mostram o erro de código 1:

Vejo 3 arquivos em \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países e descrições.
As linhas em seu EA de teste mostram que o arquivo calendar.bin deve ser salvo como "Calendar.bin" na pasta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", mas ele não está lá. Antes da compilação 5200, eles eram colocados lá corretamente. Alguma ideia do que pode estar errado?
Definitivamente não está funcionando aqui com seu EA de teste, com dois terminais diferentes. Um diretamente da metaquotes e outro por meio de minha corretora. Veja abaixo, ambos mostram o erro de código 1:
Vejo 3 arquivos em \AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, eventos, países e descrições.
As linhas em seu EA de teste mostram que o arquivo calendar.bin deve ser salvo como "Calendar.bin" na pasta "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files", mas ele não está lá. Antes da compilação 5200, eles eram colocados lá corretamente. Alguma ideia do que pode estar errado?
Para garantir que não seja a minha configuração, instalei uma máquina virtual do Windows fora da minha própria rede, tudo limpo. Baixei o terminal, instalei os arquivos de inclusão e o EA Calendar_Example. O problema continua o mesmo, código de erro 1, calendar.bin não está sendo baixado:

Alguma ideia do que pode estar errado?
Até que as alterações na MQL5 sejam corrigidas, não vejo sentido em investigar o problema. Experimente a compilação abaixo.
Recentemente, notei que salvar o calendário inteiro em um arquivo para trabalhar com ele no testador começou a expirar após cerca de 50 segundos.
Anteriormente, tudo funcionava bem e todo o calendário era baixado em um arquivo sem nenhum problema. Suspeito que, em uma das versões do terminal, o tempo limite do CalendarValueHistory tenha sido reduzido.
Verifiquei em diferentes terminais e servidores, embora o terminal seja b5327 em todos os lugares. Também tentei reduzir o período. Portanto, durante um ano, também há um tempo limite. Mas por alguns dias, o download é feito normalmente.
Há alguma solução alternativa para evitar a divisão das chamadas em períodos curtos?
Há alguma solução alternativa para evitar a divisão das chamadas em períodos curtos?
Fiz uma pequena pesquisa. Se eu passar um período maior que um mês para CalendarValueHistory , a função trava por cerca de 50 segundos e depois expira. No entanto, a mesma chamada, mas com apenas um dia a menos, é executada em menos de 70 ms e armazena perfeitamente cerca de 5.000 eventos do calendário. Algo definitivamente mudou.